我正在尝试找一个O(| V | + | E |)时间算法来检查是否已连接 无向图有一个奇数长度的循环。
我正在考虑在图表上进行宽度优先搜索,并尝试将顶点标记为黑白,这样就不会有两个标有相同颜色的顶点相邻。
是否有任何已知的neater算法在线性时间内解决这个问题?
答案 0 :(得分:9)
你的方法是正确的。你不能做得更好。
有效的原因是,如果在执行BFS时按顶点标注顶点,则所有边连接相同的标签或不同的标签。很明显,如果边缘连接相同的标签,则存在奇数周期。如果没有,那么我们可以将所有奇数标签的颜色设置为白色,将所有偶数标签涂成黑色。
答案 1 :(得分:0)
也可以使用DFS和顶点编号来完成。
<强> 探索(u)的 强>
如果你已经&#34;访问&#34;,那么如果(clock-Num [u])是奇数,则有一个奇数周期,
否则标记&#39; u&#39; as&#34;访问&#34;
货号[U] =时钟++;
对于u
的所有相邻节点v i) Explore(v)
ii) clock=Num[u]
答案 2 :(得分:0)
在初始化中,您还需要设置Num [s] = 0。