2011-12-03 8 views
0

J'ai écrit un algorithme pour déterminer "si un graphe non orienté est un arbre"
Hypothèses: le graphe G est représenté comme une liste d'adjacence, où l'on connaît déjà le nombre de sommets qui est ndéterminer si un graphe non orienté est un arbre

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” 
      } 
    } 

Est-il vrai?
La complexité temporelle de cet algorithme Big0h (n) ??

Répondre

1

Je pense que le comptage des arêtes n'est pas correct. Vous devez également compter les arêtes (i, j) pour M [j] = 1 mais j n'est pas le parent de i (donc vous devrez également garder le parent de chaque nœud). Peut-être est préférable de compter les bords à la fin, en additionnant les tailles des listes d'adjacence et en divisant par 2.

+0

Thnx pour le commentaire seviyor .., je pense que nous pourrions également compter les arêtes pour lesquelles M [j] = 1 mais la condition "edgecount <= n-1" doit être changé ... mais je ne vois pas où l'algorithme réel échoue .. pourriez-vous donner un contre-exemple – rakesh

+0

Eh bien, je pense que la sortie est vraie pour tout graphique d'entrée qui est connecté (même si ce n'est pas un arbre). – seviyor

+0

hmmm ... oui vous avez raison ... thnx – rakesh

0

Vous voulez faire un Depth First Search. Un graphe non orienté n'a que des arêtes arrière et des arêtes d'arbre. Vous pouvez donc simplement copier l'algorithme DFS et si vous trouvez un bord arrière, ce n'est pas un arbre.

+0

Voir aussi: http://stackoverflow.com/questions/8367485/best-algorithm-to-determine-if-an-undirected-graph-is-a-tree – Hans

Questions connexes