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

任意两点间的最短路问题(Floyd-Warshall算法)

时间:2017-02-19 21:08:25      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:情况   hal   out   最短路   include   tor   最短路问题   space   efi   

 1 #define _CRT_SECURE_NO_WARNINGS
 2 /*
 3 7 10
 4 0 1 5
 5 0 2 2
 6 1 2 4
 7 1 3 2
 8 2 3 6
 9 2 4 10
10 3 5 1
11 4 5 3
12 4 6 5
13 5 6 9
14 0 6
15 */
16 #include <iostream>
17 #include <vector>
18 #include <utility>
19 #include <queue>
20 #include <functional>
21 #include <algorithm>
22 #include <cstdio>
23 using namespace std;
24 
25 const int maxn = 1010 + 20;
26 const int INF = 99999999;
27 
28 int d[maxn][maxn];         //d[u][v]表示边e=(u,v)的权值(不存在时设为INF,不过d[i][j]=0)
29 int V, E;
30 
31 void input();
32 void warshall_floyd();
33 void init();
34 
35 void init() {
36     for (int i = 0; i < V; i++) {
37         for (int j = 0; j < V; j++) {
38             if (i == j) {
39                 d[i][j] = 0;
40             }
41             else {
42                 d[i][j] = INF;
43             }
44         }
45     }
46 }
47 
48 void input()
49 {
50     int s, t, ct;
51     for (int i = 0; i < E; i++) {
52         cin >> s >> t >> ct;
53         d[s][t] = d[t][s] = ct;
54     }
55 }
56 
57 void warshall_floyd()
58 {
59     for (int k = 0; k < V; k++) {         //考虑经过顶点k和不经过顶点k的情况
60         for (int i = 0; i < V; i++) {
61             for (int j = 0; j < V; j++) {
62                 d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
63             }
64         }
65     }
66 }
67 
68 int main()
69 {
70     cin >> V >> E;
71     init();                //必须要初始化
72     input();
73     warshall_floyd();
74     int st, ov;
75     cin >> st >> ov;       //输入起点终点
76     cout << d[st][ov] << endl;
77     return 0;
78 }

 

任意两点间的最短路问题(Floyd-Warshall算法)

标签:情况   hal   out   最短路   include   tor   最短路问题   space   efi   

原文地址:http://www.cnblogs.com/douzujun/p/6416769.html

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