分治算法:Tromino谜题,L型覆盖
1 public class Tromino {
2
3 static int num = 2;
4 //x 对应 第二维
5 //y 对应 第一维
6 static int[][] panel = {
7 {0,0,0,0,0,0,0,0},
8 {0,0,0,0,0,0,0,0},
9 {0,0,0,0,0,0,1,0},
10 {0,0,0,0,0,0,0,0},
11 {0,0,0,0,0,0,0,0},
12 {0,0,0,0,0,0,0,0},
13 {0,0,0,0,0,0,0,0},
14 {0,0,0,0,0,0,0,0}
15 };
16 /*static int[][] panel ={
17 {0,0},{0,1}
18 };*/
19 /*
20 * 棋盘大小 2^n * 2^n
21 * 缺失方块的位置 (x, y)
22 * 棋盘的开始位置x0, y0
23 */
24 public static void cover(int x0, int y0, int x, int y, int size){
25 int cx = x0 + size / 2 - 1;
26 int cy = y0 + size / 2 - 1;
27 if(size == 2){
28 if(x0 == x && y0 == y){//左上
29 panel[y0][x0+1] = num;
30 panel[y0+1][x0+1] = num;
31 panel[y0+1][x0] = num;
32 num++;
33 }
34 if(x0+1 == x && y == y0){//右上
35 panel[y0][x0] = num;
36 panel[y0+1][x0+1] = num;
37 panel[y0+1][x0] = num;
38 num++;
39 }
40 if(x0 == x && y == y0 + 1){//左下
41 panel[y0][x0] = num;
42 panel[y0+1][x0+1] = num;
43 panel[y0][x0+1] = num;
44 num++;
45 }
46 if(x0+1 == x && y == y0 + 1){//右下
47 panel[y0][x0] = num;
48 panel[y0][x0+1] = num;
49 panel[y0+1][x0] = num;
50 num++;
51 }
52 print();
53 return;
54 }
55
56 if( x <= cx && y <= cy){
57 //左上
58 panel[cy][cx+1] = num;
59 panel[cy+1][cx] = num;
60 panel[cy+1][cx+1] = num;
61 num++;
62 print();
63 cover(x0, y0, x, y, size/2);//递归左上
64 cover(cx+1, y0, cx+1, cy, size/2);//递归右上
65 cover(x0, cy+1, cx, cy+1, size/2);//递归左下
66 cover(cx+1, cy+1, cx+1, cy+1, size/2);//递归右下
67 }
68 if( x > cx && y > cy){
69 //右下
70 panel[cy][cx] = num;
71 panel[cy+1][cx] = num;
72 panel[cy][cx+1] = num;
73 num++;
74 print();
75 cover(x0, y0, cx, cy, size/2);//递归左上
76 cover(cx+1, y0, cx+1, cy, size/2);//递归右上
77 cover(x0, cy+1, cx, cy+1, size/2);//递归左下
78 cover(cx+1, cy+1, x, y, size/2);//递归右下
79 }
80 if( x > cx && y <= cy){
81 //右上
82 panel[cy][cx] = num;
83 panel[cy+1][cx] = num;
84 panel[cy+1][cx+1] = num;
85 num++;
86 print();
87 cover(x0, y0, cx, cy, size/2);//递归左上
88 cover(cx+1, y0, x, y, size/2);//递归右上
89 cover(x0, cy+1, cx, cy+1, size/2);//递归左下
90 cover(cx+1, cy+1, cx+1, cy+1, size/2);//递归右下
91 }
92 if( x <= cx && y > cy){
93 //左下
94 panel[cy][cx] = num;
95 panel[cy][cx+1] = num;
96 panel[cy+1][cx+1] = num;
97 num++;
98 print();
99 cover(x0, y0, cx, cy, size/2);//递归左上
100 cover(cx+1, y0, cx+1, cy, size/2);//递归右上
101 cover(x0, cy+1, x, y, size/2);//递归左下
102 cover(cx+1, cy+1, cx+1, cy+1, size/2);//递归右下
103 }
104 }
105 public static void print(){
106 for(int i = 0; i < panel.length; i++){
107 for(int j = 0; j < panel[i].length; j++){
108 System.out.printf("%3d", panel[i][j]);
109 }
110 System.out.println();
111 }
112 System.out.println();
113 }
114 public static void main(String[] args) {
115 cover(0, 0, 6, 2, 8);
116 //cover(0, 0, 1, 0, 2);
117 print();
118 }
119 }
分治算法:Tromino谜题,L型覆盖的更多相关文章
- js算法:分治法-棋盘覆盖
在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其他方格不同.则称该方格为一特殊方格,称该棋盘为一特殊棋盘.显然特殊方格在棋盘上出现的位置有 4^k 种情形.因而对不论什么 k> ...
- UVA 10245 The Closest Pair Problem 最近点问题 分治算法
题意,给出n个点的坐标,找出两点间最近的距离,如果小于10000就输出INFINITY. 纯暴力是会超时的,所以得另辟蹊径,用分治算法. 递归思路将点按坐标排序后,分成两块处理,最近的距离不是在两块中 ...
- 【年终分享】彩票数据预测算法(一):离散型马尔可夫链模型实现【附C#代码】
原文:[年终分享]彩票数据预测算法(一):离散型马尔可夫链模型实现[附C#代码] 前言:彩票是一个坑,千万不要往里面跳.任何预测彩票的方法都不可能100%,都只能说比你盲目去买要多那么一些机会而已. ...
- 剑指Offer——分治算法
剑指Offer--分治算法 基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更 ...
- 算法准备-分治算法解决第k位数的线性查找
由作业士兵排队问题引出的 在一个划分成网格的操场上,n个士兵散乱地站在网格点上.网格点由整数最表(x,y)表示.士兵可以沿着网格边上.下.左.右移动一步,但在同一时刻一个网格上只能有一名士兵.按照军官 ...
- 算法(Java实现)—— 分治算法
分治算法 分治算法的设计模式 基本思想 把复杂问题分解成若干互相独立容易求解的子问题 经典问题 二分搜索 大整数乘法 棋盘覆盖 合并排序 快速排序 线性时间选择 最接近点对问题 循环赛日程表 汉诺塔 ...
- 从两个平方算法到分治算法-java
先来看看问题的来源,假设有这么一个数组: 1 2 -5 4 -2 3 -3 4 -15 我们要求出其中连续字数组的和的最大值 例如这么可以很明显看出 4+ –2 + 3 + –3 + 4 = 6 所有 ...
- 计算几何 平面最近点对 nlogn分治算法 求平面中距离最近的两点
平面最近点对,即平面中距离最近的两点 分治算法: int SOLVE(int left,int right)//求解点集中区间[left,right]中的最近点对 { double ans; //an ...
- 敏捷开发松结对编程系列:L型代码结构案例StatusFiltersDropdownList(中)
这是松结对编程的第22篇(专栏目录). 接前文 业务代码 比较长,基本上就是看被注释隔开的三大段,先显示状态群筛选链接,然后是单个状态筛选,然后是显示下拉框的当前选中项,最后显示下拉框. public ...
随机推荐
- java网络编程基础——基本网络支持
基本网络支持 java.net包主要为网络编程提供支持. 1.InetAddress InetAddress类代表IP地址,还有两个子类:Inet4Address.Inet6Address. pack ...
- debian 9 pycharm安装
官网下载PyCharm的tar.gz格式 使用命令进行解压:tar -xvzf pycharm.tar.gz 解压后将pycharm文件夹移动到/usr/local/lib/目录下 进入pycharm ...
- SpringBoot自动装配-Condition
1. 简介 @Conditional注解在Spring4.0中引入,其主要作用就是判断条件是否满足,从而决定是否初始化并向容器注册Bean. 2. 定义 2.1 @Conditional @Condi ...
- 用Python预测双色球福利彩票中奖号码(请不要当真)
前言 双色球是中国福利彩票的一种玩法. 红球一共6组,每组从1-33中抽取一个,六个互相不重复.然后蓝球是从1-16中抽取一个数字,这整个组成的双色球 python从零基础入门到实战 今天,我们就用P ...
- badboy如何录制jmetet脚本
网盘下载: https://pan.baidu.com/s/1mTOEeE47tmk29_wndID3iw 傻瓜式安装即可, 内附教程 1. 打开Badboy, 新建一个文件 2. 输入要录制的网址 ...
- SpringSecurity:简单入门
SpringSecurity能做什么 SpringSecurity是一个安全框架,使用它可以让我们的系统变得安全一点,它可以对登陆系统的用户进行验证和授权 一个安全的系统需要做的事情很多,比如:防SQ ...
- Visio操作【未完】
Visio 1.如何操作文档 新建基本框图和空白框图 单击基本框图打开后有模具 空白框图打开之后并没有形状 左下角发现有 更改纸张方向大小 自动调整大小: 如果我们选择形状进入到我们的页面,如果放到边 ...
- thunderbird发送纯文本邮件
向邮件列表中发邮件时,要求邮件格式必须是纯文本格式的,在thunderbird中,邮件格式(plain text或者html格式)在[工具->账户设置->[账户名称]->通讯录]下的 ...
- Reuse Sonar Checkstyle Violation Report for Custom Data Analysis
Write a violation rules file; Import it into Sonar as a Quality Profile named as "MyRules" ...
- SpringMVC学习01(什么是SpringMVC)
1.什么是SpringMVC 1.1 回顾MVC 1.1.1 什么是MVC MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. 是将业务逻辑.数据 ...