Il y a une meilleure réponse à cette question. Vous pouvez le faire en O(|V|^2). et avec plus d'effort vous pouvez le faire en temps linéaire.
D'abord on trouve des composantes fortement connectées de G. Dans chaque composante forte, on cherche à trouver ces cas : 1) s'il y a une arête avant dans cette composante, elle n'est pas singulièrement connectée, 2) s'il y a une arête transversale dans cette composante, elle n'est pas singulièrement connexe, 3) s'il y a au moins deux arêtes arrière dans l'arbre enraciné au sommet u, vers des ancêtres propres de u, alors il n'est pas singulièrement connecté.
cela peut être fait en O(E). ( Je pense que sauf pour le cas 3, je n'ai pas pu l'implémenter correctement !!).
Si aucun des cas ci-dessus ne s'est produit, vous devriez vérifier s'il y a une arête transversale ou une arête vers l'avant sur G^SCC ( graphe G, avec les composantes fortes remplacées par des noeuds simples), puisque nous n'avons pas de backedges, cela peut être fait en répétant dfs sur chaque sommet de ce graphe en O(|V|^2).