我是靠谱客的博主 执着铅笔,这篇文章主要介绍POJ 1125 Stockbroker Grapevine floyd多源最短路,选取一个点,使最大边的权值是最小的,现在分享给大家,希望可以做个参考。

第一个输出选取的点,然后在输出选取的点到所有边的权值中最大的。

选点如何选择??? 一个点到其余所有点的边都有一个最大值,这个最大值最小即可

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #define inf 0x3f3f3f3f using namespace std; int d[110][110]; void init(int n) { int i, j; for(i = 1;i <= n;i++){ for(j = 1;j <= n;j++){ if(i == j) d[i][j] = 0; else d[i][j] = inf; } } } void floyd(int n) { int i, j, k; for(k = 1;k <= n;k++) for(i =1;i <= n;i++) for(j =1;j <= n;j++) if(d[i][j] > d[i][k] + d[k][j]) d[i][j] = d[i][k] + d[k][j]; } int main() { int n, m; int a, b; int i, j; while(cin >> n){ if(n == 0) break; init(n); for(i = 1;i <= n;i++){ cin >> m; while(m--){ cin >> a >> b; if(d[i][a] > b) d[i][a] = b; } } floyd(n); int temp; int ans = inf; int t; for(i = 1;i <= n;i++){ temp = 0; for(j = 1;j <= n;j++){ if(i != j&&d[i][j] > temp){//temp表示i这个点到其余各点的边中最大值 temp = d[i][j]; } } if(temp < ans){//选取最大值中最小的那个值,并将此点记住 ans = temp; t = i; } } printf("%d %dn", t, ans); } return 0; }


最后

以上就是执着铅笔最近收集整理的关于POJ 1125 Stockbroker Grapevine floyd多源最短路,选取一个点,使最大边的权值是最小的的全部内容,更多相关POJ内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部