连通图着色问题

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间: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)将图的结点按照度数的递减顺序进行排列,(这种排列可能不是唯一的,因为有些点有相同的度数)。

(2)用第一种颜色对第一个结点进行着色,并且按排列次序,对于前面着色点不相邻的每一个结点着上同样的颜色。

(3)用第二种颜色对尚未着色的点重复第二个步骤,用第三种颜色继续这种

做法,直到所有的点全部着上色为止。

所以源程序就是对韦尔奇鲍威尔算法演示。首先输入结点个数和边的个数,结点结构体内包含结点编号,度数,结点的颜色和状态。边的结构体当中包含结点结构体变量,用来指示边起始节点和终止结点,同时还包含边的编号。

对输入的图用关联矩阵来表示,对着色的颜色用整型的数字来表示,所以我们规定数字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_子函数

此部分为求关联矩阵表示,以及求出每个结点相应的度数。 开始初始化关联矩阵数组

从第一个结点开始寻找相邻结点

对所有边循环寻找

如果此结点的编号与边的起始节点或终止结点相同

关联矩阵数组相应位置置

1,并且此结点的度数加1

判断下一条边

是否为最后一条边

判断下一个结点

是否为最后一个结点

显示关联矩阵数组,各点的度数

结束N Y

Y

Y

N

N

图3.1 memset_函数

相关文档
最新文档