1 #include <iostream>
2 #include <math.h>
3 #include <vector>
4 #include <map>
5
6 int MAX=20000;
7
8 using namespace std;
9
10 int main()
11 {
12 // X A B C D E F G H I Y
13 int G[12][12] = { {0 ,2 ,MAX,MAX,MAX,MAX,MAX,MAX,MAX,MAX,MAX},
14 {2 ,0 ,5 ,MAX,3 ,MAX,MAX,MAX,MAX,MAX,MAX},
15 {MAX,5 ,0 ,MAX,2 ,MAX,MAX,MAX,5 ,MAX,MAX},
16 {MAX,MAX,MAX,0 ,2 ,MAX,6 ,MAX,MAX,MAX,MAX},
17 {MAX,3 ,2 ,2 ,0 ,7 ,MAX,MAX,MAX,MAX,MAX},
18 {MAX,MAX,MAX,MAX,7 ,0 ,MAX,MAX,MAX,MAX,2 },
19 {MAX,MAX,MAX,6 ,MAX,MAX,0 ,4 ,MAX,MAX,MAX},
20 {MAX,MAX,MAX,MAX,MAX,MAX,4 ,0 ,MAX,MAX,4 },
21 {MAX,MAX,5 ,MAX,MAX,MAX,MAX,MAX,0 ,4 ,MAX},
22 {MAX,MAX,MAX,MAX,MAX,MAX,MAX,MAX,4 ,0 ,MAX},
23 {MAX,MAX,MAX,MAX,MAX,2 ,MAX,4 ,MAX,MAX,0 } };
24
25 int D[12][12], path[11][11];
26 for (int i = 0; i < 11; i++)
27 {
28 for (int j = 0; j < 11; j++)
29 {
30 D[i][j] = G[i][j];
31 if (D[i][j] == 0 || D[i][j] == MAX)
32 path[i][j] = -1;
33 else
34 path[i][j] = i;
35 }
36 }
37
38 cout << "初始化D:" << endl;
39 for (int i = 0; i < 11; i++) {
40 for (int j = 0; j < 11; j++)
41 cout << D[i][j] << " ";
42 cout << endl;
43 }
44
45 cout << "初始化Path:" << endl;
46 for (int i = 0; i < 11; i++) {
47 for (int j = 0; j < 11; j++)
48 cout << path[i][j] << " ";
49 cout << endl;
50 }
51
52 for (int k = 0; k < 11; k++)
53 {
54 for (int i = 0; i < 11; i++)
55 {
56 for (int j = 0; j < 11; j++)
57 {
58 if (D[i][j] > D[i][k] + D[k][j])
59 {
60 D[i][j] = D[i][k] + D[k][j];
61 path[i][j] = k;
62 }
63 }
64 }
65 cout <<"第" <<k<< "次D:" << endl;
66 for (int i = 0; i < 11; i++) {
67 for (int j = 0; j < 11; j++)
68 cout << D[i][j] << " ";
69 cout << endl;
70 }
71
72 cout << "第" << k << "次path:" << endl;
73 for (int i = 0; i < 11; i++)
74 {
75 for (int j = 0; j < 11; j++)
76 cout << path[i][j] << " ";
77 cout << endl;
78 }
79 }
80 }