码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]N-Queens

时间:2014-12-21 22:12:21      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:leetcode   算法   

问题描述:

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

基本思想:

回溯法。

代码:


    public void generateSolution(int [] record,int n, List<String []> result){  //Java
	        
	        String [] solution = new String[n];
	        for(int i =0; i < n; i++){
	            String row = "";
	            for(int j = 0; j < n; j++){
	                if(record[i]-1 == j)
	                    row += "Q";
	                else row +=".";
	            }
	            solution[i] = row;
	        }
	        result.add(solution);
	    }
	    public boolean check_pos(int index, int loop, int [] record){

            for(int i = 0; i < index; i++){
                if(record[i] == loop)
                    return false ;
                if(record[i]+i == index + loop)
                	return false ;
                if(record[i] -loop == i - index )
                	return false ;
            }  
	        return true;
	    }
	    
	    public void  subNQueen(int [] record,int index, List<String[]> result, int n){
	    	if(index == n){
	    		generateSolution(record, n,result);
	    	}
	    	
		    for(int loop = 1; loop <=n; loop++){
		    	if(check_pos(index, loop, record)){
		    		record[index] = loop;
			        subNQueen(record,index+1,result,n);
			        record[index] = 0;
		    	}
		    }
	    
	    }
	    public List<String[]> solveNQueens(int n) {
	    
	    	int index = 0;
	        int [] record = new int[n];
	        List<String [] > result = new ArrayList<String []>();   
	        subNQueen(record,0,result,n);
	        return result;
	    }

[leetcode]N-Queens

标签:leetcode   算法   

原文地址:http://blog.csdn.net/chenlei0630/article/details/42063885

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!