资源简介
算法系列(一):棋盘覆盖
博客地址:http://blog.csdn.net/qq_22145801/article/
代码片段和文件信息
package com.ncepu.sherly.chessboardcover;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
/**
* @author Sherly-Liu 棋盘类
* @param tr表示棋盘左上角行坐标
* @param tc表示棋盘左上角列坐标
* @param dr表示特殊方格的行坐标
* @param dc表示特殊方格的列坐标
* @param SIZE
* =2^k。棋盘的规格为2^k*2^k
*
*/
public class Chessboard extends JPanel {
int k; // 棋盘的规格为2^k*2^k
int SIZE; // SIZE=2^k
int[][] b;// 棋格棋盘规格为2^k*2^k个棋格
int tile = 1;// 骨牌编号
L_Chess[] chess;// L型骨牌个数为 (4^k-1)/3
int dr;// 表示特殊方格的行坐标
int dc;// 表示特殊方格的列坐标
// 构造方法
public Chessboard(int k int dr int dc) {
this.k = k;
this.dr = dr;
this.dc = dc;
SIZE = (int) Math.pow(2 k);
b = new int[SIZE][SIZE];// 申请n*n数组空间
int temp = (((int) Math.pow(4 k)) - 1) / 3;// L型骨牌个数为 (4^k-1)/3
chess = new L_Chess[temp];
Fill(0 0 SIZE dr dc);
InitUI();
}
/**
* Fill方法:每一个L型骨牌用相等的数字填充。从1,2,3,......,(0号为特殊方块所在位置),按左上、右上、右下、左下顺序依次填充
*/
public void Fill(int tr int tc int size int dr int dc) {
if (size == 1)
return;
else {
int t = tile++;
int s = size / 2;// 将棋盘四等分,即将问题分解为四个SIZE=2^(k-1)的子问题
if ((dr < tr + s) && (dc < tc + s)) {// 特殊方格在左上子棋盘
// b[tr + s - 1][tc + s] = b[tr + s][tc + s] = b[tr + s][tc + s
// - 1] = t;// 覆盖第一个L型骨牌:在右上、右下、左下交界处
chess[t - 1] = new L_Chess(tr + s - 1 tc + s tr + s tc + s
tr + s tc + s - 1 t);// 覆盖第一个L型骨牌:在右上、右下、左下交界处
// 采用递归分别求解每个子问题
Fill(tr tc s dr dc);
Fill(tr tc + s s tr + s - 1 tc + s);
Fill(tr + s tc + s s tr + s tc + s);
Fill(tr + s tc s tr + s tc + s - 1);
} else if ((dr < tr + s) && (dc >= tc + s)) {// 特殊方格在右上子棋盘
// b[tr + s - 1][tc + s - 1] = b[tr + s][tc + s - 1] = b[tr +
// s][tc
// + s] = t;// 覆盖第一个L型骨牌:在左上、左下、右下交界处
chess[t - 1] = new L_Chess(tr + s - 1 tc + s - 1 tr + s tc
+ s - 1 tr + s tc + s t);// 覆盖第一个L型骨牌:在左上、左下、右下交界处
// 采用递归分别求解每个子问题
Fill(tr tc s tr + s - 1 tc + s - 1);
Fill(tr tc + s s dr dc);
Fill(tr + s tc + s s tr + s tc + s);
Fill(tr + s tc s tr + s tc + s - 1);
} else if ((dr >= tr + s) && (dc >= tc + s)) {// 特殊方格在右下子棋盘
// b[tr + s - 1][tc + s - 1] = b[tr + s - 1][tc + s] = b[tr +
// s][tc
// + s - 1] = t;// 覆盖第一个L型骨牌:在右上、左上、左下交界处
chess[t - 1] = new L_Chess(tr + s - 1 tc + s - 1 tr + s - 1
tc + s tr + s tc + s - 1 t);// 覆盖第一个L型骨牌:在右上、左上、左下交界处
// 采用递归分别求解每个子问题
Fill(tr tc s tr + s - 1 tc + s - 1);
Fill(tr tc + s s tr + s - 1 tc + s);
Fill(tr + s tc + s s dr dc);
Fill(tr + s tc s tr + s tc + s - 1);
} else if ((dr >= tr + s) && (dc < tc + s)) {// 特殊方格在左下子棋盘
// b[tr + s - 1][tc + s - 1] = b[tr + s - 1][tc + s] = b[tr +
// s][tc
// + s] = t;// 覆盖第一个L型骨牌:在左上、右上、右下交界处
chess[t - 1] = new L_Chess(tr + s - 1 tc + s - 1 tr + s - 1
tc + s tr + s tc + s t);// 覆盖第一个L型骨牌:
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-11-18 23:01 SuanFa\
文件 232 2016-06-16 11:16 SuanFa\.classpath
文件 382 2015-12-22 20:47 SuanFa\.project
目录 0 2016-11-18 23:01 SuanFa\.settings\
文件 85 2016-09-23 10:15 SuanFa\.settings\org.eclipse.core.resources.prefs
文件 670 2016-09-17 10:25 SuanFa\.settings\org.eclipse.jdt.core.prefs
目录 0 2016-11-18 23:03 SuanFa\bin\
目录 0 2016-11-18 23:01 SuanFa\drawable\
文件 5482 2013-10-20 12:30 SuanFa\drawable\1.gif
文件 3801 2013-10-20 12:34 SuanFa\drawable\2.gif
文件 2381 2013-10-20 12:35 SuanFa\drawable\3.gif
文件 681215 2016-11-10 13:25 SuanFa\drawable\background.jpg
文件 911425 2015-12-28 17:28 SuanFa\drawable\background2.jpg
目录 0 2016-11-18 23:01 SuanFa\src\
目录 0 2016-11-18 23:01 SuanFa\src\com\
目录 0 2016-11-18 23:02 SuanFa\src\com\ncepu\
目录 0 2016-11-18 23:01 SuanFa\src\com\ncepu\sherly\
目录 0 2016-11-18 23:01 SuanFa\src\com\ncepu\sherly\chessboardcover\
文件 5532 2016-11-18 22:44 SuanFa\src\com\ncepu\sherly\chessboardcover\Chessboard.java
文件 0 2016-11-18 22:52 SuanFa\src\com\ncepu\sherly\chessboardcover\ClassDiagram.mgc
文件 2214 2016-11-18 22:44 SuanFa\src\com\ncepu\sherly\chessboardcover\L_Chess.java
文件 7759 2016-11-18 22:06 SuanFa\src\com\ncepu\sherly\chessboardcover\Main.java
文件 671 2016-11-18 22:44 SuanFa\src\com\ncepu\sherly\chessboardcover\MyLabel.java
- 上一篇:Spring AOP的AspectJ支持jar包
- 下一篇:酒店管理系统源码课程设计
相关资源
- 酒店管理系统java源码82651
- 多功能分布式三子棋游戏TicTacToe_Jav
- 员工信息管理系统详细设计+源码(
- 安卓版消灭星星java源码
- java web springboot License生成器 (JAVA源码
- 图书管理系统需求分析报告文档及j
- [Java源码]基于Swing和SpringBoot的人事管
- svm多分类的java源码
- java源码包(包括sun包和具体导入步骤
- 捕鱼达人java源码完整功能
- java源码包
- java开发实战经典_MLDN李兴华 java源码和
- 推荐会员管理系统JAVA源码
- Java源码调用cmpp2.0短息网关进行短信发
- 网上书城系统java源码
- java源码-进销存财务一体化解压密码:
- 在线考试系统完整代码,JAVA源码,供
- java+web音乐翻唱网站+j2ee平台Java源码
- java源码实现cmpp2.0协议
- Java实现飞行棋源码
- Java人力资源管理系统,基于 spring m
- Java 开源博客系统 spring mvc、 hibernat
- Java SSM 航空票务管理系统 spring、 my
- Java SSM、 shiro开发用户登录权限认证的
- 三级分销java源码包含支付功能含数据
- Eclipse搭建SSH框架-JAVA源码+数据库
- 简单OA办公系统+Java源码+mysql数据库
- 学生管理系统+Java源码+数据库
- 淘天下电商网站源码
- src.zip(java1.8)
评论
共有 条评论