LeetCode-51.N-Queens
来源:互联网 发布:微总汇软件怎么样 编辑:程序博客网 时间:2024/05/20 21:46
一、问题描述
- N皇后问题,在NXN的棋盘上放置N个皇后,使其相互无法吃到对方,求解共有多少种放置方法,并按照相应的规则打印放置结果。
- 例如,输入n为4,输出结果为,
[ [“.Q..”, “…Q”,”Q…”,”..Q.”],[“..Q.”,”Q…”,”…Q”,”.Q..”] ]
二、解题思路
- 回溯求解,通过迭代实现。例如,确定第i行的Q位置,从第i行的第0个位置开始,判断该位置能否放置Q,如果可以放置,则通过同样的思路确定第i+1行Q的位置;如果不能放置,则尝试第i行第1个位置,依次类推。
- 记录已放置Q的位置,使用一维数组即可,数组的下表代表Q所在的行,数组中的元素代表Q所在的列;判断某个位置(tx,ty)是否可以放置Q,需要该位置和它前面的每一行Q位置(qx,qy)做判断,主要判断两点:(1)qy!=ty.(2)Math.abs(qx-tx)!=Math.abs(qy-ty).
三、代码
public class Solution { //int[][] map=new int[n][n]; List<List<String>> result=new ArrayList<List<String>>(); public List<List<String>> solveNQueens(int n) { //point的初始值设置为-1 int[] point=new int[n]; for(int i=0;i<n;i++) point[i]=-1; nQueenCore(0,point,n); return result; } private void nQueenCore(int row,int[] point,int n){ if(row==n-1){ for(int i=0;i<n;i++){ if(isValid(row,i,point)){ point[n-1]=i; generateRe(point,n); point[n-1]=-1; } } }else{ for(int i=0;i<n;i++){ if(isValid(row,i,point)){ point[row]=i; nQueenCore(row+1,point,n); point[row]=-1; } } } } private boolean isValid(int row,int col,int[] point){ for(int i=0;i<row;i++){ if(Math.abs(row-i) == Math.abs(col-point[i]) || point[i]==col){ return false; } } return true; } private void generateRe(int[] point,int n){ List<String> tem=new ArrayList<String>(); for(int i=0;i<n;i++){ if(point[i]==-1) break; StringBuilder sb=new StringBuilder(); for(int j=0;j<n;j++){ if(j==point[i]){ sb.append("Q"); }else{ sb.append("."); } } tem.add(sb.toString()); } result.add(tem); }}
阅读全文
0 0
- LeetCode 51. N-Queens
- LeetCode --- 51. N-Queens
- LeetCode 51.N-Queens
- [Leetcode] 51. N-Queens
- [leetcode] 51.N-Queens
- [leetcode] 51. N-Queens
- LeetCode 51. N-Queens
- leetcode 51. N-Queens
- 【LeetCode】51. N-Queens
- leetcode 51. N-Queens
- LeetCode 51. N-Queens
- LeetCode 51. N-Queens
- leetcode.51. N-Queens
- Leetcode 51. N-Queens
- LeetCode 51. N-Queens
- [LeetCode] 51. N-Queens
- leetcode 51. N-Queens
- leetcode-51. N-Queens
- js获取Application中的Cookie,读取url信息,下发Cookie,删除Cookie
- bootstrap的插件 autocomplete
- zabbix通过mpm监控mysql的环境搭建
- 1017. A除以B (20)
- jquery插件编写步骤
- LeetCode-51.N-Queens
- 汇编语言——第十四章(端口)
- 在 Windows 下关闭135/139/445端口的图文方法
- 第十五周:( LeetCode547) Friend Circles(c++)
- Msfcli not found
- 如何正确地给 github 的开源项目提交 pull request具体一些,比如 fork 之后创建几个分支,修改后如何和原项目同步
- 【Spring】Spring Framework Reference Documentation中文版19
- 异常 | access denied ("java.lang.RuntimePermission" "accessDeclaredMembers")
- springMVC 多文件上传