标准最短路,可以用dijsktra,也可以用bell-ford,当然spfa是最好的选择。
//spfa
#include <iostream>
#include <string.h>
using namespace std;
int i,j,k,l,visit[1001],r,a[1001][1001],d[1001],q[1001],n,m,x,y;
int main()
{
while (cin >> n >> m&&(n!=0||m!=0))
{
memset(a,0x3f,sizeof(a));
memset(d,0x3f,sizeof(d));
memset(visit,0,sizeof(visit));
for (i=0;i<m;i++)
{
cin >> x >> y;
cin >> a[x][y];
a[y][x]=a[x][y];
}
d[1]=0;
q[0]=1;
visit[1]=1;
l=0;
r=1;
while (l<r)
{
k=q[l];
visit[k]=0;
for (i=1;i<=n;i++)
{
if (d[k]+a[k][i]<d[i])
{
d[i]=d[k]+a[k][i];
if (!visit[i])
{
visit[i]=1;
q[r++]=i;
}
}
}
l++;
}
cout << d[n] << endl;
}
return 0;
}
SPFA算法求解最短路径问题

本文介绍了一种高效求解最短路径问题的SPFA算法,通过实例演示了如何使用该算法解决实际问题。
787

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



