Ich habe Wege gesehen, einen Zyklus in einem Graphen zu erkennen, aber ich habe immer noch keinen Weg gefunden, einen "brückenartigen" Zyklus zu erkennen. Nehmen wir an, wir haben einen Zyklus in einem verbundenen (und ungerichteten) Graphen gefunden. Wie können wir feststellen, ob das Entfernen dieses Zyklus die Grafik trennt oder nicht? Wenn ich den Zyklus entferne, bedeute ich, die Kanten im Zyklus zu entfernen (so dass die Ecken nicht betroffen sind).
Eine Möglichkeit besteht darin, die Anzahl der Komponenten vor und nach dem Entfernen zu zählen. Ich bin nur neugierig zu wissen, ob es einen besseren Weg gibt.
Wenn es dafür einen etablierten Algorithmus gibt, könnte mich bitte jemand auf eine verwandte Arbeit / Papier / Publikation hinweisen?
Hier ist der naive Algorithmus, ich denke nicht, dass es einen effizienteren Weg gibt, die Überprüfung durchzuführen.
Sie können es für E + V tun. Sie können alle Brücken in Ihrem Diagramm für E + V durch dfs + dynamische Programmierung erhalten.
Speichere sie (mach einfach Boolesch [E], und mache "wahr". Dann können Sie für O (1) sagen, die Kante ist Brücke oder nicht. Sie können einfach alle Kanten aus Ihrem Zyklus nehmen und sicherstellen, dass es sich um eine Brücke handelt.