题解 | N皇后问题

N皇后问题

https://www.nowcoder.com/practice/c76408782512486d91eea181107293b6

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型 the n
     * @return int整型
     */

    public int total = 0;

    public int Nqueen (int n) {
        // write code here
        if (n == 0) return 0;

        boolean[] column = new boolean[n];
        boolean[] idx1 = new boolean[2 * n - 1];
        boolean[] idx2 = new boolean[2 * n - 1];


        recursionQueen(0, n, column, idx1, idx2);

        return total;
    }

    public void recursionQueen(int rows, int n, boolean[] col,
                               boolean[] idx1, boolean[] idx2) {

        if (rows == n) {
            total++;
            return;
        }

        for (int i = 0; i < n; i++) {

            int idx1Pos = i + rows;
            int idx2Pos = i - rows + n - 1;

            if (col[i] || idx1[idx1Pos] || idx2[idx2Pos]) continue;

            col[i] = true;
            idx1[idx1Pos] = true;
            idx2[idx2Pos] = true;
            recursionQueen(rows + 1, n, col, idx1, idx2);
            col[i] = false;
            idx1[idx1Pos] = false;
            idx2[idx2Pos] = false;
        }

    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务