课程设计论文-图的遍历.doc

上传人:b****2 文档编号:1646744 上传时间:2022-10-23 格式:DOC 页数:22 大小:227KB
下载 相关 举报
课程设计论文-图的遍历.doc_第1页
第1页 / 共22页
课程设计论文-图的遍历.doc_第2页
第2页 / 共22页
课程设计论文-图的遍历.doc_第3页
第3页 / 共22页
课程设计论文-图的遍历.doc_第4页
第4页 / 共22页
课程设计论文-图的遍历.doc_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

课程设计论文-图的遍历.doc

《课程设计论文-图的遍历.doc》由会员分享,可在线阅读,更多相关《课程设计论文-图的遍历.doc(22页珍藏版)》请在冰豆网上搜索。

课程设计论文-图的遍历.doc

内蒙古科技大学课程设计论文

内蒙古科技大学

本科生课程设计论文

题目:

C++课程设计

-------图的遍历

学生姓名:

王刚

学号:

0967111207

专业:

计算机09级

班级:

(2)班

指导教师:

丁雨

2011年6月13日~2011年6月24日

内蒙古科技大学课程设计任务书

课程名称

数据结构课程设计

设计题目

图的遍历

指导教师

丁雨

时间

2011-6-23

一、教学要求

1.掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力

2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能

3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力

4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风

二、设计资料及参数

每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。

图的遍历

以数组表示法或邻接表表示图,在此基础上实现对图的遍历。

要求设计类(或类模板)来描述图,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函数:

v输入图、输出图

v求图中顶点V的第一个邻接点

v求图中顶点V的下一个邻接点

v深度优先遍历图

v广度优先遍历图

并设计主函数测试该类(或类模板)。

三、设计要求及成果

1.分析课程设计题目的要求

2.写出详细设计说明

3.编写程序代码,调试程序使其能正确运行

4.设计完成的软件要便于操作和使用

5.设计完成后提交课程设计报告

四、进度安排

资料查阅与讨论(1天)

系统分析(2天)

系统的开发与测试(5天)

编写课程设计说明书和验收(2天)

五、评分标准

1.根据平时上机考勤、表现和进度,教师将每天点名和检查

2.根据课程设计完成情况,必须有可运行的软件。

3.根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。

4.根据答辩的情况,应能够以清晰的思路和准确、简练的语言叙述自己的设计和回答教师的提问

六、建议参考资料

1.《数据结构(C语言版)》严蔚敏、吴伟民主编清华大学出版社2004.11

2.《数据结构课程设计案例精编(用C/C++描述)》,李建学等编著,清华大学出版社2007.2

3.《数据结构:

用面向对象方法与C++语言描述》,殷人昆主编, 清华大学出版社2007.6

一、前言

1.1课程设计的目的与意义………………………………………………4

1.2对课程设计功能的需求分析…………………………………………4

二、算法思想…………………………………………………………………5

三、数据结构…………………………………………………………………5

四、模块划分…………………………………………………………………6

node*creategraph()//建立邻接表,完成无向图的输入

voidDepthFirstSearch(node*list)//深度优先搜索

voidBreadthFirstSearth(node*list)//广度优先搜索

voidPathSearth(node*list)//路径搜索

voidAdjacencyListDelete(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、…的顶点。

三、数据结构

#definettrue

#defineffalse

#include

structnode//定义一个结构作为节点类型

{

intdata;

boolsign;//标志位,用来标示是否遍历过

node*next;

};

四、模块划分

node*creategraph()//建立邻接表,完成无向图的输入

};

0

4

1

0

2

1

3

2

4

3

输入节点数

动态分配节点数组内存

表4.1邻接表的建立

voidDepthFirstSearch(node*list)//深度优先搜索

voidDepthFirstSearch(node*list)

cin>>k;

a[i]=k

list[k].sign=t;

i++

list[k].sign==t

k=p->data;

p=p->next;

i++

非零零

if(list[k].sign!

=f)

结束程序

图4.2深度优先遍历流程图

voidBreadthFirstSearth(node*list)//广度优先搜索

BreadthFirstSearthth

搜索起始节点

cin>>k;

list[k].sign=t;

p=list[a[m]].next;

if(list[k].sign==f)

r++;标记

p=p->next;

I++

程序结束

for(inti=1;i<=n;i++)//恢复原邻接表

list[i].sign=f;

表4.3图的广度遍历

voidPathSearth(node*list)//路径搜索

voidAdjacencyListDelete(node*list)//释放邻接表的空间

AdjacencyListDelete(list);//释放邻接表空间

五、系统的概要设计

main()/*包含一些调用和控制语句*/

进入菜单选择

用户登录

图信息的录入

路径收索

广度优先遍历图

深度优先遍历图

退出程序

图5.1系统功能模块图

六、部分源程序

#definettrue

#defineffalse

#include

structnode//定义一个结构作为节点类型

{

intdata;

boolsign;//标志位,用来标示是否遍历过

node*next;

};

node*creategraph()//建立邻接表,完成无向图的输入

{

intl,m,n;

boolg;

cout<<"请输入节点数:

";

cin>>n;

node*adjacencylist=newnode[n+1];//动态分配节点数组内存

adjacencylist[0].data=n;//0地址存放的为节点数

adjacencylist[0].next=NULL;

for(inti=1;i<=n;i++)//给各顶点域赋初值

{

adjacencylist[i].data=0;

adjacencylist[i].next=NULL;

adjacencylist[i].sign=f;//表示未遍历

}

cout<<"请依次输入各条边的始

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1