分治算法: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 ...
随机推荐
- 手写系列-实现一个铂金段位的 React
一.前言 本文基于 https://pomb.us/build-your-own-react/ 实现简单版 React. 本文学习思路来自 卡颂-b站-React源码,你在第几层. 模拟的版本为 Re ...
- yaml 文件解析
前言 yaml文件其实也是一种配置文件类型,相比较ini,conf配置文件来说,更加的简洁,操作也更加简单,同时可以存放不同类型的数据,不会改变原有数据类型,所有的数据类型在读取时都会原样输出,yam ...
- Python自动化测试面试题-Python基础篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- tomcat与springmvc 结合 之---第16篇 servlet如何解析成员变量和DispatcherServlet如何解析
writedby 张艳涛,用了两个星期将深入刨析tomcat看完了,那么接下来该看什么呢?真是不知道,知识这东西上一个月看的jvm,锁.多线程并发 又都忘了.... tomcat学完,我打算看spri ...
- vscode源代码管理(vscode报错 未找到Git,请安装Git,或在"git.path" 设置中配置)
vscode源代码管理(vscode报错 未找到Git,请安装Git,或在"git.path" 设置中配置) 直接上图,电脑上已经安装git,由于vscode没有找到git,所以v ...
- 初探Node-red结合阿里云数据库,定时显示数据
在最近的项目中,隔壁项目组推荐了一个很好的基于node.js开源IOT框架Node-Red,它的优点很明显,使用可视化编程的方式,实现了大部分需要在物联网领域的技术,而且能很好的对接各个云平台,快捷部 ...
- 卷积的等变性(equivariant) / 不变性(invariant)
不变性:输入x发生变换,但是F之后的输出不变 \(F(x)=F [\)transform\((x)]\) 池化:近似不变性,当图像发生微小变化,最大池化的输出不变,还是一个池化范围内的max 等变性: ...
- 题解 P6688 可重集
己所欲者,杀而夺之,亦同天赐 解题思路 一定不要用自动溢出的 Hash!!!!!!! 我真的是调吐了... 思路非常简单明了 : 需要我们创新一下 Hash. 首先我们的 Hash 要满足无序性.. ...
- requests 上件中文文件名报错解决方案
这几天在用wxpy写机器人,在调用里面的上传文件接口的时候,一直报错.经过排查后,发现是不支持中文文件名:在群里问了下作者后才知道是requests惹的祸,默认requests用的是unicode来处 ...
- OI卷题记录
2021.8.2 LG3386 匈牙利算法 二分图 LG1377 笛卡尔树 题解 2021.8.3 LG2962 \(\text{Meet in middle}\) LG3389 高斯消元 高斯-约旦 ...