最短路

 

时间限制:1 秒

内存限制:128 兆

特殊判题:

提交:1678

解决:816

题目描述:

在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

输入:

输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。输入保证至少存在1条商店到赛场的路线。
当输入为两个0时,输入结束。

输出:

对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间。

 1 #include<iostream>

 2 

 3 #include<string>

 4 

 5 using namespace std;

 6 

 7  

 8 

 9  

10 

11 int ans[101][101];

12 

13  

14 

15  

16 

17 int main(){

18 

19  

20 

21 int m,n;

22 

23 while(cin>>n)

24 

25 {

26 

27     cin>>m;

28 

29 if(n==0&&m==0) break;

30 

31  

32 

33          int i,j,k;

34 

35 for(i=1;i<=n;i++)

36 

37 for(j=1;j<=n;j++)

38 

39                   ans[i][j]=-1;

40 

41 ans[i][i]=0;//自己到自己

42 

43  

44 

45  

46 

47          int a,b,c;

48 

49 while(m--)

50 

51 {

52 

53   cin>>a>>b>>c;

54 

55   ans[a][b]=c;

56 

57   ans[b][a]=c;

58 

59 }

60 

61 for(k=1;k<=n;k++)

62 

63 for(i=1;i<=n;i++)

64 

65 for(j=1;j<=n;j++)

66 

67                    if(ans[i][k]!=-1&&ans[k][j]!=-1&&(ans[i][j]==-1||ans[i][k]+ans[k][j]<ans[i][j]))

68 

69   ans[i][j]=ans[i][k]+ans[k][j];

70 

71    

72 

73   

74 

75  

76 

77 cout<<ans[1][n]<<endl;

78 

79  

80 

81 }

82 

83 return 0;

84 

85 } 

 

你可能感兴趣的:(最短路)