n-queens
来源:互联网 发布:卡佩拉详细数据 编辑:程序博客网 时间:2024/06/05 07:40
The n-queens puzzle is the problem of placing n queens on an n×nchessboard 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.
分析:查阅相关资料,得知需要行,列以及对角线都只有一个皇后
那么接下来就是遍历的过程,每次放置一个皇后,都要确定他的合法性
大神的妙用: 由于每行只有一个皇后,那么可以建立一个一维数组,代表每行那个唯一的皇后的位置
import java.util.*;public class Solution { ArrayList<String[]> result=new ArrayList<>(); public ArrayList<String[]> solveNQueens(int n) { if(n<=0){ return result; } int[] cols=new int[n]; for(int i=0;i<n;i++){ cols[0]=i; dfs(cols,1); } return result; } public void dfs(int[] cols,int row){
//当相等时,就证明已经产生了一个可行解 if(row==cols.length){ String[] str=new String[cols.length]; for(int i=0;i<str.length;i++){ str[i]=""; for(int j=0;j<str.length;j++){ if(j==cols[i]){ str[i]+="Q"; }else{ str[i]+="."; } } } result.add(str); return; }
//判断row行的第i列是否符合,若符合,设置当前行皇后的坐标 继续判断下一行 for(int i=0;i<cols.length;i++){ if(isOK(cols,row,i)){ cols[row]=i; dfs(cols,row+1); } } }
//进行判断合法性 是否同一列,是否对角线
public boolean isOK(int[] cols,int row,int col){ if(cols==null){ return false; } for(int i=0;i<row;i++){ if(cols[i]==col||Math.abs(cols[i]-col)==Math.abs(row-i)){ return false; } } return true; }}
阅读全文
0 0
- 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
- 鼠标滚动
- 微信token验证失败
- CF-Educational-25 E-Minimal Labels (拓扑排序,字典序)
- Person Re-identification Overview
- --1 排序与查找 基础算法
- n-queens
- 徽章系列5: Codecov 的使用
- HOGDescriptor with SVM
- 徽章系列6: Api_Level 的使用
- 徽章系列7: codacy 的使用
- windows下使用nvm,以及切换nvm下载源
- 利用chrome浏览器调试js断点
- 笔试编程题(一)
- Camera安卓源码-高通mm_camera架构剖析