我不知道为什么这个程序的输出不正确。 它只是打印第一个访问节点。据我所知算法是正确的。 请帮我找错。 谢谢
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);
}
}
答案 0 :(得分:0)
我相信你的q[++f]=i;
应该是q[++r]=i;
,它试图将新节点附加到数组的末尾(因为它在BFS中用作队列),而不是前面。