八皇后问题

风流意气都作罢 提交于 2019-12-02 06:44:52

简单的dfs,非最优解,胜在思路清晰

class Solution {
    int res = 0;
    public int totalNQueens(int n) {
        boolean[][] grid = new boolean[n][n];
        dfs(grid,0);
        return res;
    }
    
    public void dfs(boolean[][] grid,int row){
        if(row == grid.length){
            ++res;
            return;
        }
        //遍历每一行
        for(int i=0 ; i<grid.length ; i++){
            if(isValid(grid,row,i)){
                grid[row][i] = true;
                //递归判断下一行
                dfs(grid,row+1);
                grid[row][i] = false;
            }
        }
    }
    int[][] dirs = {{1,0},{1,1},{1,-1},{0,-1},{0,1},{-1,-1},{-1,0},{-1,1}};
    //判断该格是否可以放置棋子
    public boolean isValid(boolean[][] grid,int x,int y){
        int n = grid.length;
        
        for(int[] dir : dirs){
            int i=x;
            int j=y;
            while(i>=0 && j>=0 && i<n && j<n){                
                if(grid[i][j]){
                    return false;
                }
                i+=dir[0];
                j+=dir[1];
            }
        }
        return true;
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!