地图着色问题求解

地图着色问题求解
地图着色问题求解

攀枝花学院本科学生课程设计任务书

注:任务书由指导教师填写。

C语言地图着色

课程设计 地图着色 课程设计名称:课程设计 专业班级: 学生姓名: 学号: 指导教师: 课程设计时间:

计算机专业课程设计任务书 学生姓名专业班级学号题目地图着色 课题性质课题来源 指导教师同组姓名 主要内容学习掌握并熟练运用C语言进行程序设计; 针对具体应用问题,选择、设计和实现合适的抽象数据类型;进行简单的需求分析,给出设计方案。 任务要求综合运用和融化所学理论知识,提高分析和解决实际问题的能力,达到培养良好程序设计能力和习惯的目的,为开发满足问题要求的小型应用软件奠定基础,达到软件工程的综合性基础训练的目的。 完成需求分析报告,报告中对关键部分给出图表说明。要求格式规范,工作量饱满。 参考文献《数据结构(C语言版)》严蔚敏清华大学出版社《C语言程序设计》(第三版)谭浩强清华大学出版社

指导教师签字: 审查意见 教研室主任签字: 2014年6月15 日

目录 1 需求分析 (4) 2 概要设计 (4) 3详细设计 (5) 4 运行环境 (6) 5开发环境 (6) 6 程序设计.............................................................................................6~9 7 调试分析........................................................................................9~10 8 测试结果 (10) 9参考文献 (11) 10心得体会 (11) 11成绩评价表 (12)

图着色

算法设计课程设计 题目图着色问题 姓名学号 专业年级 指导教师职称 2014年 12月 4日

图的m着色问题 1 摘要 (3) 2 图的着色问题 (4) 2.1 图的着色问题的来源 (4) 2.2 图的着色问题的描述 (4) 3算法的基本思想 (4) 3.1 求极小覆盖法----布尔代数法 (4) 3.2 穷举法-Welch Powell着色法 (4) 3.3 回溯法 (4) 3.4 贪心法 (4) 3.5 蚁群算法 (5) 4算法步骤 (5) 4.1 求极小覆盖法----布尔代数法 (4) 4.2 穷举法-Welch Powell着色法 (4) 4.3 回溯法 (4) 4.4 贪心法 (4) 4.5 蚁群法 (4) 5 理论分析(复杂度比较)、实验性能比较 (7) 5.1 复杂度分析 (4) 5.2 实验性能比较 (4) 6 心得体会 (8) 7参考文献 (8) 8 附录 (8)

摘要 图论是近年来发展迅速而又应用广泛的一门新兴学科,已广泛应用于运筹学、网络理论、信息论、控制论、博奕论以及计算机科学等各个领域。一般说来,图的着色问题最早起源于著名的“四色问题”,染色问题不但有着重要的理论价值,而且,它和很多实际问题有着密切联系,例如通讯系统的频道分配问题,更有着广泛的应用背景. 本文首先讨论了人工智能的状态搜索方法在图着色中的具体应用,并用可视化方法展示了低维的着色空间和约束的具体意义。 关键词:图着色 c++代码 2、图的着色问题 2.1图的着色问题的来源 1852年,毕业于伦敦大学的弗南西斯·格思里(Francis Guthrie)在一家科研单位从事地图着色工作时,发现“任何一张地图似乎只用四种颜色就能使具有共同边界的国家着上不同的颜色。” 用数学语言来表示,即“将平面任意地细分为不相重迭的区域,每一个区域总可以用1,2,3,4这四个数字之一来标记,而不会使相邻的两个区域得到相同的数字。”这就是源于地图着色的四色猜想问题。这里所指的相邻区域,是指有一整段边界是公共边界。如果两个区域只相遇于一点或有限多点,就不叫相邻。因为用相同的颜色给它们着色不会引起混淆。 用四种颜色着色的世界地图: 采用四种颜色着色的美国地图: 2.2图的着色问题的描述 (一)图的着色问题是由地图的着色问题引申而来的:用m种颜色为地图着色,使得地图上的每一个区域着一种颜色,且相邻区域颜色不同。 (二)通常所说的着色问题是指下述两类问题:

地图着色问题

