9.9递归和动态规划(九)——N皇后
来源:互联网 发布:sql查询分析器建表 编辑:程序博客网 时间:2024/06/06 13:55
/**
* 功能:打印八皇后在8*8棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。
* 这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。
* 功能:打印八皇后在8*8棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。
* 这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。
*/
static int GRID_SIZE=8;/** * 思路:每一行只能摆放一个皇后,因此不需要将棋盘存储为完整的8*8矩阵,只需一维数组,其中columns[r]=c表示有个皇后位于r行c列。 * @param row * @param columns * @param results */public static void placeQueen(int row,Integer[] columns,ArrayList<Integer[]> results){if(row==GRID_SIZE){/*Creates and returns a copy of this object. The precise meaning of "copy" may depend on the class of the object. * The general intent is that, for any object x, the expression: x.clone() != xwill be true. * and that the expression: x.clone().getClass() == x.getClass()will be true. *but these are not absolute requirements. While it is typically the case that: x.clone().equals(x)will be true, this is not an absolute requirement. */results.add(columns.clone());}else{for(int col=0;col<GRID_SIZE;col++){if(checkValid(columns,row,col)){columns[row]=col;//摆放皇后placeQueen(row+1, columns, results);}}}}/** * 检查(row,column)是否可以摆放皇后,方法: * 检查有无其他皇后位于同一列或对角线,不必检查是否在同一行上,因为调用placeQueen时,一次只会摆放一个皇后。由此可知,这一行是空的。 * @param columns * @param row * @param column * @return */public static boolean checkValid(Integer[] columns,int row,int column){for(int r=0;r<row;r++){int c=columns[r];/* 检查同一列是否有皇后 */if(c==column)return false;/* 检查对角线: * 若两行的距离等于两列的距离,则表示两个皇后在同一对角线上。 */int columnDistance=Math.abs(c-column);int rowDistance=row-r;//row>r,不用取绝对值if(columnDistance==rowDistance)return false;}return true;}
0 0
- 9.9递归和动态规划(九)——N皇后
- N皇后问题(递归和动态规划)
- 递归与动态规划---N皇后问题的递归方法和位运算方法
- N皇后——递归和非递归
- 九度OJ 1254:N皇后问题 (N皇后问题、递归、回溯)
- 程序员面试金典: 9.9 递归和动态规划 9.9八皇后问题
- 9.9递归和动态规划(六)——打印n对括号的全部有效组合(即左右括号正确配对)
- N 皇后问题 —— 递归求解
- N皇后问题(递归)
- 9.9递归和动态规划(一)——小孩上楼梯的方式的种类
- 9.9递归和动态规划(三)——魔术索引
- 9.9递归和动态规划(四)——返回某集合的所有子集
- 9.9递归和动态规划(五)——确定某字符串的所有排列组合
- 9.9递归和动态规划(十)——堆箱子
- 9.9递归和动态规划(十二)——小鸡吃米
- 动态规划和递归
- 递归和动态规划
- 动态规划和递归
- VBA 清除 IE 缓存 - WebBrowser控件开发者必杀技!
- codeforces 568B B. Symmetric and Transitive(贝尔数+组合数学)
- 如何强制ffmpeg编码时输出一个关键帧
- java 与 android 常用正则表达式
- <body>
- 9.9递归和动态规划(九)——N皇后
- SwipeListView的使用
- android 验证码实现,详细标注!
- Android ADB 详解
- post模拟表单数据提交--利用apache的jar包
- Android签名详解(debug和release)
- 归并排序快速排序java代码
- android LayoutInflater
- NSIS 磁盘检测 (学习三)