社区
数据结构与算法
帖子详情
如何判断一个图是否连通?
liuding731
2007-07-12 02:43:25
rtrt
...全文
8978
40
打赏
收藏
如何判断一个图是否连通?
rtrt
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
40 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tt346446408
2010-08-25
打赏
举报
回复
从图中某点出发如果能一次性的遍历完图中的各个顶点,则该图为连通图,否则为非连通图
FancyMouse
2010-08-13
打赏
举报
回复
>我实现的是20万顶点,80万的数量。不到1分钟。
好慢……
bigc2000
2010-08-13
打赏
举报
回复
别瞎话了
去看看Tarjan算法和GABOW算法,都是一次O(V+E),我实现的是20万顶点,80万的数量。不到1分钟。
wjjayo
2010-08-11
打赏
举报
回复
厉害,我也正被这个问题所困扰
zhu_nn
2010-08-11
打赏
举报
回复
用深搜广搜吧
Justmeh
2010-08-11
打赏
举报
回复
for each vertex v
v.visited = false;
q.enqueue(v0); // 任先一个起始顶点入队列
count = 0;
while(!q.isempty())
{
v <-- q.dequeue();
v.visited = true;
count++;
for each vertex w adjacent to v
{
if(!w.visited)
q.enueue(w);
}
}
if(count==总的点数n)
连通
else
非连通
复杂度为O(|v|+|E|)(顶点数+边数)
augustinlouis
2010-05-19
打赏
举报
回复
无向图很简单,用dfs一次搞定,有向图就很复杂了,常见的方法有Tarjan和Gabow,他们可以找出一个有向图的所有强连通分量,得到一个核心DAG(刚发现此贴似乎是07年的帖子。。。。。)
aipeng
2010-05-17
打赏
举报
回复
如果在MATLAB里那又该如何判断呢?代码怎么写?谢谢!
heelp
2010-05-17
打赏
举报
回复
DFS 并查集(判断最后是否只有一个集合)都可以吧
flying_sb
2010-05-17
打赏
举报
回复
便利一遍应该就可以了吧
AAA20090987
2010-05-17
打赏
举报
回复
直接用深搜或广搜找一遍,全部找到了就是连通的,否则就是不连通的。
超级大笨狼
2009-10-10
打赏
举报
回复
我计算过围棋的死活问题,递归向4个方向,每前进一步,标记一下,复杂度应该是O(n)级别的,n是连通的范围,只要有和空地相连就没死,就跳出了,因为跳出的概率很大,所以速度还是很快的。
euroman
2009-10-09
打赏
举报
回复
[Quote=引用 25 楼 chounuo 的回复:]
楼上的算法可以,但说明有点问题:复杂度不应该是O(N),因为remove these nodes nodes from Q0 的复杂度一般不是1,这涉及一个查找问题.
[/Quote]
是的,谢谢,上面算法的时间复杂度是O(N*N)
如果只需要校验这个图是否连通图,可以进行简化,把最外层的循环去掉,也把remove these nodes nodes from Q0,从途中任意一个点出发,然后在循环里面对点的数目进行计算。
当跳出循环后,如果计数器中的数目小于途中点集的数目,那么就说明此图不是一个连通图,而且算法的复杂度就可以达到O(N)啦。
之前给的伪码可以用来计算图中有多少个连通图(明显题目不需要进行具体的数目,只需要判断是否连通)。
希望这个是完美的答案
showjim
2009-10-08
打赏
举报
回复
[Quote=引用 1 楼 fire_woods 的回复:]
从任意点出发
在剩余的点中,找到所有相邻点
循环,直到没有点可以加入为止.如果有剩余的点就是不连通的.否则就是连通的.
[/Quote]
配合hash,效率应该很高的。
showjim
2009-10-08
打赏
举报
回复
[Quote=引用 1 楼 fire_woods 的回复:]
从任意点出发
在剩余的点中,找到所有相邻点
循环,直到没有点可以加入为止.如果有剩余的点就是不连通的.否则就是连通的.
[/Quote]
配合hash,效率应该很高的。
hua_zhixing_
2009-10-08
打赏
举报
回复
用深度或广度优先搜索,若得到的元素与集合的所有元素相等,则是连通图,否则不是。
andy0409
2009-10-08
打赏
举报
回复
都是厉害角色.
latitude
2009-10-08
打赏
举报
回复
楼上的算法可以,但说明有点问题:复杂度不应该是O(N),因为remove these nodes nodes from Q0 的复杂度一般不是1,这涉及一个查找问题.
latitude
2009-10-08
打赏
举报
回复
楼上的算法可以,但说明有点问题:复杂度不应该是O(N),因为remove these nodes nodes from Q0 的复杂度一般不是1,这涉及一个查找问题.
booksoon
2009-10-08
打赏
举报
回复
从任意点出发
在剩余的点中,找到所有相邻点
循环,直到没有点可以加入为止.如果有剩余的点就是不连通的.否则就是连通的.
加载更多回复(20)
建立
一个
图
并
判断
其
是否
连通
数据结构作业,建立
一个
有向
图
或者无向
图
,然后
判断
其
是否
是
连通
的
matlab
判断
图
的
连通
性
不仅
判断
图
的
连通
性,而且程序还能求出该
图
的
连通
块数,并指出每个顶点分别属于哪个
连通
块。
判断
一个
图
是否
连通
总的来说,可以用DFS(O(v^2))和BFS(O(v+e))的思想都能实现,只要从
一个
点出发,然后
判断
是否
能遍历完所有的点。还有就是Tarjan算法和GABOW算法,这个没研究过,据说很好用。 实现办法一:用Warshall算法,时间复杂度为O(v^3),时间复杂度较大。 实现办法二:拓扑排序(多用于有向
图
)。 实现办法三:用BFS和visa[]标志数组,看看从
一个
点出发,
是否
能访问
无向
图
的
连通
性问题(DFS)
问题描述: 如何用程序
判断
一个
图
是否
连通
???
连通
?何为
连通
?就是在
一个
图
中,任取两个顶点,我们都能找到一条路径从一点到达另
一个
点,这个
图
就是
连通
的。如
图
就是
连通
的 选取 0 和 1,有一条路径;选取0 和 3 ,有一条路径 0->2->3…..那么这个
图
就是不
连通
的: 怎样
判断
?很自然的想法就是用DFS(深度优先遍历)的方法。那么还有
一个
方法,其实是非常好用的,它就是并集法。 DFS:
无向
图
连通
性
判断
的五种方法(BFS、DFS、Union-find、Warshell、Tarjan)
目录 无向
连通
图
的相关定义 主要算法流程 DFS
判断
: BFS
判断
: Warshell
判断
: Union-Find
判断
: Tarjan
判断
: 无向
连通
图
的相关定义
连通
性:在
图
G中,两个不同的结点u和结点v之间若存在一条路,则称结点u和结点v是
连通
的。 无向
连通
图
:若在无向
图
G中,任意两点都是
连通
的,则称
图
G为
连通
图
。 主要算法流程 DFS
判断
: 从任一结点开始,进行一...
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章