158.N-Queens
来源:互联网 发布:无3c被淘宝下架了宝贝 编辑:程序博客网 时间:2024/05/29 14:10
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens' placement, where 'Q'
and '.'
both indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."]]
Subscribe to see which companies asked this question
/* * Step1:定义一个数组nodes,nodes[i]表示第i行的皇后存放的列下标; * Step2:定义一个函数来整理所有的结点都存放到矩阵之后的结果; * Step3:定义一个函数来判断(row,j)是否可以存放的目前的结果中; * Step4:定义一个函数来为row行的皇后找地方,如果找到了则继续为row+1找位置,如果没有找到则退回到row-1,尝试为 * row-1找其当前位置之后的位置。 */ /*准备要返回的结果*/ List<List<String>> result = new ArrayList<List<String>>(); int[] nodes;//nodes[i]的value值表示标号为i行存储的位置 int num; public List<List<String>> solveNQueens(int n) { /*Step1:初始化每行的那个结点即将要尝试的坐标*/ nodes = new int[n]; num = n; /*Step2:开始尝试*/ addNode(0); /*Step3:返回最后的结果*/ return result; } /*往结果集中添加结点,row表示本次准备放的行号*/ private void addNode(int row){ /*如果所有的结点都已经放到均镇中,则整理结果*/ if(row == num){ addResult(); }else{ for(int i=0; i<num; i++){/*如果找到了则继续为row+1找位置,如果没有找到则退回到row-1,尝试为row-1找其当前位置之后的位置。*/ nodes[row] = i; if(CanAddNode(row , nodes[row])){ addNode(row+1); } } } } /*整理当前遍历到的结果,走到这一步说明所有的结点都加入到了list中,只需要利用这个方法进行整理结果即可*/ private void addResult(){ List<String> solution = new ArrayList<String>(); for(int i=0;i<num;i++){ StringBuilder sb = new StringBuilder(); int k =0; while(k<nodes[i]){ sb.append("."); k++; } sb.append("Q"); k++; while(k<num){ sb.append("."); k++; } solution.add(sb.toString()); } result.add(solution); } /*判断(row,j)能否加入到当前的结果中*/ private boolean CanAddNode(int row,int j){ for(int k =0;k<row;k++){ if( nodes[k] == j || Math.abs(nodes[k] - j)== row - k){//说明列有重复或者在同一对角线上,要返回false return false; } } return true; }
0 0
- 158.N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- 获取页面隐藏元素的高宽
- iOS备忘录之mac常用命令行
- Android内存的优化总结
- IO流一点整理
- 网易视频云:InnoDB透明页压缩与稀疏文件
- 158.N-Queens
- Ubuntu15.10上arm-linux-gcc4.3.2的安装、配置及问题解决方法
- ecshop二次开发--左侧导航
- 环环相扣的信用卡案情
- 关于linux系统下已经用过的数据盘重新挂载的问题
- ERROR BasicResourcePool:1853 - A RESOURCE POOL IS PERMANENTLY BROKEN!
- 静态方法和实例化方法的区别
- IOS代码实现自动布局
- cygwin安装