实验四-图的应用――深度优先/广度优先搜索遍历

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

数据结构实验报告

实验四图的应用

一、实验题目:

图的应用——xx优先/xx优先搜索遍历

二、实验内容:

很多涉及图上操作的算法都是以图的遍历操作为基础的。试编写一个算法,实现图的深度优先和广度优先搜索遍历操作。

要求:

以邻接矩阵或邻接表为存储结构,以用户指定的顶点为起始点,实现连通无向图的深度优先及广度优先搜索遍历,并输出遍历的结点序列。(注:

学号为奇数的同学使用邻接矩阵存储结构实现,学号为偶数的同学使用邻接矩阵实现)

提示:

首先,根据用户输入的顶点总数和边数,构造无向图,然后以用户输入的顶点为起始点,进行深度优先、广度优先搜索遍历,并输出遍历的结果。

三、程序源代码:

#include

#include

#define MAX_VERTEX_NUM 20

#define OVERFLOW -1

int visited[80];

typedef struct ArcNode{

int adjvex;//该弧所指向的顶点的位置

struct ArcNode *nextarc;//指向下一条弧的指针

}ArcNode;

typedef struct VNode{

int data;//顶点信息

ArcNode *firstarc;//指向第一条依附该顶点的弧的指针}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct{

AdjList vertices;

}ALGraph;

typedef struct QNode{

int data;

struct QNode *next;

}QNode,*QuePtr;

typedef struct{

QuePtr front;//队头指针

QuePtr rear;//队尾指针

}LinkQue;

void InitQue(LinkQue &q){}

void EnQue(LinkQue &q,int e){}

int DeQue(LinkQue &q){int e;

//若队列不空,则删除q的队头元素,用e返回其值,并返回OK;否则返回ERROR

//构造一个空队列q

q.front=q.rear=(QuePtr)malloc(sizeof(QNode));

if(!q.front) exit(OVERFLOW);

q.front->next=NULL;

//插入元素e为q的新的队尾元素

QuePtr p;

p=(QuePtr)malloc(sizeof(QNode));

if(!p)exit(OVERFLOW);//存储分配失败

p->data=e;

p->next=NULL;

q.rear->next=p;

q.rear=p;

}if(q.front==q.rear) return false;

QuePtr p;

p=q.front->next;

e=p->data;

q.front->next=p->next;

if(q.rear==p)q.rear=q.front;

free(p);

return e;

bool QueEmpty(LinkQue &q)

{//若队列q为空队列,则返回TRUE,否则返回FLASE}int LocateVex(ALGraph G,int v){}

//用邻接表构造无向图

void CreateDG(ALGraph &G){int i,j,k;

printf("输入图的顶点数和弧度:

\n");

if(q.front==q.rear) return true;

else

return false;

int i;

for(i=0;i

if(G.vertices[i].data==v)

return i;

printf("输入顶点信息:

\n");

for(i=0;i

G.vertices[i].firstarc=NULL;}printf("输入邻接点:

\n");

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

i=LocateVex(G,v1);

j=LocateVex(G,v2);

struct ArcNode *s;

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

s->adjvex=j;

s->nextarc=G.vertices[i].firstarc;

G.vertices[i].firstarc=s;

struct ArcNode *t;

t=(ArcNode *)malloc(sizeof(ArcNode));

t->adjvex=i;

t->nextarc=G.vertices[j].firstarc;

G.vertices[j].firstarc=t;}}

void DFSAL(ALGraph G,int v0){visited[v0]=1;

printf("%5d",G.vertices[v0].data);

struct ArcNode *p;}//深度优先搜索遍历

void DFSTraverse(ALGraph G){}

//xx优先搜索遍历

void BFSTraverse(ALGraph G,LinkQue q)

{int u,w;

struct ArcNode *p;

for(u=0;u

相关文档
最新文档