题解 | #N皇后问题#

N皇后问题

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

import java.util.*;


public class Solution {
    int count = 0;
    boolean[] columns;  // 记录同一列是否已放置皇后
    boolean[] line1;  // 记录从左上到右下的对角线是否已放置皇后
    boolean[] line2; // 记录从左下到右上的对角线是否已放置皇后

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型 the n
     * @return int整型
     */
    public int Nqueen (int n) {
        columns = new boolean[n];
        line1 = new boolean[2 * n];
        line2 = new boolean[2 * n];
	    // 从第一行开始放置皇后
        dfs(n, 0);
        return count;
    }

    private void dfs(int n, int r) {
		// 所有行都放了一个皇后,为其中一个答案,count++
        if (r == n) {
            count++;
            return;
        }

        for (int j = 0; j < n; j++) {
		    // 判断当前行:r, 当前列:c以及对角线是否都不存在皇后
            if (!columns[j] && !line1[r + j] && !line2[r - j + n]) {
			    // 当前行放置好
                columns[j] = line1[r + j] = line2[r - j + n] = true;
			    // 到下一行找合适的列放置
                dfs(n, r + 1);
			    // 回溯
                columns[j] = line1[r + j] = line2[r - j + n] = false;
            }
        }
    }
}

全部评论

相关推荐

11-15 17:19
湖南大学 Java
成果成果成果果:这是哪个公司的hr,这么离谱吗,我没见过用性别卡技术岗的,身边女性同学拿大厂offer的比比皆是
点赞 评论 收藏
分享
09-27 00:29
东北大学 Java
伟大的麻辣烫:查看图片
阿里巴巴稳定性 77人发布 投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务