资源简介
算法系列(一):棋盘覆盖
博客地址: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源码
- 棋盘覆盖---JAVA版
- 自动出题系统(java 课程设计)
- Java操作Oracle数据库-多线程.rar
- 12306抢票程序java源码
- 李兴华java源码笔记
- Java酒店管理系统毕业设计含文档.ra
- JAVA潜艇大战小游戏源码
- 仿照植物大战僵尸java源码
- java源码包4
- java源码包3
- B/S 公交管理系统 Java源码 eclipse工程
- 经纬度计算距离、方位角等java源码
- 重构到设计模式的经典案例,超完美
- JSP毕业设计作业:奖学金评定系统J
- 基于java的图书管理系统源码Java源码
- 基于CS系统的CRM客户关系型管理系统
- java源码 亲测java 酒店管理系统(含
- 表白墙Java源码
- Java 界面漂亮的打字软件源码.rar
- Java界面华丽的跳棋游戏.rar
- 音乐网站javaweb源码.rar
- 课程设计基于GUI的FTP客户端JAVA源码
- Java超市购物进销存系统含Java源码完整
- 纯java游戏-植物大战僵尸源码
- 学院管理系统完整java源码
- Java版跳棋游戏源代码
- Java源码 吃豆豆 俄罗斯方块 扫雷 计算
- 仿跳一跳Java源码
- 电力规约IEC608705/DNP3 Java源码
评论
共有 条评论