2020年9月3日 N 皇后 solveNQueens
class Solution {
public List<List<String>> solveNQueens(int n) {
}
}
解题思路:
思路1,暴力递归。
我们遍历棋盘的每一种组合形式,从而暴力得出所有可能的情况。
首先第一列,同一列中不会出现两个Q,所以,我们第一列存在n中情况,我们在每一种情况中都将所有不能再放Q的位置上使用“.”来填充,没被限制的还是使用默认的0x00来填充。
第二列由于不能和第一列的Q处于同一行以及同一斜线,就在第二列允许填充的位置上填充就可以了。
以此类推,知道棋盘最后一列放下Q或者无法放下Q为止。
在实现代码的过程中发现需要使用回溯。而且回溯的是一个二维数组,看来又得复习一下回溯算法了。在回溯的过程中一定要非常注意值传递和指针传递的问题。
在去查找回溯算法教程的时候就看到了很多的八皇后的题目,这让我更加确信自己的方向是没有错的。
肯定还存在调优的方式。
class Solution {
char[][] map;
int n;
List<List<String>> res=new ArrayList<>();
public List<List<String>> solveNQueens(int n) {
this.n=n;
//遍历n次,放在第一列的第n个上,然后开始第二个
for (int index=0;index<n;index++){
map=new char[n][n];
map[0][index]='Q'