题解 | #N皇后问题#

N皇后问题

https://www.nowcoder.com/practice/c76408782512486d91eea181107293b6

import java.util.*;
public class Solution {
   
    List<List<String>> ans = new ArrayList<>();
    int[] row;
    boolean[] cols, d, ud;
    int N;
    public int Nqueen(int n) {
        N = n;
        cols = new boolean[n];
        d = new boolean[25];
        ud = new boolean[25];
        row = new int[n]; // 用来保存第几行第几列放置Q
        dfs(0);
        return ans.size();
    }
    void dfs(int i) { 
        if (i == N) {//行数为n
            char[] arr = new char[N];
            Arrays.fill(arr, '.');
            List<String> tmp = new ArrayList<>();
            for (int j = 0; j < N; j++) {
                arr[row[j]] = 'Q';
                tmp.add(new String(arr)); 
                arr[row[j]] = '.';
            }
            ans.add(tmp);
            return;
        }
        //选择一个位置进行放置
        for (int j = 0; j < N; j++) {
            if (!cols[j] && !d[i + j] && !ud[N - i + j]) {
                //列,对角线、反对角线判断
                cols[j] = d[i + j] = ud[N - i + j]= true;
                row[i] = j;
                dfs(i + 1);
                cols[j] = d[i + j] = ud[N - i + j]= false;
            }
        }
    }
}

全部评论

相关推荐

算法丰川祥:实际就两个人给他投,它这么说好显得自己比较抢手
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务