【Java】七巧板着色问题
五颜六色的七巧板:
我们能不能用不超过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】七巧板着色问题相关推荐
- 【算法分析与设计】回溯算法解决七巧板着色问题
文章目录 四色定理 七巧板 功能需求 程序设计 编程实现 四色定理 四色定理是一种关于地图着色的定理,指出任何平面地图都可以只用四种颜色进行着色,使得相邻的区域颜色不同. 简单来说,这个定理表明,如果 ...
- java 七巧板油漆问题_七巧板的问题
七巧板的实现 var tangram = [ {p:[{x:0,y:0},{x:800,y:0},{x:400,y:400}],color:"#caff67"}, {p:[{x:0 ...
- java 七巧板油漆问题_《七巧板中的分数问题》评课稿
<七巧板中的分数问题>评课稿 <七巧板中的分数问题>一课是李老师在2018年全国小学数学(人教版)核心素养示范课观摩交流会上呈现的课例. 本课选取的教材内容是人教版五年级下册第 ...
- java 七巧板油漆问题_七巧板颜色填充的问题?
我写了代码但是颜色总是填充不上是什么原因呢? var tangram=[ {p:[{x:0,y:0},{x:600,y:0},{x:300,y:300}],color:"#CEFE68&qu ...
- java实现七巧板问题_[Java教程]canvas,绘制七巧板
[Java教程]canvas,绘制七巧板 0 2016-11-03 13:00:04 //定义一个数组变量,分别代表七巧板的七块 //每一部分是一个类的对象,每一部分包含一个p, //p也是一个数组, ...
- (Java实现) 图的m着色问题
图的m着色问题 [问题描述] 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的m着色问 ...
- java 着色问题 回溯算法,C语言使用回溯法解旅行售货员问题与图的m着色问题
旅行售货员问题 1.问题描述: 旅行售货员问题又称TSP问题,问题如下:某售货员要到若干个城市推销商品,已知各城市之间的路程(或旅费),他要选定一条从驻地出发,经过每个城市一遍最后回到驻地的路线,使总 ...
- 着色问题求解java 图形化_练习 - 实现 Grover 算法以解决图形着色问题
练习 - 实现 Grover 算法以解决图形着色问题 40 分钟 在本模块中,最后将以端到端的方式实现 Grover 搜索算法:从图形着色问题的黑盒定义到处理算法的随机性质的逻辑. 备注 出于必要,本 ...
- 图的m色着色问题 回溯法(算法设计与分析)Java
package demo1;public class Coloring {static int m;//颜色的数量static int[] x;//可行解static int n;//图的顶点个数st ...
最新文章
- 逐飞科技对于STC8H1K系列的单片机正交解码的资料以及实验
- 【Trie】bzoj1212 [HNOI2004]L语言
- 让乔布斯立足肩上的C语言之父
- 安卓手机突然很卡_你的安卓手机越来越卡?教你4招轻松解决问题!
- 本地yum仓库以及网络版yum的私有仓库详细的安装配置
- 信息学奥赛一本通 1078:求分数序列和 | OpenJudge NOI 1.5 32
- 4核处理器_买电脑选4核、6核还是8核,从业是十年的专家终于讲清楚了差异
- ffmpeg软硬件解码基础(总目录)
- 感谢你遇到的问题(2)
- 苹果有益让老iPhone变慢以迫使消费者购买新一代的iPhone?
- 计算机蓝屏代码大全,电脑蓝屏代码大全 菜鸟必看
- 八大排序算法(原理+代码详解)Python版
- 解决cnzz加载时间长的问题
- RocketMQ产线Broker Busy问题排查经过
- 程序设计基础-SDUT-实验3-while循环
- ROS学习笔记(2)——ROS通信机制
- 剑芒罗曼史2解图片程序
- 神经同步预测儿童学习新单词的能力
- 时刻牢记基础是关键,万丈高楼平地起靠的是什么?是坚实牢固的地基!
- linux awk判断字符串开头,Linux文件比较三剑客(awk/grep/sed)之awk