广度优先与深度优先搜索
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;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){