递归分治解决棋盘覆盖问题
2014-11-06 09:11
369 查看
package algorithm; //递归分治解决棋盘覆盖问题 public class ChessBoard { //tr棋盘左上角方格的行号 //tc棋盘左上角方格的列号 //size = 2^k棋盘规格为2^k *2^k //dr特殊方格所在的行号 //dc特殊方格所在的列号 private static int tile = 0;//L型骨牌号 public static int[][] Board = new int[100][100]; public static void chessBoard(int tr,int tc,int dr,int dc,int size){ if(size == 1) return; size/=2; int t = ++tile; //特殊方格在左上角 if(dr < tr + size&&dc < tc + size){ chessBoard(tr,tc,dr,dc,size); }else{ Board[tr + size - 1][tc + size -1] = t; chessBoard(tr,tc,tr + size -1,tc + size -1,size); } //特殊方格在右上角 if(dr < tr + size&&dc >= tc + size){ chessBoard(tr ,tc + size,dr,dc,size); }else{ Board[tr + size - 1][tc + size] = t; chessBoard(tr,tc + size,tr + size - 1,tc + size,size); } //特殊方格在左下角 if(dr >= tr + size&&dc < tc + size){ chessBoard(tr + size,tc,dr,dc,size); }else{ Board[tr + size][tc + size -1] = t; chessBoard(tr + size,tc,tr + size,tc + size -1,size); } //特殊方格在右下角 if(dr >= tr + size&&dc >= tc + size){ chessBoard(tr + size,tc + size,dr,dc,size); }else{ Board[tr + size][tc + size] = t; chessBoard(tr + size,tc + size,tr + size,tc + size,size); } } public static void main(String[] args) { // TODO Auto-generated method stub int size = 8; chessBoard(0,0,3,3,size); for(int i = 0;i < size;i++){ for(int j = 0;j < size;j++){ String s = String.format("%3d",Board[i][j]); System.out.print(s); } System.out.println(); } } }
相关文章推荐
- 递归分治策略——Java之棋盘覆盖问题解决
- [递归与分治]棋盘覆盖问题
- [分治,递归]棋盘覆盖问题
- 棋盘覆盖问题(递归与分治,紫书P229)
- 棋盘覆盖问题(递归与分治)
- 递归与分治策略之棋盘覆盖问题
- 递归与分治之棋盘覆盖问题
- 递归与分治之棋盘覆盖问题
- 实验一 分治与递归―棋盘覆盖问题 java实现
- 棋盘覆盖问题-递归分治
- 棋盘覆盖问题(递归分治)
- 棋盘覆盖(递归分治问题)
- 分治与递归:棋盘覆盖问题
- 高效算法设计_递归与分治(棋盘覆盖问题,循环日程表,巨人与鬼)
- 棋盘覆盖问题的递归解决
- 分治与递归-棋盘覆盖问题
- 棋盘覆盖问题 (粉书 P230 【递归】** )
- 棋盘覆盖问题 (分治)
- 棋盘覆盖问题(分治)(C语言)
- 用Java解决棋盘覆盖问题