2016-05-21 9 views
0

Ich weiß nicht, warum die Ausgabe dieses Programms nicht korrekt ist. Es druckt zuerst besucht node.AS soweit ich weiß, dass der Algorithmus korrekt ist. Bitte helfen Sie mir den Fehler zu finden. THanksStuck in Code für BFS (breite erste Suche)

import java.util.Scanner; 
    public class bfs { 
    static void bf(int v,int []vis,int n,int [][]a){ 
    int []q; 
    int u; 
    int f=0,r=-1; 
    q=new int[20]; 
    q[++r]=v; 
    vis[v]=1; 
    while(f<=r){ 
     u=q[f]; 
     System.out.println(u); 
     for(int i=1;i<=n;i++){ 
      if(a[u][i]==1&&vis[i]==0){ 
       q[++f]=i; 
       vis[i]=1; 
      } 
     } 
     f++; 
     } 
    } 
public static void main(String[] args){ 
    int []vis=new int [20]; 
    int [][]a=new int [20][20]; 
    int source,n; 
    System.out.println("Enter the number of vertex"); 
    Scanner sc=new Scanner(System.in); 
    n=sc.nextInt(); 
    System.out.println("Enter the adjacency matrix"); 
    for(int i=1;i<=n;i++){ 
     for(int j=1;j<=n;j++) 
      a[i][j]=sc.nextInt(); 
     vis[i]=0; 
    } 
    System.out.println("Enter the source vertex\n"); 
    source=sc.nextInt(); 
    System.out.println("Nodes reached from "+source+"\n"); 
    bf(source,vis,n,a); 
    } 

} 
+1

Was ist die richtige Ausgabe? Sie sollten Ihren Eingabe-Testfall und die gewünschte Ausgabe veröffentlichen. Wie in den Leitfäden angegeben, erstellen Sie bitte ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve). – tmthydvnprt

Antwort

0

Ich glaube, Ihr q[++f]=i; sollte q[++r]=i; sein, die neuen Knoten an das Ende des Arrays anzuhängen versucht (wie es als eine Warteschlange in BFS verwendet wird), nicht die Front.

Verwandte Themen