1090. Highways

本文介绍了一种使用贪心算法求解图中最小生成树的最大边权重的方法,并通过Prim算法实现。代码示例清晰地展示了如何初始化图、执行Prim算法及获取结果。

贪心求最小生成树中的最大权

传送门

http://soj.me/1090

--------------------------------------------

 1 #include <iostream>

 2  #include  <memory.h>
 3  using  namespace std;
 4  int road[ 510][ 510];
 5  int dis[ 510];
 6  int vi[ 510];
 7  int n;
 8  int prim()
 9 {
10          int ans=- 1;
11          for( int i= 0;i<n;i++)
12                 dis[i]=road[ 0][i];
13          int num= 1;
14         vi[ 0]= 1;
15          while(num!=n)
16         {
17                  int v;
18                  int min= 65540;
19                  for( int i= 0;i<n;i++)
20                          if(dis[i]!= 0&&dis[i]<min)
21                         {
22                                 v=i;
23                                 min=dis[i];
24                         }
25                 vi[v]= 1;
26                  if(ans<min)
27                         ans=min;
28                 dis[v]= 0;
29                  for( int i= 0;i<n;i++)
30                          if(road[v][i]!= 0&&vi[i]!= 1&&dis[i]>road[v][i])
31                                 dis[i]=road[v][i];
32                 num++;
33         }
34          return ans;
35 }
36  void init()
37 {
38         memset(vi, 0, sizeof(vi));
39         cin>>n;
40          for( int i= 0;i<n;i++)
41                  for( int j= 0;j<n;j++)
42                         cin>>road[i][j];
43 
44 }
45  int main()
46 {
47          int t;
48         cin>>t;
49          while(t--)
50         {
51                 init();
52                 cout<<prim()<<endl;
53                 cout<<endl;
54         }
55 }

转载于:https://www.cnblogs.com/congzc/archive/2011/04/30/2329977.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值