连通图着色求解.docVIP

  • 11
  • 0
  • 约5.56千字
  • 约 16页
  • 2018-02-06 发布于江西
  • 举报
连通图着色求解

目 录 1 课程设计介绍 1 1.1 课程设计内容 1 1.2 课程设计要求 1 2 课程设计原理 2 2.1 课设题目粗略分析 2 2.2 原理图介绍 2 2.2.1 功能模块图 2 2.2.2 流程图分析 3 3 数据结构分析 6 3.1 存储结构 6 3.2 算法描述 6 4 调试与分析 9 4.1 调试过程 9 4.2 程序执行过程 9 参考文献 11 附 录(关键部分程序清单) 12 1 课程设计介绍 此次课程设计的重在检验学生的数据结构的理解和应用,增强学生的实际动手能力。 1.1 课程设计内容 输入了一个无向图,给图上的每一个结点标记一种颜色,在保证每个相邻结点颜色不同时,求解该图所需要的最少颜色数,并给出每个结点的具体颜色。 1.2 课程设计要求 利用所学知识设计相对应的数据结构; 熟练运用开发环境; 完成软件设计与编码; 熟练掌握基本的调试方法; 提交符合设计规范的报告; 2 课程设计原理 此次课程设计的题目为连通图着色求解,主要用的是韦奇儿·鲍威尔算法。 2.1 课设题目粗略分析 根据题目中的要求建立一个着色求解模型,在每个点上涂不一样的颜色,相邻的两个结点颜色要求不同,这与离散中的着色问题比较一致,运用韦奇儿·鲍威尔算法即可解决之。 2.2 原理图介绍 此小节主要介绍了此次课程设计中主要算法的功能模块图和流程图。 2.2.1 功能模块图 图2.1 功能模块图 2.2.2 流程图分析 主模块,调用子模块, 流程图如下: 图2.2.1主模块流程图 创建模块,建立图和邻接矩阵,完成一些相应的操作,流程图如下: 图2.2.2创建模块流程图 求解模块,完成对结点涂色及对所需颜色的数目,流程图如下: 图2.2.3求解模块流程图 3 数据结构分析 此次课程设计的结构比较简单,用的是邻接矩阵的方法来表示。 3.1 存储结构 在定义结构体数组建立整个图的信息,包括图的各个结点的名称及对应的数字编号,每个结点的出度,并且每个结点建立对应的邻接表: 建立邻接矩阵: typedef struct ArcCell{ int adjvex; }ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; 输入结点数据和记录结点的出度: typedef struct Vnode{ int data; int Outdegree; }Vnode,Adjlist[MAX_VERTEX_NUM]; 定义一个图结构: typedef struct{ AdjMatrix g; Adjlist vertices; int vexnum,arcnum; }Graph; 3.2 算法描述 由韦奇儿·鲍威尔算法: a)将图的结点按照结点度数减少的次序进行排列; b) 用第一种颜色对第一点着色,并且按排列次序对与前面着色点不相连的没一点图上一种颜色; c)用第二种颜色对尚未着色的点重复b,用第三种颜色继续这种做法,直到所有的点都涂上颜色。 根据韦奇儿·鲍威尔算法具体的算法如下: 1. 先求每个结点的出度,可根据邻接矩阵每行的和就等于该结点的出度,算法如下: 用for循环执行以下的程序,求每个结点的出度数 sum=0; for(j=0;jG.vexnum;j++) { sum=sum+G.g[i][j].adjvex; 其中G.g[i][j].adjvex表示邻接矩阵的数据(1或0) G.vertices[i].Outdegree=sum; } 2. 根据韦奇儿·鲍威尔算法,要对每个结点的出度进行从大到小的排序,具体算法如下: 用双重循环执行: 若Q[s]Q[s+1]则Q[s]与Q[s+1]交换; visited[s]与visited[s+1]交换; 其中visited[s]代表从小到大排列的顺序; Q[s]则记录该点的出度; 3. 根据韦奇儿·鲍威尔算法,由每个结点出度,对结点度数从大到小对与其不相邻的结点涂一样的颜色,重复此操作,具体算法如下: 双重循环执行: 若(G.g[visited[i]][j].adjvex==0 visited[i]!=j aG.vexnum) { 输出与%d颜色以一样的有%d\n, 接着执行 用以记录参数; 若(G.vertices[visited[

文档评论(0)

1亿VIP精品文档

相关文档