bfs使用队列无法正常工作

时间:2015-08-24 09:22:59

标签: c queue adjacency-matrix breadth-first-search

我正在使用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

0 个答案:

没有答案