Depth-First-Traversal und Adj Matrix
Ich versuche zu tun, eine Tiefe ersten Durchlauf. Ich habe keine Ahnung, ob ich auch in der Nähe. Jetzt heißt es drucken 1 3 4 5. Es sollte drucken 1 2 4 7 3 5 6. Jede Hilfe oder Beratung wird geschätzt. Danke. 🙂
Klasse:
public class myGraphs {
Stack<Integer> st;
int vFirst;
int[][] adjMatrix;
int[] isVisited = new int[7];
public myGraphs(int[][] Matrix) {
this.adjMatrix = Matrix;
st = new Stack<Integer>();
int i;
int[] node = {1, 2, 3, 4, 5, 6, 7};
int firstNode = node[0];
for (i = 1; i < node.length - 1; i++) {
depthFirst(firstNode, node[i]);
}
}
public void depthFirst(int vFirst, int n) {
int v, i;
st.push(vFirst);
while (!st.isEmpty()) {
v = st.pop();
if (isVisited[v]==0) {
System.out.print("\n"+v);
isVisited[v]=1;
}
for ( i=1;i<=n;i++) {
if ((adjMatrix[v][i] == 1) && (isVisited[i] == 0)) {
st.push(v);
isVisited[i]=1;
System.out.print(" " + i);
v = i;
}
}
}
}
//
public static void main(String[] args) {
//1 2 3 4 5 6 7
int[][] adjMatrix = { {0, 1, 1, 0, 0, 0, 0},
{1, 0, 0, 1, 1, 1, 0},
{1, 0, 0, 0, 0, 0, 1},
{0, 1, 0, 0, 0, 0, 1},
{0, 1, 0, 0, 0, 0, 1},
{0, 1, 0, 0, 0, 0 ,0},
{0, 0, 1, 1, 1, 0, 0} };
new myGraphs(adjMatrix);
}
}
Eine Tiefe-zuerst-Suche für was?
Seine Tiefe suchen für ein Diagramm.
Aber was sind Sie auf der Suche nach?
Sie sind gonna haben, um zu definieren, "Tiefe" hier. Durch meine Lektüre, die ich erwarten würde [1 2 4 7 3 5 6], seit 7 kann gehen, 3 und 5.
Der OP wollte sagen, Tiefe erste traversal.
Seine Tiefe suchen für ein Diagramm.
Aber was sind Sie auf der Suche nach?
Sie sind gonna haben, um zu definieren, "Tiefe" hier. Durch meine Lektüre, die ich erwarten würde [1 2 4 7 3 5 6], seit 7 kann gehen, 3 und 5.
Der OP wollte sagen, Tiefe erste traversal.
InformationsquelleAutor TMan | 2011-11-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie sind auf der Suche Depth-First-Traversal dann folgende code-änderungen, die Sie vornehmen sollten,
1) Zunächst deklarieren Sie Ihre Knoten-array als
int[] node = {0, 1, 2, 3, 4, 5, 6}
. Dies sollte getan werden, um zu vermeiden, array-index beginnen (also 0 ) und den Knoten start-Nummer (die 1). SO, hier nun gehen wir davon aus, dass die neuen Namen der Knoten 1 ist 0, die Knoten 2 ist 1......und Knoten 7 ist 6.2) Statt das zu tun,
in myGraphs tun :
depthFirst(firstNode, 7);
3)In depthFirst statt
for ( i=1;i<=n;i++)
verwendenfor ( i=0;i<n;i++)
dabei System.aus.println Funktion depthFirst hinzufügen, um die Zahl als 0 steht für Knoten 1, 1 repräsentiert den Knoten 2 und so weiter.Unten ist Ihre voll funktionsfähige code, den ich verändert :
Saurabh, ich habe gerade deinen code getestet und es ist Druck 1,2,4,7,5,6,3 statt 1, 2, 4, 7, 3, 5, 6. Können Sie bitte testen und bestätigen?
InformationsquelleAutor Saurabh
Eine funktionierende/getestete Lösung in C#, wenn jemand auf der Suche nach es.
Zu machen display, um iterative gleiche wie die Rekursion, die wir brauchen, um push-Nachbarn in der umgekehrten Reihenfolge zu stapeln. Nahm diese Logik von Amit Antwort hier
InformationsquelleAutor Sai