数据结构与算法课程设计报告

数据结构与算法课程设计报告

ID:25246320

大小:230.00 KB

页数:13页

时间:2018-11-19

数据结构与算法课程设计报告_第1页
数据结构与算法课程设计报告_第2页
数据结构与算法课程设计报告_第3页
数据结构与算法课程设计报告_第4页
数据结构与算法课程设计报告_第5页
资源描述:

《数据结构与算法课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、合肥学院计算机科学与技术系课程设计报告2012~2013学年第2学期课程数据结构与算法设计课程设计课程设计名称欧拉回路学生姓名陶飞学号1104012039专业班级计算机科学与技术11级3班指导教师李红,何立新,华珊珊,陈艳平2013年3月题目:欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?一.问题分析和任务定义:题目要求判断一个给定的图中是否存在欧拉回路。由欧拉图的定义,当一个图存在欧拉回路时,该图称为欧拉图。题目问是否存在欧拉回路即等价于

2、问给定的图是否为欧拉图。所以,证明给定图是欧拉图就说明该图存在欧拉回路,否则不存在欧拉回路。根据高等教育出版社出版屈婉玲、耿素云、张立昂主编的《离散数学》P.296定理15.1可知:无向图G是欧拉图当且仅当G是连通图且没有奇度顶点。要证明一个给定的图是否为欧拉图,证明给定的图是连通图且没有奇度顶点即可。所以,解决题目中的问题就转化为证明给定图是否是连通图且没有奇度顶点。首先要确定一给定的图是否为连通图。这里我们可以通过图的深度优先搜索遍历确定。从任意顶点出发,如果能深度优先遍历到所有的顶点就说明图中所有的

3、顶点都是连图的即为连通图。然后再确定给定的图是否没有奇度顶点。我们可以以邻接矩阵的形式存储给定的图,对邻接矩阵的每行分别行进行扫描,记录每个顶点的度数,当每行扫描完后判断该顶点的度数是否为奇数,存在奇度顶点直接结束扫描,说明存在奇度顶点,给定图不是欧拉图。即不存在欧拉回路。否则继续扫描,当扫描完所有的行没有发现奇度顶点,即说明给定图没有奇度顶点。当上述两个问题都确定以后根据定理,当且仅当给定图为连通图且没有奇度顶点时给定的图为欧拉图。由此可确定,给定的图是否存在欧拉回路。二.数据结构的选择与概要设计:1.

4、数据结构的选择:图在我们所学的数据结构与算法课程中有四种存储方式:邻接矩阵、邻接表、十字链表和邻接多重表。本问题比较简单,选用邻接矩阵或邻接矩阵就足够了。在本课程设计中需要判断是否有奇度顶点和是否为连通图,用用邻接表和邻接矩阵在时间繁杂度没有什么大的差别,在空间复杂度上,因为本题是无向图,如果如果用邻接表,储存一条边要储存两次,存储指针比int型的空间消耗大,在图不是很大的情况下,邻接矩阵的空间复杂度要小。同时选用邻接矩阵很容易得到图中个顶点的度数。因为顶点只要求编号这一信息,所以就没有用结构体存储顶点信

5、息,图用邻接矩阵要用结构体存储。结构体定义如下:typedefstruct{intn;//顶点个数inte;//边的条数intvexs[MAX_VERTEX_NUM];//一维数组储存顶点intedges[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//二维数组储存边}MGraph;//图2.概要设计首先将图转换为邻接矩阵存储起来,然后邻接矩阵的每一行进行搜索得图中到每个顶点的度数,如果有奇度顶点,输出:不存在欧拉回路,即可结束程序。否则继续判断给定的图是否为连通图,如果是连通图输出:

6、存在欧拉回路;否则输出:不存在欧拉回路。结束程序。三.详细设计和编码:1.将图转化为邻接矩阵存储:先输入图中顶点个个数和边的条数,对所有可能存在的边初始化为0,再依次输入边的信息,即如果顶点1,2存在相连的边,输入12(1,2为自动给顶点分配的编码)。将边1,2的信息改为1。用函数MGraph*creat_MGraph();完成,返回邻接矩阵的首地址即可。MGraph*creat_MGraph()//建立邻接矩阵{inti,j,k,n,e;MGraph*mg=malloc(sizeof(MGraph));

7、printf("请输入顶点的个数:");scanf("%d",&n);printf("请输入边的条数:");scanf("%d",&e);mg->n=n;mg->e=e;getchar();for(i=1;i<=n;i++)for(j=1;j<=n;j++)mg->edges[i][j]=0;//初始化邻接矩阵表示的所有边printf("请输入边的信息:");for(i=1;i<=e;i++){scanf("%d%d",&j,&k);mg->edges[j][k]=1;mg->edges[k][j]=

8、1;//标记存在的边}returnmg;//返回邻接矩阵的首地址}2.搜索有没有奇度顶点:对邻接矩阵的每一行进行搜索,用num记录顶点的度数(每次对新的顶点记录前都将num置为0)。为了排除顶点自身环对判断的影响,当遇到边的两顶点相同,忽略不计,这样不会对结果产生影响。如果搜索到奇度顶点则结束intEuleriancycle(MGraph*mg);函数,返回0,搜索完成且没有发现奇度顶点则返回1.intEuleriancycl

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。