题目
给一个无向有权(距离)图,求两点之间最小距离。
思路
根据给出的数据建立有个无向图。
从出发点开始深度遍历便可。遍历的时候得出出发点到遍历到的点的最短路径。便可得出答案。
代码
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=1000+1;
const int MAXM=10000+1;
int N,M,S,T,head[MAXN],e=0;
int ans[MAXN];
struct EDGE
{
int v,next,cost;
}edge[MAXM<<1];
void addEdge(int x,int y,int z)
{
edge[e].v=y;
edge[e].cost=z;
edge[e].next=head[x];
head[x]=e++;
}
void dfs(int x)
{
if(x==T) return;
for(int p=head[x];p!=-1;p=edge[p].next)
if(ans[edge[p].v]==-1 || ans[x]+edge[p].cost<ans[edge[p].v])
{
ans[edge[p].v]=ans[x]+edge[p].cost;
dfs(edge[p].v);
}
}
int main()
{
memset(head,-1,sizeof(head));
memset(ans,-1,sizeof(ans));
scanf("%d%d%d%d",&N,&M,&S,&T);
int a,b,c;
while(M--)
{
scanf("%d%d%d",&a,&b,&c);
addEdge(a,b,c);
addEdge(b,a,c);
}
ans[S]=0;
dfs(S);
printf("%d",ans[T]);
return 0;
}
本文介绍了一种求解无向有权图中两点间最短距离的方法。通过深度优先搜索(DFS)实现,遍历过程中更新各节点的最短路径。

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



