如何判断一个图是否连通?

liuding731 2007-07-12 02:43:25
rtrt
...全文
8861 40 打赏 收藏 转发到动态 举报
写回复
用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)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