首页 > 其他 > 详细

遍历无向连通图所需的最小路程

时间:2019-05-19 19:46:29      阅读:74      评论:0      收藏:0      [点我收藏+]

原文地址:https://www.jianshu.com/p/3555e50b026d

问题描述

一张包含\(N\)个节点、\(N-1\)条边的无向连通图,其中,节点从1到\(N\)进行编号,每条边的长度均为1。假设从1号节点出发并打算遍历图中所有节点,那么所需要的总路程至少是多少?

解题思路

一共\(N-1\)条边,每条边走2次,共\(2*(N-1)\)大小的总路程。当不回头的path为最大深度path时,总路程最小。记最大深度值为\(d\),则最小总路程等于\(2*(N-1)-d\)

程序实现

#include<bits/stdc++.h> //万能头文件,包含了目前C++所包含的所有头文件
using namespace std;

const int MAXN=100001;
vector<vector<int>> vec(MAXN);
int deep;

void dfs(int start,int prev,int w){
    for(int i=0;i<vec[start].size();i++){
        if(vec[start][i]==prev) continue;
        dfs(vec[start][i],start,w+1);
        }
    deep=max(deep,w);
    }

int main(){
    int N;
    cin>>N;
    for(int i=1;i<N;i++){
        int x,y;
        cin>>x>>y;
        vec[x].push_back(y);
        vec[y].push_back(x);
    }
    deep=0;
    dfs(1,-1,0);
    cout<<2*(N-1)-deep<<endl;
    return 0;
}

遍历无向连通图所需的最小路程

原文:https://www.cnblogs.com/cherrychenlee/p/10890408.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!