标签:style blog io color os sp for 数据 div
数据结构课图作业之最短路。
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 5 #define N 120 6 #define INF 0x3f3f3f3f 7 #define _clr(x, y) memset(x, y, sizeof(x)) 8 9 int map[N][N]; 10 int dist[N], n; 11 int pre[N]; 12 bool used[N]; 13 14 void Init() 15 { 16 _clr(used, 0); 17 _clr(map, INF); 18 for(int i=0; i<=n; i++) 19 map[i][i]=0; 20 } 21 22 void Dijkstra(int s, int t) 23 { 24 int k, cnt=0; 25 pre[cnt++] = s; 26 for(int i=1; i<=n; i++) 27 dist[i] = map[s][i]; 28 used[s] = true; 29 for(int i=1; i<=n; i++) 30 { 31 int tmp = INF; 32 for(int j=1; j<=n; j++) 33 { 34 if(!used[j] && dist[j]<tmp) 35 tmp = dist[k=j]; 36 } 37 if(tmp==INF) break; 38 used[k] = true; 39 pre[cnt++] = k; 40 for(int j=1; j<=n; j++) 41 { 42 if(!used[j] && map[k][j]!=INF) 43 { 44 int tmp = dist[k] + map[k][j]; 45 if(tmp < dist[j]) 46 dist[j] = tmp; 47 } 48 } 49 } 50 cout << "最短路径如下:\n"; 51 for(int i=0; i<cnt; i++) 52 cout << pre[i] << " "; 53 cout << endl << "路程总长度为: " << dist[t] << endl; 54 } 55 int main() 56 { 57 int m, x, y, z; 58 while(cin >> n >> m) 59 { 60 Init(); 61 for(int i=0; i<m; i++) 62 { 63 cin >> x >> y >> z; 64 map[x][y] = z; 65 } 66 67 cin >> x >> y; 68 69 Dijkstra(x, y); 70 } 71 return 0; 72 }
标签:style blog io color os sp for 数据 div
原文地址:http://www.cnblogs.com/khan724/p/4139832.html