广度优先与深度优先搜索

2019-08-20 20:22

#include \

#include \

#include \

#include \

#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;

}VertexNode;

typedef VertexNode 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\

visited[k]=1;

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

while(p!=NULL)

{

EnQueue(&Q,p->adjvex);

printf(\这次访问顶点:%d\\n\

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\

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(\

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

scanf(\

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


广度优先与深度优先搜索.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:JavaWeb课程设计 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: