广度优先与深度优先搜索

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

#include "string.h"

#include "stdlib.h"

#include "malloc.h"

#include "stdio.h"

#define MAX_VERTEX_NUM 10

#define MAXQSIZE 10

int visited[MAX_VERTEX_NUM];

typedef struct Node{

int adjvex;

struct Node *next;

}EdgeNode;

typedef struct VNode{

int vertex;

EdgeNode *firstedge;

}V ertexNode;

typedef V ertexNode AdjList[MAX_VERTEX_NUM]; typedef struct{

AdjList adjlist;

int n,e;

}ALGraph;

typedef struct{

int *base;

int front;

int rear;

}SqQueue;

int InitQueue(SqQueue *Q)

{

Q->base=(int *)malloc(MAXQSIZE*sizeof(int));

if(!Q->base)

return 0;

Q->front=Q->rear=0;

return 1;

}

int EnQueue(SqQueue *Q,int e)

{

if((Q->rear+1)%MAXQSIZE==Q->front)

return 0;

Q->base[Q->rear]=e;

Q->rear=(Q->rear+1)%MAXQSIZE;

return 1;

}

int DeQueue(SqQueue *Q)

{

int i;

i=Q->base[Q->front];

Q->front=(Q->front+1)%MAXQSIZE;

return i;

}

int QueueEmpty(SqQueue *Q)

{

if(Q->front==Q->rear)

return 1;

return 0;

}

void BFS(ALGraph *G,int k)

{

int e;

SqQueue Q;

EdgeNode *p;

InitQueue(&Q);

printf("这次访问顶点:%d\n",G->adjlist[k].vertex);

visited[k]=1;

p=G->adjlist[k].firstedge;

while(p!=NULL)

{

EnQueue(&Q,p->adjvex);

printf("这次访问顶点:%d\n",G->adjlist[p->adjvex].vertex);

visited[p->adjvex]=1;

p=p->next;

}

while(!QueueEmpty(&Q))

{

e=DeQueue(&Q);

p=G->adjlist[e].firstedge;

while( p!=NULL )

{

if(visited[p->adjvex]==0)

{

printf("这次访问顶点:%d\n",G->adjlist[p->adjvex].vertex);

visited[p->adjvex]=1;

EnQueue(&Q,p->adjvex);

}

p=p->next;

}

}

}

void CreateALGraph(ALGraph *G)

{

int i,j,k;

EdgeNode *s;

printf("设定无向图的顶点数n:\n");

scanf("%d",&(G->n));

printf("设定无向图的边数e:\n");

scanf("%d",&G->e);

for(i=0;i<(G->n);i++)

{

G->adjlist[i].vertex=i;

G->adjlist[i].firstedge=NULL;

printf("第%d个顶点信息为%d,序号:%d\n",i+1,i,i);

}

for(k=0;ke;k++)

{

printf("读入边(vi,vj)的顶点对序号:(用空格隔开)\n");

scanf("%d%d",&i,&j);

s=(EdgeNode *)malloc(sizeof(EdgeNode));

s->adjvex=j;

s->next=G->adjlist[i].firstedge;

G->adjlist[i].firstedge=s;

s=(EdgeNode *)malloc(sizeof(EdgeNode));

s->adjvex=i;

s->next=G->adjlist[j].firstedge;

G->adjlist[j].firstedge=s;

}

}

void DFS(ALGraph *G,int i){

相关文档
最新文档