2022年实现深度优先搜索和广度优先搜索算法参照 .pdf
《2022年实现深度优先搜索和广度优先搜索算法参照 .pdf》由会员分享,可在线阅读,更多相关《2022年实现深度优先搜索和广度优先搜索算法参照 .pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、佛山科学技术学院实验报告课程名称数据结构实验项目实现深度优先搜索与广度优先搜索算法专业班级 10网络工程 2 姓 名蒲永毅学 号 2010394223 指导教师成 绩日 期 2011 年 11 月 19 日一、实验目的1、通过本实验,掌握图,无向图的基本概念,掌握图的遍历;2、掌握图的深度优先搜索(DFS)与广度优先搜索(BFS)算法。二、实验内容1、建立图的存储方式;2、图的深度优先搜索算法;3、图的广度优先搜索算法。三、实验原理图的遍历是图的算法中一种非常重要的算法,通过建立图的存储结构,采用深度优先搜索与广度优先搜索算法可以进行图的遍历;深度优先遍历是树的先根遍历的推广,是将某一条枝上的
2、所有节点都搜索到了之后,才转向搜索另一条枝上的所有节点;广度优先遍历与深度优先遍历的区别在于:广度优先遍历是以层为顺序,将某一层上的所有节点都搜索到了之后才向下一层搜索。四、实验步骤1建立图的存储结构;2输入图的基本接点与信息,初始化图;3编写图的深度优先搜索(DFS)和广度优先搜索算法(BFS)程序;4.采用菜单形式进行显示与选择。5.测试数据和结果显示(1)从键盘输入顶点数和边数;(2)输入顶点信息;(3)输入边的信息,以(a,b)的形式输入边的信息,构建一个无向图;(4)对此无向图进行深度优先搜索和广度优先搜索,并输出正确的序列。五、程序源代码及注释/*采用邻接表的存储结构*构建无向图*
3、图的创建过程中暂不支持重复验证,名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 10 页 -因此不能对一条边进行重复定义*/#include#include#include#define MAX_VERTEX_NUM 20 typedef struct ArcNode int adjvex;struct ArcNode*nextarc;/InfoType*info;ArcNode;/*链表结点的结构用于创建栈或是队列*/typedef struct LinkNode ArcNode*parc;/存储指针地址struct LinkNode*next;/指向一下个结点LinkNode
4、;typedef struct VNode char cData;/顶点元素值ArcNode*firstarc;/指向第一条依附于该点的边VNode,AdjListMAX_VERTEX_NUM;typedef struct AdjList vertices;int vexnum;/图的当前顶点数和弧数int arcnum;ALGraph;int VisitedMAX_VERTEX_NUM;/*将生成的图打印出来以便确认正确性*/int PrintCheck(ALGraph*pag)int i;ArcNode*p;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 10 页 -prin
5、tf(nCheck the Graph!n);printf(Notdatatnexttnextt.n);for(i=0;ivexnum;i+)printf(%dt%ct,i,pag-verticesi.cData);p=pag-verticesi.firstarc;while(p)printf(%dt,p-adjvex);p=p-nextarc;printf(n);return 1;/*采用前插法创建邻接表*/int CreateGraph(ALGraph*pag,int start,int end)ArcNode*arcNodes=(ArcNode*)malloc(sizeof(ArcNod
6、e);ArcNode*arcNodee=(ArcNode*)malloc(sizeof(ArcNode);ArcNode*p;if(!arcNodes|!arcNodee)return 0;/从 start-end生成关系arcNodes-adjvex=end;/下一结点的位置p=pag-verticesstart.firstarc;if(!p)/第一个结点单独构造 arcNodes-nextarc=pag-verticesstart.firstarc;pag-verticesstart.firstarc=arcNodes;else while(p-nextarc)p=p-nextarc;p-
7、nextarc=arcNodes;arcNodes-nextarc=NULL;/end-start 的关系生成arcNodee-adjvex=start;/下一结点的位置p=pag-verticesend.firstarc;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 10 页 -if(!p)/第一个结点单独构造 arcNodee-nextarc=pag-verticesend.firstarc;pag-verticesend.firstarc=arcNodee;else while(p-nextarc)p=p-nextarc;p-nextarc=arcNodee;arcNod
8、ee-nextarc=NULL;return 1;/*深度优先遍历,非递归方式*结点先访问再入栈*栈的存储结构直接采用了LinkNode 构成的链表*采用前插法进行插入与删除,从而也可以完成栈的功能*栈空条件 Stack-next=NULL*/void DFSTraverse(ALGraph ag,int start)LinkNode*Stack=(LinkNode*)malloc(sizeof(LinkNode);/链表头结点,用做栈LinkNode*pStack=(LinkNode*)malloc(sizeof(LinkNode);/对栈操作的指针LinkNode*temp;/临时存储Ar
9、cNode*p;int i;if(!pStack|!Stack)return;Stack-next=NULL;p=ag.verticesstart.firstarc;Visitedstart=1;/Flag printf(n输出深度优先遍历顺序:);printf(%c,ag.verticesstart.cData);/访问第一个点while(1)/正常情况下执行一次,为了打印孤立结点/push stack pStack-parc=p;pStack-next=Stack-next;/将 p 接入链式栈中Stack-next=pStack;/push over 名师资料总结-精品资料欢迎下载-名师
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年实现深度优先搜索和广度优先搜索算法参照 2022 实现 深度 优先 搜索 广度 算法 参照
限制150内