图的深度遍历与广度遍历

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图的深度遍历和广度遍历程序源代码如下:

#include"stdio.h"

#include"stdlib.h"

#define MAXQSIZE 100

#define MVNum 100

int visited[100];

typedef struct

{

char *base;

int front;

int rear;

}SqQueue;

int InitQueue(SqQueue &Q) //初始化队列

{

Q.base=new char[MAXQSIZE];

if(!Q.base)

exit(-1); //存储失败

Q.front=Q.rear=0; //队列为空

return 1;

}

int QueueEmpty(SqQueue &Q) //判断队非空

{

if(Q.front==Q.rear)

return 0;

return 1;

}

int EnQueue(SqQueue &Q,char e) //入队

{

if((Q.rear+1)%MAXQSIZE==Q.front) //队满

return 0;

Q.base[Q.rear]=e; //新元素插入队尾

Q.rear=(Q.rear+1)%MAXQSIZE; //队尾指针加1

return 1;

}

int DeQueue(SqQueue &Q,char &e) //出队

{

if(Q.front==Q.rear)

return 0; //队空

e=Q.base[Q.front];

Q.front=(Q.front+1)%MAXQSIZE;

return 1;

}

int GetHead(SqQueue Q) //取队头元素{

if(Q.front!=Q.rear)

return Q.base[Q.front];

}

typedef struct //定义图

{

char vexs[MVNum];

int arcs[MVNum][MVNum];

int vexnum,arcnum;

}AMGraph;

int LocateVex(AMGraph G,char u)

{

int i;

for(i=0;i

if(u==G.vexs[i])

return i;

return -1;

}

int CreateUDN(AMGraph &G) //创建图{

int i,j,k;

char v1,v2;

printf("输入顶点个数和边的个数:\n");

scanf("%d%d",&G.vexnum,&G.arcnum);

getchar();

printf("请输入图:\n");

for(i=0;i

scanf("%c",&G.vexs[i]);

getchar();

for(i=0;i

for(j=0;j

G.arcs[i][j]=0;

for(k=0;k

{

scanf("%c%c",&v1,&v2);

getchar();

i=LocateVex(G,v1);

j=LocateVex(G,v2);

G.arcs[i][j]=1;

G.arcs[j][i]=G.arcs[i][j];

}

return 1;

}

void DFS(AMGraph G,int v) //深度遍历图{

int w;

printf("%c",G.vexs[v]);

visited[v]=1;

for(w=0;w

if((G.arcs[v][w]!=0)&&(!visited[w]))

DFS(G,w);

}

void DFSTraverse(AMGraph G)

{

int v;

for(v=0;v

visited[v]=0;

for(v=0;v

if(!visited[v])

DFS(G,v);

}

void BFS(AMGraph G,int v) //广度遍历

{

int w;

SqQueue Q;

printf("%c",G.vexs[v]); //访问第v个顶点

visited[v]=1;

InitQueue(Q); //初始化队列,置空

EnQueue(Q,v); //v进队

char u=GetHead(Q);

while(!QueueEmpty(Q)) //队列非空

{

DeQueue(Q,u); //队头元素出队,置为u

for(w=0;w

if(visited[w])

{

scanf("%d",&w);

visited[w]=1;

EnQueue(Q,w); //w进队

}

}

}

void BFSTraverse(AMGraph G)

{

int v;

for(v=0;v

visited[v]=0;

for(v=0;v

if(!visited[v])

BFS(G,v);

}

main()

{

AMGraph G;

CreateUDN(G);

printf("深度遍历结果:\n");

DFSTraverse(G);

printf("\n广度遍历结果:\n");

BFSTraverse(G);

printf("\n");

}

相关文档
最新文档