# 图的邻接表 BFS算法遍历图 出现指针异常问题

``````#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100

typedef struct ArcNode{
struct ArcNode *next;
int *info;
}ArcNode;

typedef struct VNode{
int data;
ArcNode *next;

typedef struct {
int vexnum,arcnum;
int kind;
}ALGraph;

typedef struct QNode{
int data;
struct QNode *next;
}*Queue;

typedef struct{
Queue front;
Queue rear;

bool visitedD[MAXSIZE];
bool visitedB[MAXSIZE];

void CreateLink(ALGraph &ALG,int kind){
int i,j,v1,v2;
ArcNode *AN;
printf("请输入图的顶点数：");
scanf("%d",&ALG.vexnum);
printf("请输入图的边数：");
scanf("%d",&ALG.arcnum);
printf("请输入顶点信息：");
for(i=1;i<=ALG.vexnum;i++){
scanf("%d",&ALG.vertices[i].data);
ALG.vertices[i].next=NULL;
}
for(j=1;j<=ALG.arcnum;j++){
printf("输入第%d边的两个顶点",j);
scanf("%d,%d",&v1,&v2);
AN=(ArcNode *)malloc(sizeof(ArcNode));
AN->next=ALG.vertices[v1].next;
ALG.vertices[v1].next=AN;
if(kind==0){
AN=(ArcNode *)malloc(sizeof(ArcNode));
AN->next=ALG.vertices[v2].next;
ALG.vertices[v2].next=AN;
}
}
}

void printGraph(ALGraph &G){
ArcNode *p;
int i;
printf("一共有%d个结点，%d条边\n",G.vexnum,G.arcnum);
for(i=1;i<=G.vexnum;i++){
p=G.vertices[i].next;
printf("V%d -> ",G.vertices[i].data);
while(p){
if(p->next)
printf(" -> ");
p=p->next;
}
printf("\n");
}
}

void DFS(ALGraph G,int k);

void DFSTraverse(ALGraph G){
for(int i=1;i<=G.vexnum;i++){
visitedD[i]=false;
}
for(int j=1;j<=G.vexnum;j++){
if(!visitedD[j])
DFS(G,j);
}
}

void DFS(ALGraph G,int k){
visitedD[k]=true;
printf("%d ",G.vertices[k].data);
}

q.front=q.rear=(Queue)malloc(sizeof(Queue));
if(!q.front){
exit(0);
}
q.front->next=NULL;
}

void EnQueue(LinkQueue &q,int i){
Queue p;
p=(Queue)malloc(sizeof(Queue));
p->data=i;
p->next=NULL;
q.rear->next=p;
q.rear=p;
}

void DeQueue(LinkQueue &q,int &e){
if(q.front==q.rear)
exit(0);
Queue p;
p=q.front;
e=p->data;
q.front->next=p->next;
if(p==q.rear)
q.rear=q.front;
}

if(q.front==q.rear)
return false;
return true;
}

void visit(ALGraph G,int v){
printf("%d",G.vertices[v].data);
}

void BFS(ALGraph G){
initQueue(q);
int u;
for(int i=1;i<=G.vexnum;i++)
visitedB[i]=false;
for(int v=1;v<G.vexnum;v++ && !visitedB[v]){
printf("%d ",G.vertices[v].data);
visitedB[v]=true;
EnQueue(q, v);
while (EmptyQueue(q)){
DeQueue(q,u);
ArcNode *p;
p=G.vertices[u].next;
while(p){
if(!visitedB[u]){
visitedB[u]=true;
}
p=p->next;
}
}
}
}

int main(){
ALGraph ALG;
printGraph(ALG);
printf("深度优先遍历");
DFSTraverse(ALG);
printf("\n");
printf("广度优先遍历");
BFS(ALG);
}

``````

p=p->next;为什么出现错误了呀。求大佬解答一下叭

• 写回答

#### 悬赏问题

• ¥20 python跨服务器实现复制 ，剪切的功能需求
• ¥15 android sqlite数据库如何读取显示数据(语言-java)
• ¥15 R语言，单因素cox检验，时间分层后，使用coz.zph（）函数再次ph假设检验时报错，如何解决？
• ¥15 关于#C语言冒泡排序型#的问题，如何解决？
• ¥15 如何预处理存在负值的样本数据，使其能够全都成为正的
• ¥15 SW画图拖影，平滑处理如何关闭
• ¥15 请问怎么通过css改变图片颜色
• ¥15 Blender: auto rig pro骨骼动画导出后变形穿模
• ¥15 C51单片机的设计思路哈
• ¥15 Linux脏牛提权漏洞