• [LeetCode]N-Queens 八皇后问题扩展(经典深层搜索)


    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.


    Given an integer n, return all distinct solutions to the n-queens puzzle.

    Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space respectively.

    For example,
    There exist two distinct solutions to the 4-queens puzzle:

    [
     [".Q..",  // Solution 1
      "...Q",
      "Q...",
      "..Q."],
    
     ["..Q.",  // Solution 2
      "Q...",
      "...Q",
      ".Q.."]
    ]
    參考:LeetCode 题解
    戴方勤 (soulmachine@gmail.com)
    https://github.com/soulmachine/leetcode

    public class Solution {
    	boolean[] column = null;
    	boolean[] diag = null;
    	boolean[] anti_diag = null;
    	int[]C = null;
    	String model = null;
        public List<String[]> solveNQueens(int n) {
            column = new boolean[n];
            diag = new boolean[2*n];
            anti_diag = new boolean[2*n];
            C = new int[n];//Q在第i行的第几列
            List<String []> res = new ArrayList<>();
    
            dfs(0,res,n);
            return res;
            
        }
        
        private void dfs(int row,List<String[]> res,int n){
        	if(row==n){
        		String [] str = new String[n];
        		for(int i=0;i<n;i++){
        			StringBuilder sb = new StringBuilder();
        			for(int j=0;j<n;j++){
        				if(C[i]==j){
        					sb.append("Q");
        				}else{
        					sb.append(".");
        				}
        			}
        			str[i] = sb.toString();
        		}
        		res.add(str);
        		return;
        	}
        	
        	for(int j=0;j<n;j++){
        		if(!column[j]&&!anti_diag[row+j]&&!diag[n-row-1+j]){
        			C[row]=j;
        		}else{
        			continue;
        		}
        		column[j]=anti_diag[row+j]=diag[n-row-1+j]=true;
        		dfs(row+1,res,n);
        		column[j]=anti_diag[row+j]=diag[n-row-1+j]=false;
        	}
        }
    }





    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    [SUCTF 2019]EasySQL
    [强网杯 2019]随便注
    [HCTF 2018]WarmUp
    Linux下配置JDK环境
    Centos克隆虚拟机后配置网络
    Sublime安装插件
    LeetCode-91-解码方法
    LeetCode-322-零钱兑换
    LeetCode-152-乘积最大子数组
    LeetCode-139-单词拆分
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4713737.html
Copyright © 2020-2023  润新知