一、需求分析 1、问题描述 现在有一张地图,为了便于区别各个地图上的板块,地图上相 邻的颜色块应该是不同的颜色。现在的任务是给定一张地图,要对其进行着色,相邻的板块之间的颜色不能相同,输出最后 的着色的方案。 2、基本分析 功能一:为了程序的灵活性,可以让程序自由建立图 功能二:为建好的图进行着色。 3、输入输出 输入一张图的信息,正确输入边数和顶点数,输入边的关系(两 个顶点之间的),颜色只要四种,分别用数字1到4表示。 输出时根据每个顶点不同的标号输出着色的结果。 二、概要设计 1、设计思路 给定四种颜色,从选定的第一个顶点开始着色,先是第一种颜 色,如果这个颜色与这个顶点的其他邻接顶点颜色不重复,则 这个顶点可以使用此颜色,程序开始对下一个顶点着色;如果 着色重复,则使用下一种颜色重复上述过程。着色过程就是一 个递归的过程,直到所有的顶点都有着色后结束着色过程

结束

2、数据结构设计: 因为这个程序是对图的操作,所以程序采用的逻辑结构是图状,存储结构是邻接矩阵,考虑用邻接表是因为一般的地图的某一 个顶点并不会与很多的顶点邻接,如果用邻接矩阵就能符合实 际的需求,虽然占用稍大的空间,但是增强了程序的实际使用 性。 抽象数据类型定义如下: 数据对象是点和边(vex&adj) 数据关系是颜色分布以及边的相邻的两个顶点 基本操作: CreatGrouph(&G); 创建一张需要操作的无向图G Destroy(Graph &G); 初始条件:无向图G存在 操作结果:销毁图G LocateVex(&G,i) 初始条件:无向图G存在 操作结果:若在图G中存在顶点i,则返回该顶点在图中的位置,否则返回其他信息 Trycolor(current &G,store[]) 初始条件:无向图G存在,在图中有第current个顶点

地图着色课程设计

算法分析与设计课程设计说明书 地图着色 学院:计算机与控制工程学院 专业:计算机科学与技术 学生姓名:xxxxx学号:成绩 学生姓名:xxxxx 学号:成绩 指导教师:

内容提要 此题为地图着色问题,由地图着色问题很容易想到图的着色问题,因此可以把地图抽象为无向图来解决地图的着色问题。对地图的抽象相当于对图的抽象,即以邻接矩阵来实现地图的区域相邻的描绘,而对地图的区域数即以图的顶点数来描绘。设计说明书的内容包括需求分析,概要设计,详细设计,代码实现,后期测试等内容,需求分析是对此问题所需要实现的功能的介绍,概要设计是对所需要实现功能的模块划分,以及初步的实现思想,详细设计通过编写大致的代码来实现功能,代码实现则是具体的解决问题,解决此问题设计了两个算法,贪心,回溯,在程序的测试阶段,回溯算法对同一个问题的解决速率高于贪心算法,但是结果都是以最少的颜色数来染色。 课题实现的环境是在window环境下的eclipse中,通过在其中输入地图的区域数,图的连接情况,来选择相应的算法来实现染色,本次课题所采用的数据结构主要是二维数组来抽象图的邻接矩阵。

目录 1引言(或绪论) (1) 2需求分析 (2) 2.1 问题分析 (2) 2.3问题解决 (2) 2.3 运行环境及开发工具 (3) 2.4功能需求 (3) 2.4.1 地图的抽象及输入 (3) 2.4.2 地图着色的算法设计 (3) 2.4.3 界面设计 (3) 2.4.4 输出设计 (3) 2.5任务分配 (4) 3概要设计 (4) 3.1 数据定义 (4) 3.2 功能模块定义 (4) 3.2.1 地图的抽象输入模块 (4) 3.2.2 输出模块 (4) 3.2.3 地图染色模块 (4) 3.2.4 界面设计模块 (5) 3.2.5 主模块 (5) 3.3 程序流程图 (6) 4 详细设计 (7) 4.1 地图输入模块 (7) 4.1.1 数据类型 (7) 4.1.2 具体实现 (7) 4.2 界面设计模块 (7) 4.2.1 数据类型 (7) 4.2.2 具体实现 (7) 4.3 算法设计模块 (9) 4.3.1 回溯法过程 (9)

