2017计算机学硕复试真题

用四种颜色给地图着色,要求相邻块颜色不同,图用邻接矩阵存储,求所有着色方案。

思路:

(草稿)

递归,如用下图,做出邻接矩阵:

map[N][N] = {   0,1,1,0,1,
1,0,1,0,1,
1,1,0,1,0,
0,0,1,0,1,

1,1,0,1,0  }

inputColor(int n,int *color,int col,int sign)是一个递归函数,其中

n表示给第n个点着色 ,col=1表示已经着色,col=0表示未着色 ,sign=0表示未验证,sign=1表示已验证且可行

有以下三种情况:col    sign
   0       0//未着色 ,则着色
   1       0//已着色但未验证

1       1//着色且此色可用

故在函数中分三种情况判断:

1、if(col == 0)  //未着色

那么将每一种颜色(颜色用1,2,3,4表示)赋给color[n],并调用递归inputColor(n,color,1,0) 去验证着此色是否可行

2、if(col==1 && sign==0) //已着色但未验证

那么验证此位用此色是否行得通,验证方法:在邻接矩阵中找到与此点相邻的点,若这些点的颜色不相邻,则

inputColor(n,color,1,1)//此色可用,sign置为1,若此色不可行,则不作处理,也就不会再有任何操作,也无法打印

3、if(col==1 && sign==1) //着色且此色可用

那么,判断一下此时的n是否是最后一位,若是最后一位即n==N-1,则表示所有位都成功赋予一个颜色,故打印输出

若n<N-1,则去进行处理下一位,inputColor(n+1,color,0,0),当然,下一位的col和sign都是0,回到第一种情况继续处理这一位。

=========================================================================

故如此递归,可以找出所有的着色方案。

代码如下:

