• 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.."]
    ]


    dfs method.
    public class Solution {
        public List<String[]> solveNQueens(int n) {
           List<String[]> placement = new ArrayList<String[]>();
    		if(n == 1){
    			placement.add(new String[]{"Q"});
    	        return placement;
    	    }
    		if(n >= 4){
    			List<Integer> position = new ArrayList<Integer>();
    			dfs(n, 0, position, placement);
    		}
    		return placement;	
    	}
    		
    	private boolean dfs(int n, int row, List<Integer> position, List<String[]> placement){
    		if(row == n) return true; 
    		for(int i = 0; i < n; ++i) {
    			if(isValidPosition(row * n + i, position, n)){
    				position.add(row * n + i);
    				if(dfs(n, row + 1, position, placement))
    					generateSolution(position,placement, n);
    				position.remove(row);
    			}
    		}
    		return false;
    	}
    		
    	private boolean isValidPosition(int k, List<Integer> position, int n){
    		for(int i = 0; i < position.size(); ++i){
    			if( k % n == position.get(i) % n || Math.abs( k % n - position.get(i) % n) == k / n - i) 
    				return false;
    		}
    		return true;
    	}
    		
    	private void generateSolution(List<Integer> position, List<String[]> placement, int n){
    		char[] oneRow = new char[n];
    		for(int i = 0; i < n; ++i)
    			oneRow[i] = '.';
    		String[] oneSolution = new String[n];
    		for(int i = 0; i < n; ++i){
    			oneRow[position.get(i) % n] = 'Q';
    			oneSolution[i] = new String(oneRow);
    			oneRow[position.get(i) % n] = '.';
    		}
    		placement.add(oneSolution);     
        }
    }
    

      






  • 相关阅读:
    ZooKeeper学习第一期---Zookeeper简单介绍
    安装zookeeper(单机,伪集群)
    一张图看懂DNS域名解析全过程
    CDN基本工作过程
    第十七章、程序管理与 SELinux 初探
    直方图均衡化的缺点——不平坦
    电感耦合等离子体质谱法响应时间
    C++内容记录
    图像质量评价-NQM和WPSNR
    分颜色通道SR的相关论文
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3825843.html
Copyright © 2020-2023  润新知