描述
罗老师被邀请参加一个舞会,是在城市n,而罗老师当前所处的城市为1,附近还有很多城市2~n-1,有些城市之间没有直接相连的路,有些城市之间有直接相连的路,这些路都是双向的,当然也可能有多条。
现在给出直接相邻城市的路长度,罗老师想知道从城市1到城市n,最短多少距离。
格式
输入格式
输入n, m,表示n个城市和m条路;
接下来m行,每行a b c, 表示城市a与城市b有长度为c的路。
输出格式
输出1到n的最短路。如果1到达不了n,就输出-1。
样例
输入样例
5 5
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100
输出样例
90
限制
时间限制:1000 ms
内存限制:65536 KB
代码
#include<stdio.h>int a[200][200],b[200][200],path[200][200];void floyd(int n){int i,j,k;for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(i!=j)path[i][j]=i;elsepath[i][j]=-1;}}for(k=1; k<=n; k++){for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(a[i][j]>a[i][k]+a[k][j]){a[i][j]=a[i][k]+a[k][j];path[i][j]=path[k][j];}}}}}int main(){int n,m,i,j;scanf("%d %d",&n,&m);for(i=1; i<=m; i++){int x,y,z;scanf("%d %d",&x,&y);if(b[x][y]==0)scanf(" %d",&a[x][y]);else{scanf(" %d",&z);if(z<a[x][y])a[x][y]==z;}b[x][y]=1;}for(i=1;i<=m;i++){for(j=1;j<=m;j++){if(a[i][j]==0)a[i][j]=999;}}floyd(n);if(a[1][n]==999)printf("-1");elseprintf("%d",a[1][n]);return 0;}
