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

问题描述

一张包含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://zh.visualgo.net/graphds 浅谈图形结构https://zh.visualgo...
    狼之独步阅读 4,188评论 0 0
  • 1. 图的定义和基本术语 线性结构中,元素仅有线性关系,每个元素只有一个直接前驱和直接后继;树形结构中,数据元素(...
    yinxmm阅读 5,481评论 0 3
  • -DFS(Depth First Search):深度优先搜索 访问完一个顶点的所有邻接点之后,会按原路返回,对应...
    Spicy_Crayfish阅读 2,853评论 1 0
  • 今天的主要成果是实现了微信的四个页面的切换。 主要运用的到功能有中继器,控制面板。当布局相同,内容不同时,选择中继...
    独立行走的喵阅读 2,603评论 0 0
  • 高铁进站刷身份证时,机器一直警报人脸识别失败,我纳闷着把身份证来回刷了好几次,但依然识别失败。 后面跟着的小伙突然...
    暮光sin阅读 96评论 0 1