首页 > 其他 > 详细

51_n皇后

时间:2021-08-24 09:50:16      阅读:37      评论:0      收藏:0      [点我收藏+]
class Solution {
    List<List<String>> res;
    //检查 列+主对角+负对角
    boolean[] cols;
    boolean[] poss;
    boolean[] negs;
    char[][] t;
    int m ;
    public List<List<String>> solveNQueens(int n) {
        //初始化
        m = n;
        t = new char[n][n];
        for (char[] c : t) {
            Arrays.fill(c, ‘.‘);
        }
        res = new ArrayList<>();
        cols = new boolean[n];
        poss = new boolean[2*n-1];
        negs = new boolean[2*n-1];
        backtrace(0);
        return res;
    }
    //需要什么参数呢?
    private void backtrace(int r){
        //赢了 添加结果
            //语义应该是到了n+1了
        if(r == m){
            List<String> winner = transform();
            res.add(winner);
            return ;
        }
        //同层横向走
        for(int i = 0;i<m;i++){
            if(isValid(r,i)){
                //当前可以行
                t[r][i] = ‘Q‘;
                cols[i] = true;
                poss[r+i] = true;
                negs[r-i+m-1] = true;
                backtrace(r+1);
                t[r][i] = ‘.‘;
                cols[i] = false;
                poss[r+i] = false;
                negs[r-i+m-1] = false;
            }
        }
    }

    private boolean isValid(int r,int c){
        if(cols[c] ) return false;
        if(poss[r+c]) return false;
        if(negs[r-c+m-1]) return false;
        return true;
    }
    private List<String> transform(){
        List<String> res = new ArrayList<>();
        for(char[] e:t){
            res.add(new String(e));
        }
        return res;
    }
}

 

51_n皇后

原文:https://www.cnblogs.com/purexww/p/15178654.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!