最短路,简单题,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; }
时间: 2024-12-25 10:16:22