zoukankan      html  css  js  c++  java
  • 51. N-Queens

    class Solution {
        public List<List<String>> solveNQueens(int n) {
            int[][] board=new int[n][n];
            List<List<String>> res=new ArrayList<List<String>>();
            nQueens(0,board,res);
            return res;
        }
        private void nQueens(int i, int[][] board, List<List<String>> res){
            if(i==board.length)
            {
                List<String> list=new ArrayList<String>();
                for(int y=0;y<board.length;y++)
                {
                    String row="";
                    for(int x=0;x<board.length;x++)
                        row+=board[y][x]==1?'Q':'.';
                    list.add(row);
                }
                res.add(list);
                return;
            }
            for(int j=0;j<board.length;j++)
                if(board[i][j]==0)
                {
                    board[i][j]=1;
                    fillQueuePath(i, j, board, -1);
                    nQueens(i+1,board,res);
                    fillQueuePath(i, j, board, 1);
                    board[i][j]=0;
                }
        }
        private void fillQueuePath(int i, int j, int[][] board, int val){
            for(int k=1;i+k<board.length;k++)
            {
                board[i+k][j]+=val;
                if(j-k>=0)
                    board[i+k][j-k]+=val;
                if(j+k<board.length)
                    board[i+k][j+k]+=val;
            }
        }
    }
    class Solution {
        public List<List<String>> solveNQueens(int n) {
            List<List<String>> res=new ArrayList<List<String>>();
            boolean[] cols=new boolean[n];
            boolean[] d1=new boolean[n*2];
            boolean[] d2=new boolean[n*2];
            solveNQueens(0, cols, d1, d2, new ArrayList<String>(), res);
            return res;
        }
        private void solveNQueens(int i, boolean[] cols, boolean[] d1, boolean[] d2, List<String> list, List<List<String>> res)
        {
            if(i==cols.length)
            {
                res.add(new ArrayList<String>(list));
                return;
            }
            for(int j=0;j<cols.length;j++)
            {
                int dn1=i-j+cols.length;
                int dn2=i+j;
                if(cols[j]==false&&d1[dn1]==false&&d2[dn2]==false)
                {
                    cols[j]=true;
                    d1[dn1]=true;
                    d2[dn2]=true;
                    String row="";
                    for(int k=0;k<cols.length;k++)
                        row+=k==j?'Q':'.';
                    list.add(row);
                    solveNQueens(i+1,cols, d1, d2, list, res);
                    list.remove(list.size()-1);
                    cols[j]=false;
                    d1[dn1]=false;
                    d2[dn2]=false;
                }
            }
        }
    }
  • 相关阅读:
    python 多进程-03 进程池
    python 多进程-02 进程间数据共享
    python 多进程-01 基本使用
    python 多线程-02 线程池
    开发者入驻
    小程序组件 scroll-view 下拉加载更多,触底触发事件,容器高度设置
    Array.from在360浏览器和IE浏览器兼容问题
    获取cookie
    背景图左右居中
    uniapp使用uni.setStorageAsync刷新页面数据丢失问题
  • 原文地址:https://www.cnblogs.com/asuran/p/7591343.html
Copyright © 2011-2022 走看看