N皇后——简单有效DFS

N皇后

**n 皇后问题** 是一个典型的NP问题,研究的是如何将 `n` 个皇后放置在 `n×n` 的棋盘上,并且使皇后彼此之间不能相互攻击。这里介绍一种简单,又相对时间复杂度低的DFS。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

示例:

输入:4
返回值:2

示例:

输入:8
返回值:92

代码:
判断两个皇后冲突:Math.abs(x1 - x2) == Math.abs(y1 - y2)

public class Solution {
        int sum;
        int a[] = new int[10];

        public void dfs(int k, int n) {
            if (k == n) { sum++;
                return; }
            for (int i = 0; i < n; i++) {       //遍历k行的n个位置
                int j;
                for (j = 0; j < k; j++) {       //检查冲突
                    if (a[j] == i || Math.abs(a[j] - i) == Math.abs(k - j)) {
                        break;
                    }
                }
                if (j == k) {
                    a[k] = i;
                    dfs(k + 1, n);
                }
            }
        }


        public int Nqueen(int n) {
            sum = 0;
            dfs(0, n);
            System.out.println(Arrays.toString(a));
            return sum;
        }
    }
posted @ 2022-05-11 17:27  言思宁  阅读(33)  评论(0编辑  收藏  举报