(Quelle, Ziel) und es ist Typ (Baum, zurück, vorwärts, Kreuz)?Ändern der Tiefensuche zuerst
Antwort
Schöne Frage.
Dies ist die Lösung basierend auf the source you posted as comment. wichtig: Es ist ein Fehler auf dem Start/Ende-Tabelle sollte dritte Reihe dritte Spalte sein "end [u] < Ende [V]" anstelle von "end [u]> Ende [V]"
void main(G, s){
for each node v in G{
explored[v]=false
parent[v]=null
start[v]=end[v]=null
}
Global clock = 0
DFS(G, s, s)
}
void DFS(G, s, parent){
explored[s] = true;
parent[s] = parent
start[s]=clock
clock++
for each u=(s,v){
if(explored[v] == false){
DFS(G, v)
}
print (s + "-->" + v +"type: " + getType(s,v))
}
end[s]=clock
clock++
}
String getType(s, v){
if(start[s]<start[v]){
if(end[s]>end[v]) return "Tree edge"
else return "Forward edge"
else{
if(end[s]<end[v]) return "Back edge"
else return "Cross edge"
}
}
Das sieht richtig aus. Ein wichtiger Teil ist jedoch die Implementierung von "isOneOfParents" (Vorfahren, die ich vermute) in O (1). [Es ist möglich] (http://www.cs.yale.edu/homes/aspnes/pinewiki/DepthFirstSearch.html), wenn wir die Eintritts- und Austrittszeiten in jedem Eckpunkt speichern. – Gassa
Die erste Implementierung, die ich für isOneOfParents (ja, Vorfahren) dachte, war O (maximale Tiefe des Baumes). Mit Ihrer Quelle werde ich versuchen, es zu machen O (1) –
Ok. Dank [Ihrer Quelle] (http://www.cs.yale.edu/homes/aspnes/pinewiki/DepthFirstSearch.html) habe ich die Verwendung des Timers überlebt. Ich bearbeite die Antwort, um sie hinzuzufügen. –
Hier gehts. Code in Java
import java.util.ArrayList;
import java.util.List;
class Node {
public String name;
public List<Node> connections = new ArrayList<>();
boolean visited = false;
Node(String name) {
this.name = name;
}
}
class DFS {
// Main part.
public static void search(Node root) {
if (root == null) {
return;
}
root.visited = true;
for (Node node : root.connections) {
if (!node.visited) {
// Print result.
System.out.println(root.name + "->" + node.name);
search(node);
}
}
}
}
public class App {
public static void main(String[] args) {
Node a = new Node("a");
Node b = new Node("b");
Node c = new Node("c");
Node d = new Node("d");
Node e = new Node("e");
a.connections.add(b);
b.connections.add(a);
b.connections.add(c);
b.connections.add(d);
c.connections.add(b);
c.connections.add(d);
d.connections.add(b);
d.connections.add(c);
d.connections.add(e);
DFS.search(d);
}
}
- 1. Alternativer Algorithmus für Tiefensuche zuerst
- 2. Cypher: Tiefensuche zuerst nach Pfaden nach Beziehungstyp
- 3. Ändern von Tiefensuche
- 4. Warum ist Prolog Vereinheitlichung Tiefensuche zuerst statt Breitensuche?
- 5. Suchen eines Knotens in einem Baum mit Tiefensuche zuerst
- 6. Iterative Tiefensuche
- 7. OCAML Tiefensuche
- 8. Tiefensuche Adjacency
- 9. Ändern zuerst Datensatz auswählen
- 10. rekursive Algorithmus mit Tiefensuche
- 11. CLISP - begrenzte Tiefensuche
- 12. Der beste Ansatz für Perkolation, Tiefensuche oder Vereinigungssuche?
- 13. Tiefensuche mit in Java Rückzieher
- 14. HTML Größe zuerst ändern und Position ändern
- 15. OpenMP: gute Strategien für Tiefensuche
- 16. Python Iterative Tiefensuche von Tisch
- 17. Tiefensuche, Wie erkennt man Diamantabhängigkeiten?
- 18. Verwenden von Rmagick zum Ändern der Höhe zuerst
- 19. Tiefe zuerst ändern Suche mit Wörterbüchern
- 20. ändern Verbundprimärschlüssel Einfeldprimärschlüssel mit Code zuerst Migration
- 21. Breite zuerst oder Tiefe zuerst Suche nach einem Kind in einer bestimmten Tiefe zu finden?
- 22. Wie besucht die Tiefensuche einen Knoten?
- 23. PCA zuerst oder Normalisierung zuerst?
- 24. Umgebung zuerst oder zuerst booten?
- 25. warum der Konstruktor der Basisklasse zuerst aufruft?
- 26. EF5-Code zuerst - Ändern eines Spaltentyps mit Migrationen
- 27. Ändern Sie zuerst zwei Buchstaben in Excel-Spalten mit VBA
- 28. C# WPF - Wie zu ändern, welches Fenster zuerst öffnet
- 29. textfields sollte Zeichen im Bereich nur zuerst ändern wird ausgeführt
- 30. Wie Datentyp Fremdschlüssel in EF Code zuerst ändern
haben Sie selbst versucht zu tun, vor allem versuchen, Ihren Code zu setzen, wenn Sie –
Durch die Erinnerung versucht haben, wo man herkommt. Fügen Sie bitte einen Code für eine Tiefensuche zu Ihrer Frage hinzu und wir werden es von dort aus nehmen. –
Ihre bearbeitete Frage ist noch weniger verständlich als das Original. Bitte erläutern Sie * in Worten *, was Sie zu tun versuchen. Und wenn Sie wissen möchten, wie Sie Code ändern können, müssen Sie den Code anzeigen, den Sie ändern möchten. –