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