【leetcode】52. (Hard) N Queens II

题目链接


解题思路:
回溯


提交代码:

class Solution {
		public int totalNQueens(int n) {
    	int[][] positions=new int[n][n];
    	int[] columns=new int[n];
    	for(int i=0;i<n;i++)
    		columns[i]=-1;
 
    	return newDistribution(0,n,positions,columns);
    }
    
    public int newDistribution(int row,int n,
    		int[][] positions,int[] columns) {
    	/* row: current row
    	 *  n: the size of the chess
    	 *  positions: present valid queens' positions we have
    	 *   columns: columns where current queens have occupied
    	 */
    	if(row==n)		return 1;

    	int res=0;
    	for(int i=0;i<n;i++) {
    		positions[row][i]=1;
    		if(isValid(row,positions,columns,i)) {
    			columns[row]=i;
    			res+=newDistribution(row+1,n,positions,columns);
    		}
    		columns[row]=-1;positions[row][i]=0;
    	}
    	
    	return res;
    	
    }
    
    public boolean isValid(int row,int[][] positions,int[] columns,int column) {
    	/* check if the new column in row is valid 
    	 * row: current row
    	 * positions: the positions of current queens we have
    	 * columns: the columns of current queens occupy
    	 * */
    	 
    	//check the volumn
    	for(int i=0;i<row;i++) 
    		if(columns[i]==column)
    			return false;
    	
    	//check the diagonal
    	for(int i=0;i<row;i++) {
    		if(row-i==(column-columns[i]))
    			return false;
    		else if(row-i==columns[i]-column)
    			return false;
    	}
    	return true;
    }
}


运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/AXIMI/article/details/84024794