PAT学习,关于图

本文探讨了图的连通分量概念及如何使用深度优先搜索(DFS)算法计算连通分量数量,重点讲解了在移除一个节点后如何重新评估图的连通性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2019年1月4日16:05:11
乙级基本已经刷完,在刷甲级的时候,我遇到到很多新的东西,另外数据结构的基础知识也不牢固,考虑到将要考试,便放弃系统学习数据结构后来的知识,在面对新的知识的时候在这里做记录;本文主要关于图;
1013 Battle Over Cities (25 分)
这个题涉及到了一个知识是,图的连通分量;这个地方简单的说一下,之前是没遇到这个概念的,图的连通分量大概意思就是一个图中可以分为几个无关联的部分(无关联就是这个部分与其他部分不连通,该题考虑的是无向图),那这个图就有几个连通分量;
而这个题,就是给出结点,每个路径相连结点,问去掉一个结点之后,需要最少几个路径使其成为连通图,也就是问去掉一个结点之后,我们得到的图有几个连通分量;
一个图成为连通图所需最少路径数,等于其连通分量数-1;
在这个时候,那么怎么计算一个图的连通分量呢;我查到的我看懂的方法是,它主要是对图进行遍历,DFS,对访问过的结点做有已访问标记,然后我们在遍历每个结点,看这个结点是否被访问过,如果没有被访问过,那我们要再做DFS,这中间加有count,每次加1,结束之后count的值就是连通分量的个数;
大概这样:
for(每个结点i)
if(i未被访问)
count++;DFS(i);//count初始为0
到这里,这个题就变成了摘除一个结点之后,整个图的连通分量数的求解了;如果让我来解决的话,我会想要将对被摘除的结点进行一个打断,那么它就变成一个孤立的点了;我觉得这样子很傻,可行性不高;然而柳神的思路是,假设它一开始就被访问过了,然后我们再进行连通分量的查找。
我看了DFS的原理
DFS:
void DFS(vertex v){
visit[v] = true;
for(v的每个邻接点w)
if(!visit[w])
DFS(w);
}
不明白,它这个已被访问的解决方案是如何做到的,那我看下她的代码;
2019年1月4日17:50:46
但事实是它好像就是这么运作的,这大概就是初学者的傻吧,个人理解,把DFS看作是一条蛇在图中爬行,这条蛇看到已经亮了灯(结点)之后,就不再继续前行,这种将灯亮起来的操作,我刚刚不太能理解。这可能是我对DFS的运作情况不懂所造成的吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值