HDOJ1102 修路问题(最小生成树-Prim)

 

题目:

1102Constructing Roads
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 using namespace std;
 5 
 6 #define M 100
 7 #define MAX 9999
 8 
 9 int map[M][M],visited[M],adjset[M];
10 int n,p,len;
11 
12 void ReadMap();
13 
14 void main()
15 {
16     int i,j,nlen,nid;
17     while (scanf("%d",&n)!=EOF)
18     {
19         //读取地图
20         ReadMap();
21         //初始化
22         memset(visited,0,sizeof(visited));
23         visited[0] = 1;
24         len = 0;
25         for (i=0;i<n;i++)    adjset[i] = map[i][0];
26         //Begin
27         for (i=1;i<n;i++)
28         {
29             //找到下一条符合条件的点
30             nlen = MAX;
31             for (j=0;j<n;j++)
32             {
33                 if (!visited[j] && adjset[j]<nlen)
34                 {
35                     nlen = adjset[j];
36                     nid = j;
37                 }
38             }
39             //访问找到的那个点
40             len += nlen;
41             visited[nid] = 1;
42             //更新邻接距离
43             for (j=0;j<n;j++)
44             {
45                 if (!visited[j] && map[j][nid]<adjset[j])
46                 {
47                     adjset[j] = map[j][nid];
48                 }
49             }
50         }
51         cout<<len<<endl;
52     }
53 }
54 
55 void ReadMap()
56 {
57     int i,j,a,b;
58     for (i=0;i<n;i++)
59     {
60         for (j=0;j<n;j++)
61         {
62             cin>>map[i][j];
63         }
64     }
65     cin>>p;
66     for (i=0;i<p;i++)
67     {
68         cin>>a>>b;
69         map[a-1][b-1] = map[b-1][a-1] = 0;
70     }
71 }

 

转载于:https://www.cnblogs.com/CheeseZH/archive/2012/10/09/2716975.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值