N-Queens_review()

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:

    这次用了一维数组,横坐标为下表,纵坐标为值

public class Solution {
    public List<String[]> solveNQueens(int n) {
      ArrayList<String[]> res= new ArrayList<String[]>();
        int nrow= n;
        int[] nQueen= new int[n];
        DFS_nQueen(res,0,nrow,nQueen);
        return res;
    }
    public void DFS_nQueen(ArrayList<String[]> res, int row, int nrow,
            int[] nQueen) {
        // TODO Auto-generated method stub
        if(row==nrow){
            String[] unit=new String[nrow];
            for(int i=0;i<nrow;i++){
                StringBuilder s=new StringBuilder();
                for(int j=0;j<nrow;j++){
                    if(j==nQueen[i]){
                        s.append("Q");
                    }else{
                        s.append(".");
                    }
                }
                unit[i]=s.toString();
            }
            res.add(unit);
        }else{
            for(int i=0;i<nrow;i++){
                nQueen[row]=i;
            if(isValid(nQueen,row)){
                DFS_nQueen(res,row+1,nrow,nQueen);    
            }
            }
        }
    }
    public boolean isValid(int[] array,int row){
        for(int i=0;i<row;i++){
            if(array[i]==array[row] || (Math.abs(i-row)==Math.abs(array[i]-array[row]))){
                return false;
            }        
        }
        return true;
    }  
    
}

 

posted @ 2015-06-03 03:13  微微程序媛  阅读(145)  评论(0编辑  收藏  举报