java实现Tromino谜题
来源:互联网 发布:淘宝上怎么免费开店 编辑:程序博客网 时间:2024/06/06 01:26
Tromino是一个由期盼上的三个邻接方块组成的L型瓦片。我们的问题是,如何用Tromino覆盖少了一个方块(可以在棋盘上的任何位置)的2^2n*2^2n棋盘,除了这个缺失的方块,Tromino应该覆盖棋盘上的所有方块。而且不能有重叠。
这题基本思路是分治法,将问题化为多个相同规模的更小问题,可将原题目区域四等分,然后将3个没有缺方块的区域用L型瓦片覆盖,以产生4个相同的缺一方块棋盘。直至产生2*2方块,即可
import java.util.Scanner;/** * Tromino谜题,在(2^n)*(2^n)格内,有一个已经涂了的格子 * 现需用3个格子填满改表格,该图形为L型,并且不能重叠 * */public class Tromino {static int t = 0;static int[][] blo;static int randx =-1;static int randy =-1;public static void main(String[] args) {System.out.print("请输入数量n,生成的格子为:(2^n)*(2^n)格:");@SuppressWarnings("resource")Scanner in = new Scanner(System.in);int n = in.nextInt();int len = (int) Math.pow(2, n);blo = new int[len][len];for(int i=0; i<blo.length; i++){for(int j = 0; j<blo[i].length; j++){blo[i][j]=-1;}}//生成随机的初始位置randx = (int) (Math.random()*len);randy = (int) (Math.random()*len);blo[randx][randy] = 0;show(blo);handle(0,0,len);String ans;do{System.out.println("输入ans将会显示答案:");ans = in.next();}while (!ans.equals("ans") );System.out.println("=============ans=============");show(blo);}//展示格子public static void show(int[][] a){for(int i=0; i<a.length; i++){for(int j = 0; j<a[i].length; j++){System.out.print(a[i][j]+"\t");}System.out.println("\n");}}public static void handle(int x,int y,int l){int cutl = l/2;if(cutl>=1){t++;if(check(x,y,cutl)){blo[cutl-1+x][cutl-1+y] = t;}if(check(x,y+cutl,cutl)){blo[cutl-1+x][cutl+y] = t;}if(check(x+cutl,y,cutl)){blo[cutl+x][cutl-1+y] = t;}if(check(x+cutl,y+cutl,cutl)){blo[cutl+x][cutl+y] = t;}handle(x,y,cutl);handle(x,y+cutl,cutl);handle(x+cutl,y,cutl);handle(cutl+x,cutl+y,cutl);}}//判断区域内数字是否全是-1public static boolean check(int x,int y,int l){boolean q = true;out:for(int i=x; i<x+l; i++){for(int j = y; j<y+l; j++){if(blo[i][j]!=-1){q=false;break out;}}}return q;}}
0 0
- java实现Tromino谜题
- tromino谜题C++实现
- Tromino谜题
- Tromino谜题 ---- 分治法(C++版&OpenCV版)
- Tromino问题
- Tromino谜题的解法
- Java实现
- java实现
- java实现排列组合实现
- 实现缓存 java实现
- JAVA实现的时钟实现
- 基数排序---Java实现+C++实现
- 整数实现翻转---java实现
- 手写实现Java ArrayList实现
- Java实现 数组实现队列
- java 实现递归实现tree
- 【算法数据结构Java实现】Java实现单链表
- 【java】java实现回文判断,递归实现
- SDWebImage 处理url链接中图片更新问题
- sqlSession.getMapper(UserMapper.class)的使用方式
- 发一下自己写的几个Adapter基类
- java List 线程安全
- Android doc |Getting Started|部分 转载 --管理Activity生命周期
- java实现Tromino谜题
- 矩阵相关计算
- git stash
- K8S的volumes
- 自己经验AP 月结对账过程
- 进程(process)和线程(thread)及其在项目中的应用 协程
- RTP传输中的负载类型和时间戳
- NestedScrollingParent 实现复杂交互效果
- 利用css设置超链接不能点击或者失效(实际项目版)