- 53
- 0
- 约6.21千字
- 约 10页
- 2018-04-10 发布于河南
- 举报
《机器狗问题 课程设计报告》文档
合肥学院
计算机科学与技术系
课程设计报告
20 ~20 学年第 学期
课程 数据结构与算法 课程设计题目名称 学生姓名 学号 专业班级 指导教师
1、题目 机器狗问题
新一代机器狗(一种通过网络在计算机之间传播的病毒)刚刚被研制出来,它通过网线从一台机转移到另一台机,并破坏掉它所经过的网线(网线被破坏后它自己也不能再次经过),这种机器狗只能通过计算机进入网络。
现有一个网络布局的无向图,包括n台计算机和m条网线,想要该网络彻底瘫痪至少需要放出多少条机器狗。病毒网络布局的无向图,包括n台计算机和m条网线,该网络彻底瘫痪Vexdata为数据域,存放顶点位置,first为链域,指向单链表的第一个结点。
利用深度优先搜索算法(递归调用)遍历整个网络图,每一个连通子图都要从头开始执行该算法,遍历本连通子图的所有结点。定义a为计数变量,初始a=0,每次遍历一个连通子图,a++,统计连通子图个数。
详细设计
存储结构
新建邻接表
连通图的深度优先搜索:
至少的机器狗个数:
5、测试用例和运行结构及算法性能分析
用例1:图1 图2:
1 2 3 1 2 3
4 5 6 4 5 6
邻接表1
1 2 5 ∧
2 1 ∧
3 5 6 ∧
4 5 ∧
5 1 4 3 6
6 5 3 ∧
邻接表2:
1 2 5 ∧
2 1 ∧
3
4 5 ∧
5 1 4 6 ∧
6 5 ∧
算法性能分析:
在进行深度优先搜索时,我们需要调用dfs_trave()函数。在dfs_trave()中,针对每个没有被访问的顶点调用dfs()函数,它是一个递归函数,完成从该顶点开始的深度优先搜索。如果图是一个连通图,那么完成对visited数组的初始化后,在dfs_trave()中只需调用dfs()函数一次即可完成对图的遍历。当图不是连通图时,则在dfs_trave()中需要针对每个连通分量分别调用dfs()函数。
在图的遍历过程中,对图中的每个顶点之多只调用一次dfs(),使破坏掉的网线无法连通。在当链表中查找邻接点的时间复杂度为O(e),e为图中边的数目,加上访问顶点的时间,就是深度优先遍历图的时间复杂度O(n+e)。
6、用户使用说明
输入图的邻接表时,采用的是头结点插入法,所以在输入时先输入邻接表后面的结点,因为是无相图,据要求一条边只能输入一次,所以输入一条边程序自动生成两条有向边存储在邻接表中。
(1)、输入结点数和边数
(2)、输入具体的边,以输入0,0作为结束标志
(3)、输出每个机器狗破坏网线所经过的结点
(4)、输出至少所需要的机器狗的数量
7、课程设计体会
课程设计中我感到最麻烦的就是问题分析这个环节,首先要将现实生活中的问题转变成数据结构问题,确定用什么结构存储数据最合适,采用什么算法,将这
原创力文档

文档评论(0)