确定无向图是否为树

时间:2011-12-03 07:19:52

标签: performance time-complexity graph-algorithm

我编写了一个算法来确定“无向图是否是树”     假设:图G表示为邻接列表,其中我们已经知道顶点的数量是n

  Is_graph_a_tree(G,1,n) /* using BFS */
    {
      -->Q={1} //is a Queue
      -->An array M[1:n], such that for all i, M[i]=0 /* to mark visited vertices*/
      -->M[1]=1
      -->edgecount=0 // to determine the number of edges visited
      -->While( (Q is not empty) and (edgecount<=n-1) )
        {
            -->i=dequeue(Q)
            -->for each edge (i,j) and M[j] =0 and edgecount<=n-1
               {
                 -->M[j]=1
                 -->Q=Q U {j}
                 -->edgecount++
               }
        }
        If(edgecount != n-1)
            --> print “G is not a tree”
        Else
            {
                -->If there exists i such that M[i]==0 
                        Print “ G is not a tree”
                    Else
                        Print “G is tree”
            }
     }

是不是?
   这个算法的时间复杂度是Big0h(n)??

2 个答案:

答案 0 :(得分:1)

我认为边缘的计数是不正确的。您还应该计算边缘(i,j)为女巫M [j] = 1但j不是i的父亲(因此您还需要保留每个节点的父节点)。 通过将邻接列表的大小相加并除以2,可能更好地计算最后的边缘。

答案 1 :(得分:0)

您想要Depth First Search。无向图仅具有后边和树边。所以你可以复制DFS算法,如果找到后边缘,那么它就不是树了。