Sunday, February 9, 2014

N-Queens II

Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
Solution: Same logic as N-Queens. Use DFS.
public class Solution {
    int sum = 0;
    public int totalNQueens(int n) {
        int[] A = new int[n];
        nQueens(A, 0, n);
        return sum;
    }
    public void nQueens(int[] A, int cur, int n){
        if(cur == n) { sum++; return; }
        for(int i = 0; i < n; i++){
            A[cur] = i;
            if(isValid(A, cur)){
                nQueens(A, cur+1, n);
            }
        }
    }
    public Boolean isValid(int[] A, int cur){
        for(int i = 0; i < cur; i++){
            if(A[i] == A[cur] || Math.abs(A[i]-A[cur]) == cur - i) return false;
        }
        return true;
    }
     
}

No comments:

Post a Comment