数据结构课程设计报告地图着色问题

课程设计报告 课程设计题目:地图着色问题 专业:xxxxxxxxx 班级:xxxxxxxxx 姓名:xxxxxxxxx

一:需求分析: 1)已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使 用的颜色总数最少; 2)将各省进行编号,然后利用无向图个顶点之间的边来表示各省的相邻关系; 3)演示程序以用户和计算机的对话方式进行; 4)最后对结果做出简单分析。 二:概要设计 一:设计思路 把34个省看成34个顶点,从选定的第一个顶点开始着色,先试第一种颜色,如果这个颜色与这个顶点的其他邻接顶点的颜色不重复,则这个顶点就是用这种颜色,程序开始对下一个顶点着色;如果着色重复,则使用下一种颜色重复上面的操作。着色过程就是一个递归的过程,直到所有的顶点都处理完后结束着色。 二:数据结构设计 因为这个程序是对图的操作,所以程序采用的逻辑结构是图状,存储结构选用邻接表,考虑用邻接表是因为一般的地图的某一个顶点并不会与很多的顶点相邻接,如果用邻接矩阵会浪费很多的存储空间,所以我选择的邻接表来存储。 其中: typedef struct ArcNode { int x; (表示与当前顶点所表示省份相邻的省份的位置信息) struct ArcNode *next; (指向下一个弧结点) }ArcNode; (表示省份之间相邻关系的弧结点) typedef struct { char *name; (顶点所表示的省份的名称) int color; (省份的颜色,用数字表示不同的颜色) ArcNode *firstnext; (指向第一个弧) }shengfen[35];

数据结构课程设计地图着色问题

课程设计报告 课程设计题目:地图着色问题专业:xxxxxxxxx 班级:xxxxxxxxx 姓名:xxxxxxxxx

一:需求分析: 1)已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使 用的颜色总数最少; 2)将各省进行编号,然后利用无向图个顶点之间的边来表示各省的相邻关系; 3)演示程序以用户和计算机的对话方式进行; 4)最后对结果做出简单分析。 二:概要设计 一:设计思路 把34个省看成34个顶点,从选定的第一个顶点开始着色,先试第一种颜色,如果这个颜色与这个顶点的其他邻接顶点的颜色不重复,则这个顶点就是用这种颜色,程序开始对下一个顶点着色;如果着色重复,则使用下一种颜色重复上面的操作。着色过程就是一个递归的过程,直到所有的顶点都处理完后结束着色。 二:数据结构设计 因为这个程序是对图的操作,所以程序采用的逻辑结构是图状,存储结构选用邻接表,考虑用邻接表是因为一般的地图的某一个顶点并不会与很多的顶点相邻接,如果用邻接矩阵会浪费很多的存储空间,所以我选择的邻接表来存储。 其中: typedef struct ArcNode { int x; (表示与当前顶点所表示省份相邻的省份的位置信息) struct ArcNode *next; (指向下一个弧结点) }ArcNode; (表示省份之间相邻关系的弧结点) typedef struct { char *name; (顶点所表示的省份的名称) int color; (省份的颜色,用数字表示不同的颜色) ArcNode *firstnext; (指向第一个弧) }shengfen[35]; 2 三:详细设计 该程序一共包含三个模版:分别为初始化模版、着色模版和输出模版。 1.初始化模块

两种实用地图着色算法的比较与实现

