如何检查无向图是否具有奇数长度周期

时间:2011-11-16 04:11:59

标签: algorithm graph

我正在尝试找一个O(| V | + | E |)时间算法来检查是否已连接 无向图有一个奇数长度的循环。

我正在考虑在图表上进行宽度优先搜索,并尝试将顶点标记为黑白,这样就不会有两个标有相同颜色的顶点相邻。

是否有任何已知的neater算法在线性时间内解决这个问题?

3 个答案:

答案 0 :(得分:9)

你的方法是正确的。你不能做得更好。

有效的原因是,如果在执行BFS时按顶点标注顶点,则所有边连接相同的标签或不同的标签。很明显,如果边缘连接相同的标签,则存在奇数周期。如果没有,那么我们可以将所有奇数标签的颜色设置为白色,将所有偶数标签涂成黑色。

答案 1 :(得分:0)

也可以使用DFS和顶点编号来完成。

  1. 时钟= 1
  2. 从顶点开始',将其标记为"访问"并致电探索(s)
  3. <强> 探索(u)的

    1. 如果你已经&#34;访问&#34;,那么如果(clock-Num [u])是奇数,则有一个奇数周期,

      否则标记&#39; u&#39; as&#34;访问&#34;

    2. 货号[U] =时钟++;

    3. 对于u

      的所有相邻节点v
        i) Explore(v)
        ii) clock=Num[u]
      

答案 2 :(得分:0)

在初始化中,您还需要设置Num [s] = 0。