我正在使用C 中的队列实现 BFS FOR邻接矩阵,这是我的代码
#include<stdio.h>
#define MAX 10
int G[MAX][MAX],n,visited[MAX];
typedef struct queue{
int front,rear;
int data[MAX];
}q;
q p;
void bfs(int);
void insert(q*,int);
int delete(q*);
int empty(q*);
int full(q*);
int main(){
int i,j,s;
printf("enter no of vertices\n");
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&G[i][j]);
}
}
printf("enter starting vertex for bfs\n");
scanf("%d",&s);
bfs(s);
}
void bfs(int s){
int i;
p.front=p.rear=-1;
for(i=0;i<n;i++){
visited[i]=0;
}
insert(&p,s);
visited[s]=1;
while(!empty(&p)){
s=delete(&p);
for(i=0;i<n;i++){
if(G[s][i]!=0&&visited[i]==0){
//here it have to store element but it doesn't.
insert(&p,i);
visited[i]=1;
printf("visited %d\n",i);
}
}
}
}
//run to check if queue is full
int full(q *p){
if(p->rear==MAX-1){
return 1;
}
return 0;
}
//run to check if queue is empty
int empty(q *p){
if(p->rear==-1){
return 1;
}
return 0;
}
//run to insert element to rear where front<=rear
void insert(q *p,int x){
if(full(p)){
printf("full\n");
}
if(empty(p)){
p->front=p->rear=0;
p->data[p->rear]=x;
}
else{
p->rear=p->rear+1;
p->data[p->rear]=x;
}
}
//run to delete element from front
int delete(q *p){
int x;
if(empty(p)){
printf("empty\n");
}
else if(p->front==p->rear==0){
x=p->data[p->front];
p->front=p->rear=-1;
}
else{
x=p->data[p->front];
p->front=p->front+1;
}
return x;
}
这段代码有什么问题?它给出了错误的答案。队列没有存储 所有元素。在此示例中,输入为
输入顶点8
0 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 0 1 0
1 0 0 0 0 0 1 0
0 1 1 0 0 0 0 1
0 0 0 1 1 0 0 1
0 0 0 0 0 1 1 0
输入起始顶点0
估算输出: -
访问了0
访问过1
访问了2
访问了3
访问了4
访问了5
访问了6
访问了7
但结果是
访问了0
访问过1
访问了2
访问了3
访问了4
访问了5
访问了7
访问了6