关于广度优先搜索的六度空间问题

准大一学生写的代码,在运行时无法输出,不明白代码错在了哪,找了一天问题了,人要找麻了,希望能有高人。(请原谅找bug帖……能力实在有限)

img

img

img

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define MAXLEN 1000

struct queue{//构建采用数组的静态队列
int front;
int rear;
int a[MAXLEN];
}

int nodenum;//结点数
int sidenum;//边数
PQUEUE Q;
bool visited[MAXLEN+1]={false};

int isempty(){
return (Q->front == Q->rear)? 1:0;
}

void initqueue(){//初始化Q数组
Q->front = Q->rear = 0;
}

void inqueue(int t){//
Q->a[Q->rear] = t;
Q->rear = (Q->rear+1)%MAXLEN;
}

void dequeue(int* t){
*t = Q->a[Q->front];
Q->front = (Q->front+1)%MAXLEN;
}

int BFS(bool** map,int i,int nodenum){
int layer = 0;int last = i;int tail;int ret = 1; int t;
initqueue ();//构造队列
inqueue(i);//将i元素入队
visited[i]=true;
while(!isempty()) {
dequeue(&t);//将i元素出队(这段代码),并且将i的所有相邻元素入队(下面的代码)
for(int k=0;k<nodenum;k++) {//对于每个元素,需要对nodenum个元素进行遍历
if((map[i][k]==true)&&!visited[k]) {
inqueue(k);//如果有联系且没有被访问过,则将k入队
visited[k]=true;//标记访问
ret++;
tail = k;
}
}
if(t==last){
layer ++;last = tail;
}
if(layer == 6) break;
}
return ret;
}

int main(){
scanf("%d %d",&nodenum,&sidenum);
bool** map= (bool**)malloc((nodenum+1)(sizeof(bool)));//map只需用到左下部分的空间
for (int i = 0;i<nodenum;i++){
map[i] = (bool*)malloc((nodenum+1)sizeof(bool));
memset(map[i], false, sizeof(int)
(nodenum+1));
}
for(int i = 0; i < sidenum; i ++) {
int e1;int e2;
scanf("%d %d", &e1, &e2);
map[e1-1][e2-1] = true;
map[e2-1][e1-1] = true;
}
//对map中的每一个元素执行广度优先搜索,计算占比并且输出
for(int i=0;i<nodenum;i++){
int cnt = BFS(map,i,nodenum);
printf("%d: %.2lf%%\n", i ,100.0 * (double)cnt / (double)nodenum);
}
return 0;
}