C语言版的数据结构求图的遍历,但是调试时为什么会出现已停止工作?

qq_33357019 2015-12-13 08:49:44
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<malloc.h>
#define NULL 0
#define FALSE 0
#define TRUE 1
#define maxsize 100

struct arcnode
{
int adjvex;
int info;
struct arcnode *nextarc;
};

struct vexnode
{
int data;
struct arcnode *firstarc;
};

struct graph
{
struct vexnode *vexpex;
int vexnum,arcnum;
};

struct queue
{
int *elem;
int front;
int rear;
};

int n;
int visit[100];
struct queue Q;

struct queue initqueue()
{
struct queue q;
q.elem=(int *)malloc(maxsize*sizeof(int));
if(!q.elem)
exit(0);
q.front=q.rear=0;
return q;
}

struct queue enqueue(struct queue q,int v)
{
if((q.rear+1)%maxsize==q.front)
printf("the queue is full!!!\n");
else
{
q.elem[q.rear]=v;
q.rear=(q.rear+1)%maxsize;
}
return q;
}

int dequeue(struct queue q)
{
int cur;
if(q.rear==q.front)
{
printf("the queue is null!!!\n");
exit(0);
}
else
{
cur=q.elem[q.front];
q.front=(q.front+1)%maxsize;
return cur;
}
}

int emptyqueue(struct queue q)
{
if(q.front==q.rear)
return 1;
else
return 0;
}

struct graph creatgraph()
{
int e,i,s,d;
int a;
struct graph g;
struct arcnode *p;
printf("the number of vex(n) and arc(e):");
scanf("%d%d",&n,&e);
g.vexnum=n;
g.arcnum=e;
for(i=0;i<g.vexnum;i++)
{
printf("di %d vex's information:",i);
scanf("%d",&a);
g.vexpex[i].data=a;
g.vexpex[i].firstarc=NULL;
}
for(i=0;i<g.arcnum;i++)
{
printf("di %d arc's start,end:",i+1);
scanf("%d%d",&s,&d);
p=(struct arcnode *)malloc(sizeof(struct arcnode));
p->adjvex=d;
p->info=g.vexpex[d].data;
p->nextarc=g.vexpex[s].firstarc;
g.vexpex[s].firstarc=p;
}
return g;
}

void displaygraph(struct graph g,int n)
{
int i;
struct arcnode *p;
printf("display the graph:\n");//////////////////
for(i=0;i<n;i++)
{
printf("[%d,%d]->",i,g.vexpex[i].data);
p=g.vexpex[i].firstarc;
while(p!=NULL)
{
printf("(%d,%d)->",p->adjvex,p->info);
p=p->nextarc;
}
printf("\n");
}
}

void BFSsearch(struct graph g,int v)
{
int i;
struct arcnode *p;
Q=initqueue();
printf("%5d",g.vexpex[v].data);
enqueue(Q,v);
visit[v]=TRUE;
while(!emptyqueue(Q))
{
i=dequeue(Q);
p=g.vexpex[i].firstarc;
while(p!=NULL)
{
enqueue(Q,p->adjvex);
if(visit[p->adjvex]==FALSE)
{
printf("%5d",p->info);
visit[p->adjvex]=TRUE;
}
p=p->nextarc;
}
}
}

void BFS(struct graph g)
{
int i;
for(i=0;i<g.vexnum;i++)
visit[i]=FALSE;
for(i=0;i<g.vexnum;i++)
if(visit[i]==FALSE)
BFSsearch(g,i);
printf("\n\n");
}

void DFSsearch(struct graph g,int v)
{
struct arcnode *p;
printf("%5d",g.vexpex[v].data);
visit[v]=TRUE;
p=g.vexpex[v].firstarc;
while(p!=NULL)
{
if(!visit[p->adjvex])
BFSsearch(g,p->adjvex);
p=p->nextarc;
}
}

void DFS(struct graph g)
{
int i;
for(i=0;i<g.vexnum;i++)
visit[i]=FALSE;
for(i=0;i<g.vexnum;i++)
if(visit[i]==FALSE)
DFSsearch(g,i);
printf("\n\n");
}

int main(void)
{
struct graph g;
int i;
g=creatgraph();
displaygraph(g,n);
printf("BFS result:\n");
BFS(g);
printf("DFS result:\n");
DFS(g);
getch();
return 1;
}
...全文
737 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

241

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