#include<stdio.h>
#define N 5
int map[N][N] = {0,1,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1,0};//五个点,七条边的图,邻接矩阵表示
int main(){void inputColor(int n,int *color,int col,int sign);int color[5]={0};inputColor(0,color,0,0);return 0;
}
/**给第n个点着色 ,col=1表示已经着色,col=0表示未着色 ,sign=0表示未验证,sign=1表示已验证且可行 **/
/*有以下三种情况:col    sign0       0//未着色 ,则着色1       0//已着色但未验证1       1//着色且此色可用当n=N-1,即最后一位时,若此时col==1,sign==1,则可打印输出*/
void inputColor(int n,int *color,int col,int sign){int i;for(i=n+1;i<N;i++)//消除之前着色的痕迹color[i] = 0;if(col == 0){//未着色 ,则着色for(i=1;i<=4;i++){//颜色1-4color[n] = i;
//            printf("测试:");
//            for(int p = 0;p < N;p++)
//                printf("%d\t",color[p]);
//            printf("测试\n");inputColor(n,color,1,0);//验证着此色是否可行}}else if(col==1 && sign==0){//已着色但未验证 ,则验证此位for(i=0;i<N;i++)if(map[n][i]==1 && color[n]==color[i])return;inputColor(n,color,1,1);//此色可用,sign置为1}else if(col==1 && sign==1){//着色且此色可用if(n<N-1)//进行下一位inputColor(n+1,color,0,0);else if(n==N-1){//若此位是最后一位,则打印输出for(i=0;i<N;i++)printf("%d\t",color[i]);printf("\n");}}}

运行结果:

(部分展示)

全部展示:

1    2   3   1   3
1   2   3   1   4
1   2   3   2   3
1   2   3   2   4
1   2   3   4   3
1   2   4   1   3
1   2   4   1   4
1   2   4   2   3
1   2   4   2   4
1   2   4   3   4
1   3   2   1   2
1   3   2   1   4
1   3   2   3   2
1   3   2   3   4
1   3   2   4   2
1   3   4   1   2
1   3   4   1   4
1   3   4   2   4
1   3   4   3   2
1   3   4   3   4
1   4   2   1   2
1   4   2   1   3
1   4   2   3   2
1   4   2   4   2
1   4   2   4   3
1   4   3   1   2
1   4   3   1   3
1   4   3   2   3
1   4   3   4   2
1   4   3   4   3
2   1   3   1   3
2   1   3   1   4
2   1   3   2   3
2   1   3   2   4
2   1   3   4   3
2   1   4   1   3
2   1   4   1   4
2   1   4   2   3
2   1   4   2   4
2   1   4   3   4
2   3   1   2   1
2   3   1   2   4
2   3   1   3   1
2   3   1   3   4
2   3   1   4   1
2   3   4   1   4
2   3   4   2   1
2   3   4   2   4
2   3   4   3   1
2   3   4   3   4
2   4   1   2   1
2   4   1   2   3
2   4   1   3   1
2   4   1   4   1
2   4   1   4   3
2   4   3   1   3
2   4   3   2   1
2   4   3   2   3
2   4   3   4   1
2   4   3   4   3
3   1   2   1   2
3   1   2   1   4
3   1   2   3   2
3   1   2   3   4
3   1   2   4   2
3   1   4   1   2
3   1   4   1   4
3   1   4   2   4
3   1   4   3   2
3   1   4   3   4
3   2   1   2   1
3   2   1   2   4
3   2   1   3   1
3   2   1   3   4
3   2   1   4   1
3   2   4   1   4
3   2   4   2   1
3   2   4   2   4
3   2   4   3   1
3   2   4   3   4
3   4   1   2   1
3   4   1   3   1
3   4   1   3   2
3   4   1   4   1
3   4   1   4   2
3   4   2   1   2
3   4   2   3   1
3   4   2   3   2
3   4   2   4   1
3   4   2   4   2
4   1   2   1   2
4   1   2   1   3
4   1   2   3   2
4   1   2   4   2
4   1   2   4   3
4   1   3   1   2
4   1   3   1   3
4   1   3   2   3
4   1   3   4   2
4   1   3   4   3
4   2   1   2   1
4   2   1   2   3
4   2   1   3   1
4   2   1   4   1
4   2   1   4   3
4   2   3   1   3
4   2   3   2   1
4   2   3   2   3
4   2   3   4   1
4   2   3   4   3
4   3   1   2   1
4   3   1   3   1
4   3   1   3   2
4   3   1   4   1
4   3   1   4   2
4   3   2   1   2
4   3   2   3   1
4   3   2   3   2
4   3   2   4   1
4   3   2   4   2
Program ended with exit code: 0

随机挑选4种方案进行验证:

图的四色着色(C语言)相关推荐

  1. java 地图四色着色算法_趣味地图系列之6 四色定理之我见

    四色定理(four color map theorem)是一个著名的数学定理[1],即对任意的(平面上的)地图染色,要求相邻的国家颜色不同,四种颜色即可完成着色. 南非数学家法兰西斯·古德里在1852 ...

  2. 四色着色问题 c语言编程,数据结构-图着色问题

    7-38 图着色问题 (25 分) 图着色问题是一个著名的NP完全问题.给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要 ...

  3. java 地图四色着色算法_继陈景润之后周立敬攻破世界三大数学难题之一:地图四色难题...

    地图四色问题又称四色猜想,与哥德巴赫猜想.费马猜想一起并称为为世界三大数学猜想.世界三大数学难题. 1965年5月,陈景润发表论文<大偶数表示一个素数及一个不超过2个素数的乘积之和>,最接 ...

  4. java 地图四色着色算法_四色定理的简单证明:从四色猜想到四域公理

    摘要 "四色猜想"也称"四色定理",一直以来都没有一种简捷明快的证明方法,然而,本文认为"四色猜想"可以作为一个平面区域相邻关系的" ...

  5. 四色着色问题 c语言编程,四色问题C语言怎么解决

    思路:建立数据结构,录入数据内容,遍历着色,输出第一个可行的着色方案. 下面就四个方面详细分析一下 首先分析数据结构: 对于地图,一个区块包含一个唯一编号数据(这个编号可以是地名,也可以是数字)用来区 ...

  6. 地图四色着图的C语言实现

    四色问题又称四色猜想.四色定理,是世界三大数学猜想之一.四色定理是一个著名的数学定理,通俗的说法是:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接的区域颜色相同.1976年借助电子计算机证明了 ...

  7. c语言电子地图程序,地图四色着图的C语言实现

    四色问题又称四色猜想.四色定理,是世界三大数学猜想之一.四色定理是一个著名的数学定理,通俗的说法是:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接的区域颜色相同.1976年借助电子计算机证明了 ...

  8. Python实现地图四色原理的遗传算法(GA)着色实现

    1 任务需求   首先,我们来明确一下本文所需实现的需求.   现有一个由多个小图斑组成的矢量图层,如下图所示:我们需要找到一种由4种颜色组成的配色方案,对该矢量图层各图斑进行着色,使得各相邻小图斑间 ...

  9. 索骥馆-编程语言之《程序语言的奥妙:算法解读(四色全彩)》扫描版[PDF]

    内容简介: 在我们生活的世界中,各种各样形形色色的事物和现象,其中都必定包含着科学的成分.在这些成分中,有些是你所熟知的,有些是你未知的,有些是你还一知半解的.面对未知的世界,好奇的你是不是有很多疑惑 ...

最新文章

  1. 计算机操作记录怎么删除,win7系统如何清除电脑使用记录
  2. 用CComPtr吧,COM接口指针很危险
  3. 配置修改Nginx支持 PATHINFO
  4. 2.2 LayoutInflater 加载布局文件源码
  5. FreeBSD下MongoDB数据库的安装
  6. log4j.xml按照日期生成_荐读 | 进项发票快速生成凭证!这个功能太方便了!
  7. 用setuna截图时自动放大_setuna截图软件下载
  8. python基于django的高校教师科研成果管理系统
  9. [混音插件]板岩混响效果器
  10. 东方通TongWeb部署应用中文件不下载而在页面打开
  11. HTTP协议格式详解(总结)
  12. oracle18c 配置,0报错!Oracle 18C 完全安装指南及常见问题汇总
  13. 麦克风测试软件 ios,iOS开发麦克风权限判断
  14. 【复杂网络建模】——Python可视化重要节点识别(PageRank算法)
  15. 华益血糖信息管理系统服务器,华益精点推出新一代智能血糖仪
  16. 【项目】danmu punish启动
  17. RTX SDK Refrence RTXSDK教程之入门篇
  18. angular之RXJS
  19. Typora自定义精美主题
  20. layuit 框架_layui前端框架

热门文章

  1. ROS多工作空间覆盖
  2. 十大最值得关注的国内大数据分析厂商
  3. php网页画线,HTML5 canvas基本绘图之绘制线条
  4. oracle修改scott密码和解锁
  5. 根据verilog代码画电路图
  6. 毫米与像素之间的转换
  7. c语言编程数字字母排列组合,如何编程实现排列组合
  8. 解决在Win7旗舰版下的安装问题
  9. 华硕服务器怎么装win7系统教程视频,演示华硕原版win7旗舰版安装教程
  10. 北大图灵班对比清华计算机系,清华姚班闻名国内,却不知道北大有“图灵班”,实力不输清华...