课程设计论文图的遍历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计论文图的遍历
内蒙古科技大学
本科生课程设计论文
题目:C++课程设
计
-------图的遍历
学生姓名:齐枫
学号:1076807407
专业:计算机10
级
班级:(4)班
指导教师:
2012年6月18日~2011年7月4日
内蒙古科技大学课程设计任务书
一、前言
1.1课程设计的目的与意义 (4)
1.2对课程设计功能的需求分析 (4)
二、算法思想 (5)
三、数据结构 (5)
四、模块划分 (6)
node* creategraph()//建立邻接表,完成无向图的输入
void DepthFirstSearch(node *list)//深度优先搜索
void BreadthFirstSearth(node *list)//广度优先搜索
void PathSearth(node *list)//路径搜索
void AdjacencyListDelete(node *list)//释放邻接表的空间AdjacencyListDelete(list);//释放邻接表空间
五、系统的概要设计
1、系统功能模块图 (9)
六、源程序 (10)
七、程序的调试分析以及测试结果
1、程序的调试测试结果 (20)
八、附录
1、附录一
心得 (21)
2、参考文献 (22)
一、前言
1.1课程设计的目的与意义
上学期我们对《数据结构》这门课程进行了学习。这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。这次课程设计不但要求我们掌握《数据结构》中的各方面知识,还要求我们具备一定的C++语言基础和编程能力。
通过实践我们掌握《数据结构》中的知识。对于《图的遍历》这一课题来说,所要求我们掌握的数据结构知识主要有:图的存储结构、队列的基本运算实现、图的深度优先遍历算法实现、图的广度优先遍历算法实现。
对于我们学生来讲,此次课程设计是为了让我们训练自己的实际设计能力,通过设计实践,去真正获得此项目管理和团队协作等方面的基本训练和工作经验。
通过课程设计的一系列训练,我们能提高如何综合运用所学知识解决实际问题的能力,以及获得此项目管理和团队协作等等众多方面的具体经验,增强对相关课程具体内容的理解和掌握能力,培养对整体课程知识综合运用和融会贯通能力。
1.2对课程设计功能的需求分析
图的遍历并不需要是一个过于复杂的工作环境,一般来说:最合适的才是最好的。软件设计必须符合我们使用实际情况的需要。根据要求,图的遍历主要功能如下:
1、用户可以随时建立一个有向图或无向图;
2、用户可以根据自己的需要,对图进行深度遍历或广度遍历;
3、用户可以根据自己的需要对图进行修改;
4、在整个程序中,用户可以不断的按照不同的方式对图进行遍历,若不继续,用户也可以随时跳出程序,同时,如果用户输入的序号错误,程序会提示用户重新输入序号;
二、算法思想
本课题本人所采用的是邻接表的方式存储图,实现图的深度、广度两种遍历,并将每种遍历结果输出来。并且能寻找路径。
2.1.1图的邻接矩阵的建立
对任意给定的图(顶点数和边数自定),,根据邻接表的存储结构建立图的邻接表。
2.1.2 图的遍历的实现
邻接表是图的一种链式存储结构,在邻接表中,对图中的每一个顶点建立一个单链表,通常以顺序结构存储,以便随机访问任意一顶点。
图的深度遍历,假设初始状态是图中所有顶点都未曾被访问,则深度优先遍历可从图中的某个顶点v出发,访问此顶点,依次从v的未被访问的邻接点出发深度优先遍历图,直至图中和v有路径想通的顶点都被访问到;若此时图中尚有未被访问的节点,则另选图中一个未被访问的顶点做起始点,直至所有节点都被访问。
图的广度优先遍历,是以v为起始点,由近及远,依次访问和v有路径相通且路径长度为1、2、…的顶点。
三、数据结构
#define t true
#define f false
#include
struct node//定义一个结构作为节点类型
{
int data;
bool sign;//标志位,用来标示是否遍历过
node *next;
};
四、模块划分
node* creategraph()//建立邻接表,完成无向图的输入};
表4.1邻接表的建立
void DepthFirstSearch(node *list)//深度优先搜索
void DepthFirstSearch(node *list)
cin>>k;
a[i]=k
图4.2 深度优先遍历流程图void BreadthFirstSearth(node *list)//广度优先搜索
表4.3图的广度遍历void PathSearth(node *list)//路径搜索
void AdjacencyListDelete(node *list)//释放邻接表的空间AdjacencyListDelete(list);//释放邻接表空间
五、系统的概要设计
main() /*包含一些调用和控制语句*/
图5.1系统功能模块图六、部分源程序
#define t true
#define f false
#include
struct node//定义一个结构作为节点类型
{
int data;
bool sign;//标志位,用来标示是否遍历过
node *next;
};
node* creategraph()//建立邻接表,完成无向图的输入{
int l,m,n;
bool g;
cout<<"请输入节点数: ";
cin>>n;