2016-05-21 2 views
0

Я не знаю, почему вывод этой программы не является правильным. Его только что напечатал первый посетивший узел. До сих пор, насколько я знаю, алгоритм верен. Пожалуйста, помогите мне найти ошибку. БЛАГОДАРЯЗастрял в коде для BFS (поиск по ширине)

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

Что такое правильный выход? Вы должны опубликовать свой тестовый ввод и желаемый результат. Как указано в руководствах, пожалуйста, создайте [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve). – tmthydvnprt

ответ

0

Я считаю, что ваш q[++f]=i; должен быть q[++r]=i;, который пытается добавить новый узел в конец массива (как это используется в качестве очереди в BFS), а не спереди.

Смежные вопросы