# 数据结构邻接表图的遍历运行时出错

#include "stdio.h"
#include "stdlib.h"
#include"string.h"
#define MAX_VERTEX_NUM 20
#define MAXNAME 10
#define MAXQSIZE 100
typedef char VertexType[MAXNAME];

typedef struct ArcNode
{

struct ArcNode *nextarc;
}ArcNode;

typedef struct VNode
{

VertexType data;

ArcNode *firstarc;

typedef struct
{

int vexnum,arcnum;

}ALGraph;

typedef enum{ FALSE, TRUE }Boolean;
Boolean visited[MAX_VERTEX_NUM];

void CreateGraph(ALGraph *G)
{
int i=0;
char ch;
ArcNode *p, *q;
printf("请输入顶点数和边数(用空格隔开)：\n");
scanf("%d %d",&G->vexnum,&G->arcnum);
printf("请输入图的顶点:\n");
for(i=0;ivexnum;i++)
{

scanf("%c", &G->vertices[i].data);

G->vertices[i].firstarc=NULL;
}
for( i=0; ivexnum; i++ )
{ //存储图的边信息

printf("请输入顶点 %c 的邻接顶点:\n",G->vertices[i].data );

scanf("%c", &ch);

while( '\n' != ch )
{

p = (ArcNode *)malloc(sizeof(ArcNode));

q->nextarc = p;

q = p;

q->nextarc = NULL;

scanf("%c", &ch);

}

}
}

{
if(G->vertices[v].firstarc)
else
return -1;
}

{
ArcNode *p=G->vertices[v].firstarc;
p=p->nextarc;
if(p->nextarc)
else
return -1;
}

void DFS(ALGraph *G,int v)
{
int w;
visited[v]=TRUE;
printf("%c",G->vertices[v].data);
if(!visited[w])
DFS(G,w);
}

void DFSGrahp(ALGraph *G)
{
int v;
for(v=0;vvexnum;v++)
visited[v]=FALSE;
for(v=0;vvexnum;v++)
if(!visited[v])
DFS(G,v);
printf("\n");
}

struct QNode
{
int data;
struct QNode *next;
};
typedef struct
{
QNode *front;
QNode *rear;

{
if(Q.front->next==NULL)
return 1;
else
return 0;
}
{
QNode * p=(QNode *)malloc(sizeof(QNode));
if(!p)
exit(0);
p->data=k;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
{
QNode * p;
if(Q.front==Q.rear)
return ;
p=Q.front->next;
e=p->data;
}
void BFSGrahp(ALGraph *G)
{
int v,u,w;
for(v=0;vvexnum;v++)
visited[v]=FALSE;
for(v=0;vvexnum;v++)
if(!visited[v])
{
visited[v]=TRUE;
printf("%c",G->vertices[v].data);
EnQueue(Q,v);
while(!QueueEmpty(Q))
{
DeQueue(Q,u);
if(!visited[w])
{
visited[w]=TRUE;
printf("%c",G->vertices[w].data);
EnQueue(Q,w);
}
}
}
}
void print(ALGraph *G)
{
int v;
for(v=0;vvexnum;v++)
{
printf("%c ",G->vertices[v].data);
}
}

{
int num;
ALGraph G=(ALGraph)malloc(sizeof(ALGraph));
while(1)
{
printf("\t\t\t 图的遍历\n\n");
printf("\t\t\t1 图的建立\n");
printf("\t\t\t2 深度优先遍历图\n");
printf("\t\t\t3 广度优先遍历图\n");
printf("\t\t\t4 显示顶点\n");
printf("\t\t\t5 结束:\n\n");
printf("\t\t 请选择1-5： ");
scanf("%d",&num);
switch(num)
{
case 1:
CreateGraph(G);
break;
case 2:
DFSGrahp(G);
break;
case 3:
BFSGrahp(G);
break;
case 4:
print(G);
break;
case 5:
exit(0);
default:
printf("请输入1-5之间的数字");
}
}

}
void main()
{
}

• 写回答

#### 1条回答默认 最新

• 壮飞 2017-06-07 12:35
关注

在"请输入图的顶点"这句话下面那个for循环的位置出错了
少了一个小于号，应该是i<vexnum
在编辑器里应该直接就会提示错误的位置

本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

• 已采纳回答 12月6日

#### 悬赏问题

• ¥150 寻找王者荣耀开发作者，合作或者解答
• ¥15 乳腺癌数据集 相关矩阵 特征选择
• ¥15 我的游戏账号被盗取，请问我该怎么做
• ¥15 通关usb3.0.push文件，导致usb频繁断连
• ¥15 有没有能解决微信公众号，只能实时拍照，没有选择相册上传功能，我不懂任何技术，，有没有给我发个软件就能搞定的方法
• ¥15 Pythontxt文本可视化
• ¥15 如何基于Ryu环境下使用scapy包进行数据包构造
• ¥15 springboot国际化
• ¥15 搭建QEMU环境运行OP-TEE出现错误
• ¥15 Minifilter文件保护