这个题是单源最短路径,显然是dijkstra(0MS)效率高,Floyd(16MS)也可以,但是效率低点。纯当练习下Floyd(第一次用)。
代码:
1 #include<iostream>
2 #include<cstdlib>
3 #include<cstring>
4 #define max 0x7fffffff
5 using namespace std;
6
7 int p[101][101]={0,};
8 int Floyd(int n);
9
10 int main()
11 {
12 int i,j,n;
13 char ch[20];
14 cin>>n;
15 for(i = 1 ; i < n ; ++i)//只输入下三角(并且不包括那个对角线)
16 for(j = 0 ; j < i ; ++j)
17 {
18 cin>>ch;
19 if(ch[0] == 'x')//不可达
20 p[i][j] = p[j][i] = max;
21 else
22 p[i][j] = p[j][i] = atoi(ch);//将字符串转换为int
23 }
24 for(i = 0 ; i < n ; ++i)
25 p[i][i] = 0;//自己到自己为0
26
27 printf("%d\n",Floyd(n));
28
29 //system("pause");
30 return 0;
31 }
32
33 int Floyd(int n)
34 {
35 int i,j,k,m;
36 for(i = 0 ; i < n ; ++i)
37 for(j = 0 ; j < n ; ++j)
38 for(k = 0 ; k < n ; ++k)
39 if(p[j][i] < max && p[i][k] < max && p[j][i]+p[i][k] < p[j][k] )
40 p[j][k] = p[j][i]+p[i][k];
41
42 m = 0 ;
43 for(i = 1 ; i < n ;++i)
44 if(p[0][i] < max && m < p[0][i])
45 m = p[0][i];
46
47 return m;
48 }