最短路,简单题,floyd实现,在求最短路时一定要是是最大节点编号maxnum而不是输入的n,否则是错的。
#include<iostream>
using namespace std;
int map[105][105]; //无向图
void Init()
{
int MAX=1000000,i,j;
for(i=1;i<=104;i++)
for(j=1;j<=104;j++)
if(i==j) map[i][j]=0;
else map[i][j]=MAX;
}
void floyd(int n)
{
for(int k=1;k<=n;k++) //k代表中间点
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(map[i][k]+map[k][j]<map[i][j])
map[i][j]=map[i][k]+map[k][j];
}
int main()
{
int n,m,a,b,c,maxnum;
while(cin>>n>>m &&(n||m))
{
Init();
maxnum=0; //最大节点编号
for(int i=0;i<m;i++)
{
cin>>a>>b>>c;
map[a][b]=map[b][a]=c;
maxnum=maxnum>a?maxnum:a;
maxnum=maxnum>b?maxnum:b;
}
floyd(maxnum); //一定要是最大节点编号,而不是n。
cout<<map[1][n]<<endl;
}
return 0;
}原文地址:http://blog.csdn.net/a809146548/article/details/44283581