posts - 183,  comments - 10,  trackbacks - 0

来自于《算法:C 语言实现》
1.

 1 // 快速查找算法
 2 
 3 #include <stdio.h>
 4 #define N 10000
 5 
 6 int main()
 7 {
 8     int i, p, q, t, id[N];
 9     for (i = 0; i < N; ++i)
10     {
11         id[i] = i;
12     }
13     while (scanf("%d %d"&p, &q) == 2)
14     {
15         if (id[p] == id[q])
16         {
17             continue;
18         }
19         for (t = id[p], i = 0; i < N; ++i)
20         {
21             if (id[i] == t)
22             {
23                 id[i] = id[q];
24             }
25         }
26         printf(" %d %d\n", p, q);
27     }
28 }

2.
 1 // 快速合并算法
 2 
 3 #include <stdio.h>
 4 #define N 10000
 5 
 6 int main()
 7 {
 8     int i, j, p, q, id[N];
 9     for (i = 0; i < N; ++i)
10     {
11         id[i] = i;
12     }
13     while (scanf("%d %d"&p, &q) == 2)
14     {
15         for (i = p; i != id[i]; i = id[i]);
16         for (j = q; j != id[j]; j = id[j]);
17         if (i == j)
18         {
19             continue;
20         }
21         id[i] = j;
22         printf(" %d %d\n", p, q);
23     }
24 }

3.
 1 // 加权快速合并算法
 2 
 3 #include <stdio.h>
 4 #define N 10000
 5 
 6 int main()
 7 {
 8     int i, j, p, q, id[N], sz[N];
 9     for (i = 0; i < N; ++i)
10     {
11         id[i] = i;
12         sz[i] = 1;
13     }
14     while (scanf("%d %d"&p, &q) == 2)
15     {
16         for (i = p; i != id[i]; i = id[i]);
17         for (j = q; j != id[j]; j = id[j]);
18         if (i == j)
19         {
20             continue;
21         }
22         if (sz[i] < sz[j])
23         {
24             id[i] = j;
25             sz[j] += sz[i];
26         }
27         else
28         {
29             id[j] = i;
30             sz[i] += sz[j];
31         }
32         printf(" %d %d\n", p, q);
33     }
34 }

4.
 1 // 带有等分路径压缩的加权快速-合并算法
 2 
 3 #include <stdio.h>
 4 #define N 10000
 5 
 6 int main()
 7 {
 8     int i, j, p, q, id[N], sz[N];
 9     for (i = 0; i < N; ++i)
10     {
11         id[i] = i;
12         sz[i] = 1;
13     }
14     while (scanf("%d %d"&p, &q) == 2)
15     {
16         for (i = p; i != id[i]; i = id[i])
17         {
18             id[i] = id[id[i]];
19         }
20         for (j = q; j != id[j]; j = id[j])
21         {
22             id[j] = id[id[j]];
23         }
24         if (i == j)
25         {
26             continue;
27         }
28         if (sz[i] < sz[j])
29         {
30             id[i] = j;
31             sz[j] += sz[i];
32         }
33         else
34         {
35             id[j] = i;
36             sz[i] += sz[j];
37         }
38         printf(" %d %d\n", p, q);
39     }
40 }

posted on 2011-04-20 17:01 unixfy 阅读(380) 评论(0)  编辑 收藏 引用

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