码迷,mamicode.com
首页 > 编程语言 > 详细

Dijkstra算法求最短路

时间:2014-12-03 14:15:24      阅读:112      评论:0      收藏:0      [点我收藏+]

标签: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 }

 

Dijkstra算法求最短路

标签:style   blog   io   color   os   sp   for   数据   div   

原文地址:http://www.cnblogs.com/khan724/p/4139832.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!