3.1.1 Agri-Net

发现前面有一堆类似dfs的题目,做多了有点烦,就直接跳到后面看看,发现这题最小生成树,刚好前几天看书看到,就拿来做做,但很不顺利的wa了,找了很久bug也不知道。终于在某次中发现了,原来我直接用x了,竟然能对6个case,可怕!改了后果断ac,经典prim算法,我就不说了,自己看书去。

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<stdlib.h>
 5 #define max(a,b) a>b?a:b
 6 #define min(a,b) a>b?b:a
 7 #define INF     0x3f3f3f3f
 8 #define Maxin 10000
 9 int fang[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
10 int map[105][105],n;
11 int in[105],inn=0,notin[105];//in是已经被用过的点,notin是还没用的点
12 int get()
13 {
14    int x,ans=INF;
15    int ay;
16    for(x=0;x<inn;x++)//在已经用的点里找一个距离最小的边来用
17        {
18            int y;
19            for(y=0;y<n;y++)
20              if(notin[y]!=-1&&map[in[x]][y]<ans&&in[x]!=y)//notin!=-1表示还没被用
21              {
22                  ans=map[in[x]][y];
23                  ay=y;
24              }
25        }
26        in[inn++]=ay;
27        notin[ay]=-1;
28        return ans;
29 }
30 
31 int main()
32 {
33     int x,y,ans=0;
34     scanf("%d",&n);
35     for(x=0;x<n;x++)
36     {
37         for(y=0;y<n;y++)
38         scanf("%d",&map[x][y]);
39         notin[x]=x;
40     }
41     in[inn++]=0;
42     notin[0]=-1;
43     while(inn!=n)
44     ans+=get();
45     printf("%d\n",ans);
46     return 0;
47 }

转载于:https://www.cnblogs.com/usp10/archive/2012/05/26/2519690.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值