算法java实现--分治法--棋盘覆盖问题
2014-05-28 10:12
633 查看
棋盘覆盖问题的java实现(分治法)
具体问题描述以及C/C++实现参见网址
http://blog.csdn.net/liufeng_king/article/details/8477868
具体问题描述以及C/C++实现参见网址
http://blog.csdn.net/liufeng_king/article/details/8477868
/** * 棋盘覆盖问题--分治法 */ public class Qipanfugai { public int tile = 1; public int[][] board;//整型数组保存棋盘 public Qipanfugai(int size){ board = new int[size][size]; /*A a=new B(); 是否可以解释为:声明了一个A类名叫a,为它开辟了一块内存空间B并保存在B中!*/ /*对象的成员变量初始化。在对象的初始化过程中,基本数据类型(例如int,char,byte等)都会有默认值,比如int类型的成员变量的默认值为0;但非基本数据类型的其他对象类型则默认值为Null,例如String类型的默认值为null,Date类型的默认值也是null。*/ } /** * 实现棋盘覆盖的分枝法 * @param tr棋盘左上角行号(从0开始) * @param tc棋盘左上角列号 * @param dr特殊方格行号 * @param dc特殊方格列号 * @param size棋盘规格(size*size) */ public void chessBoard(int tr,int tc,int dr,int dc,int size){ if(size==1)return; int t = tile; tile++; int s=size/2; //左上角 if(dr<tr+s&&dc<tc+s){ chessBoard(tr,tc,dr,dc,s); }else{ board[tr+s-1][tc+s-1]=t; chessBoard(tr,tc,tr+s-1,tc+s-1,s); } //右上角 if(dr<tr+s&&dc>=tc+s){ chessBoard(tr,tc+s,dr,dc,s); }else{ board[tr+s-1][tc+s]=t; chessBoard(tr,tc+s,tr+s-1,tc+s,s); } //左下角 if(dr>=tr+s&&dc<tc+s){ chessBoard(tr+s,tc,dr,dc,s); }else{ board[tr+s][tc+s-1]=t; chessBoard(tr+s,tc,tr+s,tc+s-1,s); } //右下角 if(dr>=tr+s&&dc>=tc+s){ chessBoard(tr+s,tc+s,dr,dc,s); }else{ board[tr+s][tc+s]=t; chessBoard(tr+s,tc+s,tr+s,tc+s,s); } } public static void main(String[] args) { // Qipanfugai qi = new Qipanfugai(4); // qi.chessBoard(0, 0, 0, 1, 4); Qipanfugai qi = new Qipanfugai(8); qi.chessBoard(0, 0, 7, 4, 8); for(int i = 0;i<qi.board.length;i++){ for(int j = 0;j<qi.board[i].length;j++){ System.out.print(qi.board[i][j]+" "); } System.out.println(""); } } } /* 注:输出0代表特殊方格所在位置 ================================================== 测试程序: qi.chessBoard(0, 0, 0, 1, 4); 输出: 2 0 3 3 2 2 1 3 4 1 1 5 4 4 5 5 ================================================ 测试程序: qi.chessBoard(0, 0, 7, 4, 8); 输出: 3 3 4 4 8 8 9 9 3 2 2 4 8 7 7 9 5 2 6 6 10 10 7 11 5 5 6 1 1 10 11 11 13 13 14 1 18 18 19 19 13 12 14 14 18 17 17 19 15 12 12 16 20 20 17 21 15 15 16 16 0 20 21 21 ================================================= */
相关文章推荐
- java 实现棋盘覆盖问题
- 棋盘覆盖问题算法分析与实现(递归)
- 棋盘覆盖问题的算法实现
- 棋盘覆盖问题的算法实现
- 实验一 分治与递归―棋盘覆盖问题 java实现
- 棋盘覆盖 算法分析、设计与实现(Java)
- 分治算法---棋盘覆盖问题java代码实现
- 分治算法之 棋盘覆盖问题(完整代码实现)
- 棋盘覆盖问题(算法分析)(Java版)
- 马踏棋盘问题(骑士周游问题)及其优化算法java实现
- Java基于分治算法实现的棋盘覆盖问题示例
- 经典算法之棋盘覆盖问题 --分治法
- Java实现算法导论中最近点对问题分治法
- 棋盘覆盖问题的算法实现
- 棋盘覆盖问题的算法实现
- 计算机算法设计与分析作业01:分治法求解大数乘法+L型骨牌的棋盘覆盖问题
- AIX 程序设计大赛-AIX正方形问题算法及Java程序实现
- 棋盘覆盖问题 (分治法)
- java解决棋盘覆盖问题
- 【算法】01背包问题的Java实现