PAT甲级1013(图的遍历)

##patj1013
大家好,低头中午,抬头又是晚上了。编程的时间总是那么的短暂。由于本人非科班出生(虽然还在上大学,但是也是半路出家)所以数据结构都是自己实战修炼的,今天这道题上榜也是因为出现了我很少接触的图论。。。笔者现学现卖。。上题
在这里插入图片描述
题目大意:
说的是有N个城市,M条道路,K个需要关注的路。当发生战争时如果敌人占领了某一地那么那座城市既不能出也不能进,为了不影响其他城市间的互通我们需要为此修建几条路。例子:3 2 3
1 2
1 3
1 2 3
三座城市1、2互通,1、3互通,如果1被占领了那么我们就必须修一条2到3的路保证2、3不受影响。甲级仔细读题很重要(狗头)

这次就不说笔者遇到的问题的了,毕竟笔者才发现自己一直用的矩阵其实是图论,哈哈。
但还是要提一下重点:图论的遍历。
当某个城市被攻占了,我们就得找到分散的城市集。比如1、2、3能互通4、5、6也能互通但这两个城市集不能互通,那么就有两个城市集只需要修一条路就能将城市集统一满足需求。
那么如何将城市加入某个城市集呢,首先先将被攻陷的城市单独放入一个城市集中(在笔者的代码中体现为record[concern] = 1)然后将剩下的所有未被遍历过的城市采用深度遍历dfs,城市集出现的依据:一次深度遍历的结束(此时由首城市能到达的城市集都被遍历过了)。结束时我们就对num[i]++,最后输出的为num[i]-1即城市集的和减一(上面的例子有提)。
下面上笔者的程序
在这里插入图片描述
##笔者的程序有点缺陷:应该把函数里出了J的变量设为全局变量,PAT甲级的题目还是很有意思的。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值