两遍dfs
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=100005;
int n,m,t,p,ans;
int d[N],first[N],v[N],w[N],next[N];
void add(int x,int y,int z)
{
t++;
next[t]=first[x];
first[x]=t;
v[t]=y;
w[t]=z;
}
void dfs(int x,int father)
{
int i,j;
if(ans<d[x])
{
ans=d[x];
p=x;
}
for(i=first[x];i;i=next[i])
{
j=v[i];
if(j==father)
continue;
d[j]=d[x]+w[i];
dfs(j,x);
}
}
void find(int x)
{
ans=0;
d[x]=0;
dfs(x,0);
}
int main()
{
int x,y,z,i;
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
find(1);
find(p);
printf("%d",ans);
return 0;
}
该博客主要探讨了图的深度优先搜索(DFS)算法,并应用DFS寻找给定图中两个节点之间的最短路径。代码实现包括了两次DFS,首先从源节点找到目标节点的最短距离,然后反向追溯找到路径。该算法适用于解决图论中的路径查找问题。
964

被折叠的 条评论
为什么被折叠?



