poj2395

本文介绍了一种使用Kruskal算法求解最小生成树中最大边长的方法,并提供了完整的C++代码实现。通过输入节点数和边数,程序能够找出构成最小生成树的所有边中的最长边。

http://poj.org/problem?id=2395

此题题意为求解最小生成树的最大边


  
1 #include < stdio.h >
2 #include < algorithm >
3   using namespace std;
4 #define max(a,b) a>b?a:b
5 struct line
6 {
7 int begin;
8 int end;
9 int lenth;
10 };
11 line * amount;
12 int * father;
13 int numofnode,numofline;
14 int i,j,a,b,c;
15 int find( int k)
16 {
17 return father[k] == k ? k:father[k] = find(father[k]);
18 }
19 int cmp(line a,line b)
20 {
21 return a.lenth < b.lenth ? 1 : 0 ;
22 }
23 void ini()
24 {
25 scanf( " %d %d " , & numofnode, & numofline);
26 amount = new line [numofline];
27 father = new int [numofnode + 1 ];
28 for (i = 1 ;i <= numofnode;i ++ ) father[i] = i;
29 for (i = 0 ;i < numofline;i ++ )
30 {
31 scanf( " %d %d %d " , & a, & b, & c);
32 amount[i].begin = a;
33 amount[i].end = b;
34 amount[i].lenth = c;
35 }
36 sort(amount,amount + numofline,cmp);
37 }
38 int kruskal()
39 {
40 int maxlinelen = 0 ;
41 for (i = 0 ;i < numofline;i ++ )
42 {
43 a = find(amount[i].begin),b = find(amount[i].end);
44 if (a != b)
45 {
46 maxlinelen = max(maxlinelen,amount[i].lenth);
47 father[a] = b;
48 }
49 }
50 return maxlinelen;
51 }
52 int main()
53 {
54 ini();
55 printf( " %d\n " ,kruskal());
56 return 0 ;
57 }

转载于:https://www.cnblogs.com/mengxm-lincf/archive/2011/06/06/2073454.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值