определить, является ли неориентированный граф деревом - PullRequest
0 голосов
/ 03 декабря 2011

Я написал алгоритм для определения «является ли неориентированный граф деревом»
Допущения: граф 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 ]

1 голос
/ 19 декабря 2011

Я думаю, что подсчет ребер не правильный.Вы также должны посчитать ребра (i, j) для ведьмы M [j] = 1, но j не является родителем i (поэтому вам также необходимо сохранить родителя каждого узла).Может быть, лучше посчитать края в конце, суммируя размеры списков смежности и деля на 2.

0 голосов
/ 18 января 2013

Вы хотите выполнить поиск Depth First . Ненаправленный граф имеет только задние ребра и ребра дерева. Таким образом, вы можете просто скопировать алгоритм DFS, и если вы найдете задний край, то это не дерево.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...