图的遍历问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程实习报告
题目:图的遍历问题
班级:智能1201班
姓名:易全政
学号:201208070123
完成日期:2014.5.5
一、需求分析
1、若用有向网表示网页的链接网络,其中顶点表示某个网页,有向弧表示网页之间的链接关系。试设计一个网络蜘蛛系统,分别以广度优先和深度优先的策略抓取网页。
2、先输入顶点与弧的数量,再依次各顶点对应的字母,输入各条弧(权值1);
3、输出从首个顶点开始的广度优先遍历序列和深度先遍历序列;
4、测试数据
输入(黑色为提示输入信息,红色为自己输入部分)
输入顶点数和弧数:8 9
输入8 个顶点.
输入顶点0:a
输入顶点1:b
输入顶点2:c
输入顶点3:d
输入顶点4:e
输入顶点5:f
输入顶点6:g
输入顶点7:h
输入9 条弧.
输入弧0:a b 1
输入弧1:b d 1
输入弧2:b e 1
输入弧3:d h 1
输入弧4:e h 1
输入弧5:a c 1
输入弧6:c f 1
输入弧7:c g 1
输入弧8:f g 1
输出
深度优先遍历: a b d h e c f g
广度优先遍历: a b c d e f g h
二、概要设计
1、抽象数据类型
为实现有向图的存储,应该采用邻接表存储图;
为实现邻接表需要利用链表节点以及其属性;
为实现广度优先遍历应该采用队列实现;
为实现深度优先遍历应该采用递归或者栈实现。
2、算法的基本思想
我们首先要将这个有向图输入并存储,需要先输入其顶点个数以及边数,并利用循环依次利用邻接表来存储,并做好每一个顶点的标记,再利用递归对还没有访问的节点一次进行深度优先,再将定点重新标记,并对没有访问的节点进行广度优先。
3、程序的流程
程序的流程由三个模块组成:
(1)输入模块:根据图依次输入顶点与边;
(2)中间模块:i)图的邻接表建立ii)深度优先遍历iii)广度优先遍历(3)输出模块:根据遍历得到的结果依次输出
三、详细设计
1、物理数据类型
题目要求先输入顶点数与边数,故应该采用int型存储;输入顶点为字母,故应该采用char存储;邻接表建立需要利用链表,应该有一个链表类指针与char 数据;存储所有顶点应该采用数组,对于建立邻接表应该采用指向指针的指针或者二维数组来存储。
2、算法的具体步骤
图的遍历的流程图如下:
1)图的建立
2)深度优先
3)广度优先
3根据程序的实现情况可知,算法运行时间是集中于循环上面与递归上面,且时间复杂度都为Θ(n )。
4、输入输出的格式
输入
输入顶点数和弧数: //提示
等待输入
(……依次输入顶点和弧数……)
输出
深度优先遍历: //输出结果
广度优先遍历: //输出结果
四、测试结果
输入数据跟上面的测试数据一样,其对应的有向图为:
输出
深度优先遍历:a b d h e c f g
广度优先遍历:a b c d e f g h
输出结果截图:
五、实验心得
本次实验通过实现图的建立问题,一方面学习了邻接表的构建,另一方面对深度遍历以及广度遍历有了更加深入的学习,起初在完成的过程中有很大困难,但是尝试以及查阅一些资料的情况下,完成了程序并且掌握了邻接表的建立方法,对以后的学习有很大的作用。
六、附录
网络蜘蛛系统(邻接表).cpp