c# leetcode 52. N皇后 II(回溯算法)

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

c# leetcode 52. N皇后 II(回溯算法)_第1张图片

上图为 8 皇后问题的一种解法。

给定一个整数 n,返回 n 皇后不同的解决方案的数量。

示例:

输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
 [".Q..",  // 解法 1
  "...Q",
  "Q...",
  "..Q."],

 ["..Q.",  // 解法 2
  "Q...",
  "...Q",
  ".Q.."]
] 

链接:https://leetcode-cn.com/problems/n-queens-ii 

        public static int TotalNQueens(int n)
        {
            int queens = 0;
            dfs(ref queens, new int[n], 0);
            return queens;
        }
        private static void dfs(ref int all, int[] result, int row)
        {
            if (row == result.Length)
            {
                all++;
                return;
            }

            for (int i = 0; i < result.Length; i++)
            {
                bool bAvail = true;
                for (int j = 0; j < row; j++)
                    if (result[j] == i || result[j] - row + j == i || result[j] - j + row == i) bAvail = false;
                if (bAvail)
                {
                    result[row] = i;
                    dfs(ref all, result, row + 1);
                }
            }
            return;
        }

 

你可能感兴趣的:(回溯算法,Leetcode)