连通图着色问题.doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
连通图着色问题

沈阳航空航天大学 课 程 设 计 报 告 课程设计名称:软件综合课程设计 课程设计题目:连通图着色问题 院(系):计算机学院 专 业:计算机科学与技术 班 级:7401104 学 号:200704011110 姓 名:武 林 指导教师:刘香芹 目 录 1 需求分析 2 1.1题目的内容与要求 2 1.11题目的内容 2 1.12题目的要求 2 1.2题目理解与程序解读 2 2 总体设计 4 2.1数据结构设计 4 2.2数据结构类型与函数 4 3 详细设计 6 3.1 子函数流程图 6 3..1.1 memset_子函数 6 3..1.2sort子函数 7 3..1.3 brush_sort子函数 8 3.2 主程序流程图 9 4 调试分析 10 4.1调试时遇到的问题 10 4.2解决方案 10 4.3调试结果及说明 11 参考文献 12 源程序(清单) 13 1 需求分析 1.1题目的内容与要求 1.11题目的内容 输入一个无向图到适当的存储结构中,给图上的每一个结点标记一种颜色,在保证任何相邻结点颜色不同的同时,求解出该图所需要的最少颜色数,并给出每个结点的具体颜色。 1.12题目的要求 1)完成系统需求分析; 2)开发工具可以选择C语言或面向对象的C++等; 3)界面友好,操作方便; 4)按照课程设计规范书写课程设计报告。 1.2题目理解与程序解读 本次课设与离散数学当中图的部分有密切的联系,连通图的着色问题,涉及到图的连通性和图的着色问题。当图的结点之间存在通路,则此图是连通的,在此基础之上对他进行着色。 重要之处在于每个进店标记一种颜色,但要求的是相邻的结点要着上不同的颜色,要求所使用的颜色数最少即是所要求的。 解决此题的算法是韦尔奇.鲍威尔的着色理论,算法如下: 将图的结点按照度数的递减顺序进行排列,(这种排列可能不是唯一的,因为有些点有相同的度数)。 用第一种颜色对第一个结点进行着色,并且按排列次序,对于前面着色点不相邻的每一个结点着上同样的颜色。 用第二种颜色对尚未着色的点重复第二个步骤,用第三种颜色继续这种做法,直到所有的点全部着上色为止。 所以源程序就是对韦尔奇鲍威尔算法演示。首先输入结点个数和边的个数,结点结构体内包含结点编号,度数,结点的颜色和状态。边的结构体当中包含结点结构体变量,用来指示边起始节点和终止结点,同时还包含边的编号。 对输入的图用关联矩阵来表示,对着色的颜色用整型的数字来表示,所以我们规定数字1—5分别表示为红色,黄色,蓝色,绿色和黑色。 初始化颜色为红色,即是为数字1.颜色个数变量初始化为0个。 2 总体设计 2.1数据结构设计 结点和边分别用结构体来存储,结点的结构体为: typedef struct Node//结点 { int v; int deg; int color; bool flag; }Node; 其中v标示结点的编号,deg标示每个结点的度数,color标示对每个结点着上的颜色,flag标示此时结点的状态。这里我们申请最多可以输入50个结点的空间,Node[50]。 边的结构体为: typedef struct Edge { int e0; Node e1; Node e2; }Edge; 这里e0标示边的编号,e1和e2则代表边的起始节点和终止结点。这里我们也申请了最多50条边的空间,Edge[50]。对每个结点的度数进行排序,呈递减顺序,将结点的编号按排好的顺序存放到数组downnote[m]中,这里的m表示输入结点个数的变量。从数组downnote[m]中的第一个元素开始,根据韦尔奇鲍威尔算法对图进行着色,最后确定着色的个数。 2.2数据结构类型与函数 函数名称 函数原型 功能描述 main void main(void); 系统主程序 inite void inite(int m,int n); 初始化无相连通图 memset_ void memset_(int m,int n); 求出关联矩阵以及各点的度数 sort void sort(int m,int n); 对度数进行排序 brush_color void brush_color(int m,int n); 进行着色 表2.1 函数列表 3 详细设计 3.1 子函数流程图 3..1.1 memset_子函数 此部分为求关联矩阵表示,以及求出每个结点相应的度数。 图3.1 memset_函数 3..1.2sort子函数 此部分是将各个结点的度数按递减的顺序进行排列。 图3.2 子函数sort 3..1.3 brush_sort子函数 此部分是本程序中最重要的部分,即为结点进行着色。 图

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档