图的遍历问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档