两种实用地图着色算法的比较与实现 摘要:地图着色算法的研究是为了是把相邻的区域用尽可能少的颜色区分开。四色猜想是从理论上指出地图着色所需最小着色数,但考虑到实际应用中速度因素,只需采用尽可能优化的地图着色方案,本文中对两种实用算法进行了比较和实现。 关键字:四色猜想;地图着色;DFS 引言 “四色猜想”虽然至今尚未得到一个严格的数学证明,但人们似乎已经默认这一著名猜想是对的,即任意一个平图都可以用至多四种不同的颜色对其平面区域进行正常着色。地图着色的应用研究是为了是把相邻的区域用尽可能少的颜色区分开,而不是针对“四色猜想”的问题本身[1]。地图着色实际应用中速度指标和颜色数目指标同样重要,目标是在可容忍时间消耗的基础上采用尽可能少的颜色进行着色[2]。 着色算法 对于平面图的着色问题的研究一直成为研究热点,特别是随着计算机的出现和广泛应用,图的着色理论也有了迅速的发展,其应用日益广泛[3][4]。现在已经成为研究系统工程、管理工程、计算机可续、通讯、网络理论、运筹学等所必须的一种手段[5][6]。,本文从实际应用角度列举的两种算法都是实现基于四色猜想的着色优化,但并不一定是最佳的着色算法。 算法1:根据图G的邻接矩阵,依次按节点序号遍历所有节点,进行着色。先用一种颜色对节点着色,判断矩阵中与该节点相邻的节点的颜色是否相同,如果不同,则继续对其他节点遍历。如果相同,则改用其他颜色尝试,直至与相邻点颜色不同。 算法中核心的颜色赋值和碰撞检测处理步骤如下: For (依次遍历图的所有节点i) {For (依次判断的最大颜色数目,颜色j) {给节点i赋值颜色j; For (序号k小于该节点序号i的节点)

地图着色问题

数据结构实验报告 实验一:地图着色问题 班级:计算机科学与技术1班 姓名学号 完成日期:2015.11.16 一、题目描述 已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少。 二、需求分析 1.已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保 证使用的颜色总数最少; 2.将各省进行编号,然后利用无向图个顶点之间的边来表示各省的相邻关 系; 3.演示程序以用户和计算机的对话方式进行; 4.最后对结果做出简单分析。 三、概要设计 把34个省看成34个顶点,从选定的第一个顶点开始着色,先试第一种颜色,如果这个颜色与这个顶点的其他邻接顶点的颜色不重复,则这个顶点就是用这种颜色,程序开始对下一个顶点着色;如果着色重复,则使用下一种颜色重复上面的操作。着色过程就是一个递归的过程,直到所有的顶点都处理完后结束着色。 结构设计: 因为这个程序是对图的操作,所以程序采用的逻辑结构是图状,存储结构选用邻接表,考虑用邻接表是因为一般的地图的某一个顶点并不会与很多的顶点相邻接,如果用邻接矩阵会浪费很多的存储空间,所以选择邻接表来存储。

其中: typedef struct ArcNode { int x; // 表示与当前顶点所表示省份相邻的省份的位置信息 struct ArcNode *next; // 指向下一个弧结点 }ArcNode; // 表示省份之间相邻关系的弧结点 typedef struct { char *name; // 顶点所表示的省份的名称 int color; // 省份的颜色,用数字表示不同的颜色 ArcNode *firstnext; // 指向第一个弧 }Province[35]; 四、详细设计 该程序一共包含三个模版:分别为初始化模版、着色模版和输出模版。 1.初始化模块 声明表示省份的顶点信息、省份之间相邻关系的弧的信息,并为其赋值。 2.着色模块 // 分别为各个省份着色。 for(i=1;i<=34;i++) { province[i].color=0; } for(i=1;i<=34;i++) { j=1; p=province[i].firstnext; while(p!=NULL) { while(p!=NULL&&j!=province[p->x].color) { p=p->next; } if(p!=NULL) j++; } province[i].color=j; } 3.输出模块 输出各个省份的颜色信息。 for(i=1;i<=34;i++) {

图的染色问题

图的染色问题 应锡娜06990213@https://www.360docs.net/doc/ac10215484.html, (浙江师范大学初阳学院,浙江金华321004) 摘要:本文介绍了图染色问题的提出、应用及意义,主要对已取得的研究成果及当今的研究状况进行了阐述。 关键词:图;染色;色数 一、引言 图染色问题起源于著名的“四色猜想”[1]问题。早在一百多年前的1852年,英国Guthrie提出了用四种颜色就可对任意一张地图进行染色的猜想。即对世界地图或任何一个国家的行政区域地图,最多用四种颜色就可以对其染色,使得凡是相邻的国家或相邻的区域都着以不同的颜色。 二、研究与发展 “四色猜想”提出后,一些数学家着手研究这个猜想,力图给出证明。时隔二十七年后,1879年Kempe给出了“四色猜想”的第一个证明,又过了十一年,1980年Hewood发现Kempe的证明是错误的。但他指出,Kempe的证明方法虽然不能证明“四色猜想”,却可以证明用五种颜色就够了。此后,“四色猜想”一直成为数学家们感兴趣而未能解决的世界数学难题。直到1976年6月美国数学家伊利诺斯大学教授Appel与Haken宣布:他们用计算机证明了“四色猜想”是正确的。因此,从1976年以后,就把“四色猜想”改称为“四色定理”了。[2] 值得指出的是,Appel与Haken的证明,计算机运行了1200个小时。诚然用计算机证明数学难题实在是一个伟大的尝试或创举,但是,世界数学家们仍期待着用常规的数学方法证明“四色定理”。目前仍有许多数学家在潜心研究,寻求常规的证明方法。 地图的特点在于,多个区域位于同一平面上,每个区域可以是毫无规则的各种形状,任意两个区域可以有公共边界,但不能有公共区域。于是人们开始研究所谓“平面图”。人们把地图中的每一个区域称为一个“面”,地图染色就是对“面”染色。进一步研究之后人们把地图中的每个区域的“面”视为一个点,若两个“面”相邻接,即地图中的两个区域有一段或几段公共边界,则在表示这两个区域的点之间连线,该连线可以是直线也可以是任意形状的曲线,并称之为边。如此,就可以把一张地图改画为一个平面上的图,人们把该图称为地图的对偶图。其特点是:所有的点及边均处在同一平面上,并且任意两条边除端点外可以不交叉,人们称这样的图为平面图。例如图1的对偶图如图2所示。

地图着色问题

地图着色问题 说明:任何平面区域图都可以用四种颜色着色,使相邻区域颜色互异。这就是四色定理。 要求给定区域图排出全部可能的四着色方案。 区域相邻关系用矩阵表示,每个区域又一个序号,(从0七连续排列)adj【i】【j勘硎厩 騣,j相邻。数组cilir记录每个区域上着的色,用1.2.3.4表示。 程序应包括四个函数: coloring对所给邻接矩阵找着全部着色方案 色乐的:对区域i在指定的颜色范围内选出可选颜色或报告失败(失败返回-1) 辞令次日卡:判断对区域i在指定的颜色c是否可用 八寸卡:选色失败时或完成一种着色方案时进行回溯 另外可定义output函数,每次输出一种着色方案 /* 递归算法: void Coloring(区域 n) 1. 令颜色集ClrSet={ 没有被区域n的邻居区域使用的颜色 }. 2. 如果ClrSet是空集,返回. 3. 对ClrSet中的每种颜色c,作循环: 3.1 为区域n着色c。 3.2 如果所有区域都已着色(n是最后一个区域),那么显示/保存着色结果. 3.3 否则对下一个尚未着色的区域(n+1),调用Coloring(n+1). 4. 把区域n变为没有着色的区域. -------------------------------------------------------- */ template class CColoring { private: typedef int node_type; typedef int color_type; typedef std::set node_set; typedef std::vector color_array; public: void operator()(const int _Matrix[node_count][node_count]) {

地图着色实训报告

目录 1 课题需求描述 (2) 2 总体功能与数据结构设计 (2) 2.1总体功能结构 (2) 2.2数据结构设计 (3) 3 算法设计和程序设计 (3) 3.1算法设计 (3) 3.1.1回溯法 (3) 3.1.2贪心法 (6) 3.2程序设计 (6) 3.2.1调用回溯法,并判断着色方案是否可行 (6) 3.2.2调用贪心法,对地图进行着色,并测试当前方案是否可行 (8) 3.2.3在着色方案可行的情况下,换一种颜色着色,找出所有可行方案 (9) 3.2.4主菜单的设计 (10) 3.2.5二级菜单的设计 (11) 3.2.6对菜单的使用及对算法用时的计时 (11) 4 调试与测试 (14) 5 设计总结 (17) 5.1收获 (17) 5.2存在问题 (18) 6参考文献 (19)

1 课题需求描述 1.1地图着色问题 设计要求:已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少 地图着色问题是一个抽象的图形学问题,用程序实现对各个区域进行着色,并且相邻省所用的颜色不同,同时保证颜色的总数最少,如何将程序所需要的功能模拟着色在计算机中编程实现。 地图可以抽象为一个图,可以用邻接矩阵来进行模拟:对于每一个地图,我们可以把每一个区看作一个点,而区与区之间的邻接关系看作点与点之间的连线。从而将地图抽象为一个图,然后就可以用邻接矩阵抽象。相应的顶点为0,则表示两点邻接,否则,就不邻接,为1。该程序用两种方法进行着色,分别是回溯法和贪心法。 2 总体功能与数据结构设计 由于中国的省份较多,各省连接关系太多,所以程序只给出简单的测试数据,来测试该程序的功能。程序对给定的程序进行着色,做到最多只用四种颜色进行着色,使得相邻省的颜色不同,并且将所有的着色可能都例举出来了。对于地图得到着色,我用了两种算法,分别是回溯法和贪心法。并且对他们的执行进行计时,比较他们的时间复杂度。 主要叙述:本课题设计的总体功能结构、数据结构设计。 2.1总体功能结构

中国地图四色染色问题

中国地图四色染色问题 一、问题描述 将中国地图用四种不同的颜色红、蓝、绿、黄来染色,要求相邻的省份染色不同,有多少种不同的方案? 二、问题分析 本文将中国地图的34个省、直辖市、自治区、以及特别行政区转化为图论中的图模型。其中每个省、市、自治区、特别行政区用图中的一个结点表示,两个结点间联通仅当两个板块接壤。则问题转化为图论中的染色问题。由于海南、台湾省不与其它任何省份相邻,所以如果除海南、台湾外如果有n种染色方法,那么加上海南和台湾省后,有4*4*n种染色方法。下面考虑除海南和台湾后的32个结点的染色方法。 三、中国地图染色方法 采用分开海南和台湾省的分析方法,一方面的原因是除海南和台湾后的32个结点,可以组成一个联通图,因为海南省和台湾省不和任何其它省份邻接。另一方面,我们建立一个联通图模型后,染色问题可以用深度优先遍历算法DFS,或者广度优先遍历算法BFS来解决,由于该方法的时间复杂度较高,属于暴力法,少考虑两个省份可以减少计算机处理此问题的时间。本文采用DFS算法来解决这个染色问题。 3.1 DFS算法简介 DFS算法是图的一种图的深度遍历算法,即按照往深的地方遍历

一个图,若到一个分支的尽头,则原路返回到最近一个未被遍历的结点,继续深度遍历。 DFS遍历的具体步骤可为下: 1)标记图中所有结点为“未访问”标记。 2)输出起始结点,并标记为“访问”标记 3)起始结点入栈 4)若栈为空,程序结束;若栈不为空,取栈顶元素,若该元素存在未被访问的邻接顶点,则输出一个邻接顶点,并置为“访 问”状态,入栈;否则,该元素退出栈顶。 3.2 染色问题中的DFS算法设计 我们先对任一结点染色,然后用DFS从该结点出发,遍历该图,遍历的下一结点颜色染为与之相邻的结点不同的颜色即可。如果该结点无法染色则回到上一个结点重新染色,直到所有的结点都被染色即可。最后统计染色种数。 染色问题的算法伪代码可以描述如下: color_DFS(当前染色结点): for i in 所有颜色 { while j的已染色邻接点 if 结点j相邻接点被染成i颜色 标记并break if 未被标记 {

基于回溯法的地图着色

基于回溯法的地图着色 XXXXXXXX 摘要:人工智能是20世纪50年代中期兴起的一门边缘学科[1]。人工智能领域中,地图着色问题是一典型的优化的问题。由它引发的“四色猜想”是全世界的难题,直到1975年由三台超高速电子计算机,经过1200小时的计算才终于正明了“四色定理”。这是世界上最长的正明。本文并不是想证明,而只是想基于回溯法来给地图着色,求出最少用色。本文着重介绍利用MFC设计界面来对地图着色进行演示。计算机视觉是研究为完成在复杂的环境中运动和在复杂的场景中识别物体所需要哪些视觉信息,以及如何从图像中获取这些信息的科学领域[2]。 关键词:地图着色;回溯法;MFC 本组成员:XXXXXXXXX 本人分工:本人承担界面设计,edge文档和node文档的编写。 1 引言 人,现在社会的发展中心都离不开这个人字,人是发展的本体,人类的自然智能伴随到处都是,本次实验研究什么是人工智能,人工智能又能如何的运用在生活和学习中。 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能(Artificial Intelligence,AI)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,但没有一个统一的定义。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。 本次实验研究的是关于人工智能中搜索的功能,实现用回溯法对地图不同地区的着色问题,地图上有不同国家(不同区域),每个国家都与其他一些国家邻接。现要求对地图着色,使所有的国家与它的邻接的国家有不同的颜色。通常由四种颜色就已足够。地图着色的算法比较多,但是切实可行的算法很少,回溯法在地图区域较大,邻接关系复杂的情况下,回溯次数将会大大增多,严重影响了程序执行效率。不过本次作业则是采用修改后的回溯法,在一定的条件下,执行效率还是很高。 本次实验是要对中国地图中的省级行政区最多使用四种颜色来进行着色,编程实现回溯算法用于地图自动着色。我要实现的是对中国地图着色的界面设计,我利用VS中的MFC来实现界面设计。 2 算法原理与系统设计 2.1 回溯算法原理 要解决地图着色的问题,本文采用的是回溯法。回溯法是一种系统地搜索问题解的搜索算法。回溯法递归地在解空间中搜索,直至找到所要求的解或解空间中已没有活结点时为止。 而地图着色的问题可以处理为:如果把每一个区域收缩为一个顶点,把相邻两个区域用一条边相连接,就可以把一个区域图抽象为一个平面图。 2.2 详细设计 地图着色功能流程图如下:

数据结构实验报告四-地图染色问题

数据结构 实 验 报 告 实验名称:实验五题目3 地图染色问题 学生姓名:xxx ________________班级:2013211128______________班内序号:xx__________________学号:2013210783______________日期:2014/12/19_____________

1.实验目的 目的: 掌握图基本操作的实现方法 了解最小生成树的思想和相关概念 了解最短路径的思想和相关概念 学习使用图解决实际问题的能力 内容: 对下图所示的地图进行染色,要求使用尽可能少的颜色进行染色,完成该算法。测试数据: 2. 程序分析 2.1 存储结构 二维数组 struct Color {

int Num; int Links; }; 2.2 程序流程 2.3 关键算法分析 算法1:void Arrange(int map[][N],Color a[]) [1] 算法功能:对邻接矩阵的顶点按度进行排序 [2] 算法基本思想:计算每个顶点的度数,然后进行冒泡排序 [3] 算法空间、时间复杂度分析:O(n^2) [4] 代码逻辑 void Arrange(int map[][N],Color a[]) { for (int i=0;i

{ a[i].Num=i; a[i].Links=0; for (int j=0;j

地图四色问题

地图四色问题 《人民日报》发表了一篇中国著名科学家钱学森所撰写的文章:《现代科学技术》。这是一篇出色的文稿,对于了解中国科学技术现代化会往什么方向前进,该文作了不少的披露。数学爱好者都会注意到钱学森在文章中所提的一件事:“去年数学界哄动一时的一件事,是用电子计算机证明了数学上的四色定理。画地图要求相邻两国不用同一色,一幅地图只需要四种颜色。要证明这个定理很难,数学家经过上百年的努力,证明不了。去年美国数学家用电子计算机证明了。他们看到这个问题要证明并不是不可能,而是证明的步骤、程序很复杂,人一辈子的时间也证不完。他们把程序编好,交给高速的电子计算机去干。高速电子计算机也用了一千多个小时才证出来。美国数学家认为,他们的主要贡献不是在证明了四色定理,而在运用电子计算机完成了这件人没有能够完成的事。” “地图四色问题”在钱学森的文章里已经清楚地解释了。你大概会很惊奇,这甚至连懂得拿起彩笔涂鸦的小孩都会发觉到的问题,确是一个数学问题吗? 是的,这是一个数学上著名的难题,许多大数学家曾经尝试想去解决它而不成功,可是这个问题看来又是那么容易明白,好像谁都可以很快解决它似的。

我在这里要介绍这个问题的来源,以及美国数学家解决它的经过。害怕数学的读者不必顾虑,我的解释都很浅白,相信你是会看懂的。 问题的来源 在1852年,英国有一个年青人叫法兰西斯·古特里,他在画英国地图涂颜色时发现:如果相邻两国用不同颜色涂上,地图只需要四种颜色就够了。 他把这发现告诉他念数学的哥哥费特里,并且画了一个图给他看。这个图最少要四种颜色,才能把相邻的两部分分辨,颜色的数目再不能减少。他的哥哥相信弟弟的发现是对的,但是却不能用数学方法加以证明,也解释不出其中的道理。 这年10月23日,费特里拿这个问题向伦敦大学的数学教授奥古斯都·德·摩根请教。德·摩根是当时英国著名的数学家,他也不能马上解释。他于当天写一封信给在三一学院的好朋友威廉·哈密尔顿。他相信像哈密尔顿这样聪明的人——少时就已经会讲八种以上外语,而且数学和物理都很好——是可以帮助他解决这问题的。 在信中,他曾这样写道:“今天我的一个学生要我告诉他一个事实的理由,而我却对于这个是否是事实,现在还是不知道。他说如果在面上画一个图,使两个有共同边缘的区域涂上不同颜色,那么或许四种颜色而不需要更多就足够了。请问难

连通图着色问题

沈阳航空航天大学 课程设计报告 课程设计名称:软件综合课程设计课程设计题目:连通图着色问题 院(系):计算机学院 专业:计算机科学与技术 班级: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)用第二种颜色对尚未着色的点重复第二个步骤,用第三种颜色继续这种

第8节 图论应用实例_图着色问题

预备知识_回溯法 回溯法:在实际生活中,有些问题是不能用数学公式去解决的,它需要通过一个过程,此过程要经过若干个步骤才能完成,每一个步骤又分为若干种可能;同时,为了完成任务,还必须遵守一些规则,但这些规则无法用数学公式表示,对于这样一类问题,一般采用搜索的方法来解决,回溯法就是搜索算法(广度优先、深度优先等)中的一种控制策略,它能够解决许多搜索中问题。 回溯法基本思想:试探法,撞了南墙就回头。(一般采用深度优先搜索策略) 搜索策略:深度优先(不撞南墙不回头)。 在搜索过程中,如果求解失败,则返回搜索步骤中的上一点,去寻找新的路径,以求得答案。要返回搜索,前进中的某些状态必须保存,才能使得退回到某种状态后能继续向前。 白话搜索:如果用数组存放搜索信息,i 表示数组下标(当前状态), ++i 表示往前走(下一个状态),--i 表示回溯(往回退,返回上一次状态)。 第8节 图论应用实例_图着色(graph coloring )问题 数学定义:给定一个无向图G=(V , E ),其中V 为顶点集合,E 为边集合,图着色问题即为将V 分为k 个颜色组(k 为颜色数),每个组形成一个独立集,即其中没有相邻的顶点。其优化版本是希望获得最小的k 值。 典型应用:地图的着色、调度问题等。 k-着色判定问题:给定无向连通图G 和k 种不同的颜色。用这些颜色为图G 的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G 中任意相邻的2 个顶点着不同颜色? 例 四色问题。设有如图1的地图,每个区域代表一个省,区域中的数字表示省的编号,现在要求给每个省涂上红、蓝、黄、白四种颜色之一,同时使相邻的省份以不同的颜色区分。 课外拓展:搜索“四色问题”,了解四色问题相关知识。 图1 问题分析: (1)属于图的搜索问题。将问题简化:将每个省抽象为一个点,省之间的联系看为一条边,可以得到图2。

图的m着色问题

图的m着色问题 #include int color[100]; //int c[100][100]; bool ok(int k ,int c[][100])//判断顶点k的着色是否发生冲突{ int i,j; for(i=1;i=1) { color[k]=color[k]+1; while(color[k]<=m) if (ok(k,c)) break; else color[k]=color[k]+1;//搜索下一个颜色 if(color[k]<=m&&k==n)//求解完毕,输出解 { for(i=1;i<=n;i++) printf("%d ",color[i]); printf("\n"); //return;//return表示之求解其中一种解} else if(color[k]<=m&&k

void main() { int i,j,n,m; int c[100][100];//存储n个顶点的无向图的数组printf("输入顶点数n和着色数m:\n"); scanf("%d %d",&n,&m); printf("输入无向图的邻接矩阵:\n"); for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&c[i][j]); printf("着色所有可能的解:\n"); graphcolor(n,m,c); }

相关文档
最新文档