[2018年最新整理]实验四-图的应用——深度优先/广度优先搜索遍历.docVIP

  • 16
  • 0
  • 约3.51千字
  • 约 7页
  • 2018-04-15 发布于浙江
  • 举报

[2018年最新整理]实验四-图的应用——深度优先/广度优先搜索遍历.doc

[2018年最新整理]实验四-图的应用——深度优先/广度优先搜索遍历

数据结构 实验报告 实验四 图的应用 实验题目: 图的应用——深度优先/广度优先搜索遍历 实验内容: 很多涉及图上操作的算法都是以图的遍历操作为基础的。试编写一个算法,实现图的深度优先和广度优先搜索遍历操作。 要求:以邻接矩阵或邻接表为存储结构,以用户指定的顶点为起始点,实现连通无向图的深度优先及广度优先搜索遍历,并输出遍历的结点序列。(注:学号为奇数的同学使用邻接矩阵存储结构实现,学号为偶数的同学使用邻接矩阵实现) 提示:首先,根据用户输入的顶点总数和边数,构造无向图,然后以用户输入的顶点为起始点,进行深度优先、广度优先搜索遍历,并输出遍历的结果。 三、程序源代码: #includestdio.h #includestdlib.h #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; int vexnum,arcnum;//图的当前顶点数和弧数 }ALGraph; typedef struct QNode{ int data; struct QNode *next; }QNode,*QueuePtr; typedef struct{ QueuePtr front;//队头指针 QueuePtr rear;//队尾指针 }LinkQueue; void InitQueue(LinkQueue q) { //构造一个空队列q q.front=q.rear=(QueuePtr)malloc(sizeof(QNode)); if(!q.front) exit(OVERFLOW); q.front-next=NULL; } void EnQueue(LinkQueue q,int e) { //插入元素e为q的新的队尾元素 QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode)); if(!p) exit(OVERFLOW);//存储分配失败 p-data=e; p-next=NULL; q.rear-next=p; q.rear=p; } int DeQueue(LinkQueue q) { int e; //若队列不空,则删除q的队头元素,用e返回其值,并返回OK;否则返回ERROR if(q.front==q.rear) return false; QueuePtr 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 QueueEmpty(LinkQueue q) { //若队列q为空队列,则返回TRUE,否则返回FLASE if(q.front==q.rear) return true; else return false; } int LocateVex(ALGraph G,int v) { int i; for(i=0;iG.vexnum;i++) if(G.vertices[i].data==v) return i; } //用邻接表构造无向图 void CreateDG(ALGraph G) { int i,j,k; printf(输入图的顶点数和弧度:\n); scanf(%d %d,G.vexnum,G.arcnum); printf(输入顶点信息:\n); for(i=0;iG.vexnum;i++) { scanf(%d,G.vertices[i].data); G.vertices[i].firstarc=NULL; } printf(输入邻接点:\n); for(k=0;kG.arcnum;k++) { char v1,v2; scanf(%d %d,v1,v2); i=LocateVex(G,v1); j=LocateVex(G,v2); struct ArcNode *s; s=(

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档