陷入BFS代码(广度优先搜索)

时间:2016-05-21 13:19:53

标签: java algorithm

我不知道为什么这个程序的输出不正确。 它只是打印第一个访问节点。据我所知算法是正确的。 请帮我找错。 谢谢

    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 个答案:

答案 0 :(得分:0)

我相信你的q[++f]=i;应该是q[++r]=i;,它试图将新节点附加到数组的末尾(因为它在BFS中用作队列),而不是前面。