java-Implementierung von Depth-First-Suche
der folgende code hat keine Fehler,aber die Ausgabe die ich erhalte ist nicht korrekt
import java.io.*;
class dfs
{
static void dfs(int a[][], int m[], int i, int n)
{
int j;
System.out.println("\t" + (i+1));
m[i] = 1;
for(j=0; j<n; j++)
if(a[i][j]==1 && m[j]==0)
dfs(a,m,j,n);
}
public static void main(String args[]) throws IOException
{
int n, i, j;
System.out.println("No. of vertices : ");
BufferedReader br= new BufferedReader (new InputStreamReader(System.in));
n =Integer.parseInt(br.readLine());
int m[]= new int[n];
int a[][] = new int[n][n];
for (i=0; i<n; i++)
{
m[i] = 0;
}
System.out.println("\n\nEnter 1 if edge is present, 0 if not");
for (i=0; i<n; i++)
{
System.out.println("\n");
for (j=i; j<n; j++)
{
System.out.println("Edge between " + (i+1) + " and " + (j+1)+ " : ");
a[i][j] =Integer.parseInt(br.readLine());
a[j][i]=a[i][j];
}
a[i][i] = 0;
}
System.out.println("\nOrder of accessed nodes : \n");
for (i=0; i<n; i++)
if (m[i]==0)
dfs(a,m,i,n);
}
}
Ausgabe Beispiel
No of vertices : 8
edges
1 2
1 3
2 4
2 5
3 6
3 7
4 8
5 8
6 8
7 8
den DFS-Pfad sollte sein : 1 2 4 8 5 3 6 7
den Ausgang bin ich immer : 1 2 4 8 5 6 3 7
beachten Sie, dass der 6 TEN und 7 TEN Bedingungen sind vertauscht
kann mir jemand sagen, wie das zu korrigieren.vielen Dank für Ihre Hilfe
InformationsquelleAutor jake | 2013-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Ausgabe, die Sie bekommen, ist die richtige für ein ungerichteter graph. Die Liste der Kanten, die Sie zur Verfügung gestellt gehören (6,8), aber ein DFS-Reisen können von 8 auf 6 genauso gut wie von 6 auf 8, da es ungerichtete. Wenn Sie möchten, dass ein gerichteter graph, dann müssen Sie ein paar Veränderungen, wie die
a
array eingerichtet ist.InformationsquelleAutor ajb
ich ändern Implementierung der dfs, jetzt ist es shopuld funktioniert, wenn Sie die Namen der Variablen, damit Sie besser erkennbar sind, können Sie Ihr helfen, schneller
InformationsquelleAutor user902383
Die Ausgabe korrekt ist. Mit deinem Beispiel, die Rekursion Stoppt, wenn i = 4 in (dfs) (hält in vertex 5), und es windet wieder vertex 8, wo es herkam (mit i = 7). In diesem Aufruf, wir sind gerade zurück aus j = 4 (der, der hatte keine mehr benachbarten Knoten). Der loop-index wird inkrementiert (j++), und da die vertex 8 angeschlossen ist, zu Eckpunkt 6 (j = 5), der nächste rekursive Aufruf wird mit i = 5, so Sie zu Besuch sind vertex-6. Von vertex-6, die Rekursion geht bis 3 und dann 7 und dann alles windet zurück.
InformationsquelleAutor Filipe Gonçalves
Können Sie versuchen, diese Implementierung von DFS:
Dies ist eine rekursive Implementierung. Für weitere Informationen besuchen Sie bitte: https://github.com/m-vahidalizadeh/foundations/blob/master/src/algorithms/TreeTraverse.java. Ich hoffe, es hilft.
InformationsquelleAutor Vahid