五颜六色的七巧板:

我们能不能用不超过4种的颜色对七巧板着色而使得相邻带板块颜色不同?

这里不是share图论的文章,所以图的着色、四色定理等就不提了。
直接摆结论:对任意平面图至少存在一种4种涂色方案。

编程求解过程用到了回溯法
在某个顶点处涂所有颜色都与前面已涂色发生冲突,则进行回溯,返回上一个顶点试探下一种颜色。

Note:数组元素 color[i]=1 即表示对应i顶点的颜色是1

下面是代码实现:

public class Puzzle {private static final int BOARD_NUMBER = 7;//定义七巧板private char[] board = new char[BOARD_NUMBER];private int[][] edge = new int[BOARD_NUMBER][BOARD_NUMBER];//初始化所有顶点均涂色0private int[] color = new int[BOARD_NUMBER];public Puzzle(char[] board, int[][] edge) {this.board = board;this.edge = edge;}public void colour() {int vertex = 0;while (vertex < BOARD_NUMBER) {int flag = 1;color[vertex]++;if (color[vertex] > 4) {color[vertex] = 0;vertex--;continue;}for (int adjVertex = 0; adjVertex < vertex; adjVertex++) {if (edge[vertex][adjVertex] == 1 && color[vertex] == color[adjVertex]) {flag = 0;break;}}if (flag == 0) {continue;}vertex++;}for (int i = 0; i < BOARD_NUMBER; i++) {System.out.println(board[i] + "涂色为:" + color[i]);}}public static void main(String[] args) {char[] board = new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G'};int[][] edge = new int[][] {{0, 1, 0, 0, 1, 1, 0}, {1, 0, 1, 1, 0, 0, 0},{0, 1, 0, 1, 0, 0, 0}, {0, 1, 1, 0, 1, 0, 1},{1, 0, 0, 1, 0, 1, 1}, {1, 0, 0, 0, 1, 0, 0},{0, 0, 0, 1, 1, 0, 0}};Puzzle p = new Puzzle(board, edge);p.colour();}}

这次没有编写单独的测试类,直接在Puzzle类里面写了main方法进行测试。
运行结果:

A涂色为:1
B涂色为:2
C涂色为:1
D涂色为:3
E涂色为:2
F涂色为:3
G涂色为:1

可见,确实4色可解,而且是3色即可解(本问题比起地图着色等复杂着色问题还是简单太多了)。
只要我们稍加修饰,就可以把涂色的1、2、3、4替换成具体颜色,那样也许更直接一些。

【Java】七巧板着色问题相关推荐

  1. 【算法分析与设计】回溯算法解决七巧板着色问题

    文章目录 四色定理 七巧板 功能需求 程序设计 编程实现 四色定理 四色定理是一种关于地图着色的定理,指出任何平面地图都可以只用四种颜色进行着色,使得相邻的区域颜色不同. 简单来说,这个定理表明,如果 ...

  2. java 七巧板油漆问题_七巧板的问题

    七巧板的实现 var tangram = [ {p:[{x:0,y:0},{x:800,y:0},{x:400,y:400}],color:"#caff67"}, {p:[{x:0 ...

  3. java 七巧板油漆问题_《七巧板中的分数问题》评课稿

    <七巧板中的分数问题>评课稿 <七巧板中的分数问题>一课是李老师在2018年全国小学数学(人教版)核心素养示范课观摩交流会上呈现的课例. 本课选取的教材内容是人教版五年级下册第 ...

  4. java 七巧板油漆问题_七巧板颜色填充的问题?

    我写了代码但是颜色总是填充不上是什么原因呢? var tangram=[ {p:[{x:0,y:0},{x:600,y:0},{x:300,y:300}],color:"#CEFE68&qu ...

  5. java实现七巧板问题_[Java教程]canvas,绘制七巧板

    [Java教程]canvas,绘制七巧板 0 2016-11-03 13:00:04 //定义一个数组变量,分别代表七巧板的七块 //每一部分是一个类的对象,每一部分包含一个p, //p也是一个数组, ...

  6. (Java实现) 图的m着色问题

    图的m着色问题 [问题描述] 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的m着色问 ...

  7. java 着色问题 回溯算法,C语言使用回溯法解旅行售货员问题与图的m着色问题

    旅行售货员问题 1.问题描述: 旅行售货员问题又称TSP问题,问题如下:某售货员要到若干个城市推销商品,已知各城市之间的路程(或旅费),他要选定一条从驻地出发,经过每个城市一遍最后回到驻地的路线,使总 ...

  8. 着色问题求解java 图形化_练习 - 实现 Grover 算法以解决图形着色问题

    练习 - 实现 Grover 算法以解决图形着色问题 40 分钟 在本模块中,最后将以端到端的方式实现 Grover 搜索算法:从图形着色问题的黑盒定义到处理算法的随机性质的逻辑. 备注 出于必要,本 ...

  9. 图的m色着色问题 回溯法(算法设计与分析)Java

    package demo1;public class Coloring {static int m;//颜色的数量static int[] x;//可行解static int n;//图的顶点个数st ...

最新文章

  1. 逐飞科技对于STC8H1K系列的单片机正交解码的资料以及实验
  2. 【Trie】bzoj1212 [HNOI2004]L语言
  3. 让乔布斯立足肩上的C语言之父
  4. 安卓手机突然很卡_你的安卓手机越来越卡?教你4招轻松解决问题!
  5. 本地yum仓库以及网络版yum的私有仓库详细的安装配置
  6. 信息学奥赛一本通 1078:求分数序列和 | OpenJudge NOI 1.5 32
  7. 4核处理器_买电脑选4核、6核还是8核,从业是十年的专家终于讲清楚了差异
  8. ffmpeg软硬件解码基础(总目录)
  9. 感谢你遇到的问题(2)
  10. 苹果有益让老iPhone变慢以迫使消费者购买新一代的iPhone?
  11. 计算机蓝屏代码大全,电脑蓝屏代码大全 菜鸟必看
  12. 八大排序算法(原理+代码详解)Python版
  13. 解决cnzz加载时间长的问题
  14. RocketMQ产线Broker Busy问题排查经过
  15. 程序设计基础-SDUT-实验3-while循环
  16. ROS学习笔记(2)——ROS通信机制
  17. 剑芒罗曼史2解图片程序
  18. 神经同步预测儿童学习新单词的能力
  19. 时刻牢记基础是关键,万丈高楼平地起靠的是什么?是坚实牢固的地基!
  20. linux awk判断字符串开头,Linux文件比较三剑客(awk/grep/sed)之awk

热门文章

  1. 使用密钥登录CentOS系统(基于密钥的认证)
  2. BZOJ 2763: [JLOI2011]飞行路线 spfa dp
  3. DML数据操作语言练习
  4. Hungary(匈牙利算法)——二分图最大匹配
  5. 在Linux下开发多语言软件: Hello GetText!
  6. 论windows + asp.net性能
  7. qsort的7种用法(转)
  8. 蓝桥杯第八届省赛JAVA真题----包子凑数
  9. linux命令——crontab的使用方法
  10. ElasticSearch Java SpringBoot根据时间范围分组求和