A Za, A Za, Fighting...

坚信:勤能补拙

PKU 1125 Stockbroker Grapevine

问题:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1125

思路:
题意还是蛮简单的,第一次写Floyd-Warshall算法求每对顶点间的最短距离

代码:
 1 /* Floyd-Warshall algorithm */
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 #define MAX_N 101
 6 #define INF 0x7FFFFFFF
 7 #define Min(a,b) ((a)<(b) ? (a) : (b))
 8 #define Max(a,b) ((a)<(b) ? (b) : (a))
 9 int weight[MAX_N][MAX_N];
10 int d[MAX_N][MAX_N];
11 int max[MAX_N];
12 int n;
13 
14 void
15 init()
16 {
17     int i, j, cnt, t, c;
18     memset(weight, 0sizeof(weight));
19     for(i=1; i<=n; i++) {
20         scanf("%d"&cnt);
21         for(j=0; j<cnt; j++) {
22             scanf("%d %d"&t, &c);
23             weight[i][t] = c;
24         }
25     }
26 }
27 
28 void
29 floyd_warshall() /* O(n^3) */
30 {
31     int i, j, k;
32     for(i=1; i<=n; i++)
33         for(j=1; j<=n; j++)
34             d[i][j] = (i==j?0:INF);
35     for(i=1; i<=n; i++)
36         for(j=1; j<=n; j++)
37             if(weight[i][j])
38                 d[i][j] = weight[i][j];
39     for(k=1; k<=n; k++) {
40         for(i=1; i<=n; i++) {
41             for(j=1; j<=n; j++) {
42                 if(d[i][k]!=INF && d[k][j]!=INF)
43                     d[i][j] = Min(d[i][j], d[i][k]+d[k][j]);
44             }
45         }
46     }
47 }
48 
49 void
50 output()
51 {
52     int i, j, p, rt;
53     memset(max, 0sizeof(max));
54     rt = INF;
55     for(i=1; i<=n; i++) {
56         for(j=1; j<=n; j++)
57             if(i!=j) {
58                 max[i] = Max(max[i], d[i][j]);
59             }
60         if(max[i] < rt) {
61             rt = max[i];
62             p = i;
63         }
64     }
65     if(rt == INF)
66         printf("disjoint\n");
67     else
68         printf("%d %d\n", p, rt);
69 }
70 
71 int
72 main(int argc, char **argv)
73 {
74     while(scanf("%d"&n)!=EOF && n) {
75         init();
76         floyd_warshall();
77         output();
78     }
79 }

posted on 2010-09-11 21:37 simplyzhao 阅读(210) 评论(0)  编辑 收藏 引用 所属分类: F_图算法


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