回溯法 | N皇后

class Solution {
    List<List<String>> l = new ArrayList<>();
    int nn ;
    public List<List<String>> solveNQueens(int n) {
        int[] r = new int[n];
        int[] c = new int[n];
        int[] m = new int[2*n];
        int[] q = new int[2*n];
        String[][] dp = new String[n][n];

        nn = n;

        dfs(r,c,m,q,new ArrayList<>(),dp,0,n);

        return l;
    }
    public void dfs(int[] r, int[] c, int[] m, int[] q, List<Integer> res, String[][] dp, int raw,int count){
        if(count==0){
            List<String> rr = fi(dp);
            l.add(new ArrayList<>(rr));
            return;
        }
        
        if( raw>=nn) return;

        for(int i=0;i<nn;i++){
            if(!valid(r,c,q,m,raw,i)) continue;

            dp[raw][i] = "Q";
            c[i] = c[i]+1;
            r[raw] = r[raw]+1;
            q[raw+i] = q[raw+i]+1;
            m[raw-i+nn] = m[raw-i+nn] +1;

            dfs(r,c,m,q,res,dp,raw+1,count-1);

            dp[raw][i] = ".";
            c[i] = c[i]-1;
            r[raw] = r[raw]-1;
            q[raw+i] = q[raw+i]-1;
            m[raw-i+nn] = m[raw-i+nn] -1;
        }

    }
    public boolean valid(int[] r, int[] c, int[] q, int[] m, int raw, int col){
        if(r[raw]!=0) return false;
        if(c[col]!=0) return false;
        if(q[raw+col]!=0) return false;
        if(m[raw-col+nn]!=0) return false;
        return true;
    }
    public List<String> fi(String[][] dp){
        List<String> r = new ArrayList<>();
        for(int i=0;i<dp.length;i++){
            String ss = "";
            for(int j=0;j<dp[0].length;j++){
                if(dp[i][j]==null){
                    dp[i][j] = ".";
                }
               ss = ss+dp[i][j];
            }
            r.add(ss);
        }
        return r;
    }
}


全部评论
我在牛客上刷到过这道题
点赞 回复 分享
发布于 2022-08-14 12:35

相关推荐

08-13 17:27
门头沟学院 Java
等闲_:还是那句话,这样只能海投,没有太多需要改的,因为大部分简历都是这样的,唯一可以把蓝桥杯三等奖放到最后
点赞 评论 收藏
分享
运营你豪哥:1.模板换一个,现在的模板基础信息加个照片已经占了30%的空间。 2.实习经历的描述,按时间倒序标注清楚,选2-3段和你求职意向契合的经历填写。 3.自我评价再改改,要不就删了;怎么感觉自我评价是在介绍你专业的培养体系,看不出重点要突出什么。
听劝,这个简历怎么改
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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