13,递归,八皇后问题

Posted xiaojvhuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了13,递归,八皇后问题相关的知识,希望对你有一定的参考价值。

每摆放一个皇后,都检查和之前所有皇后是否冲突,否则回溯

1,ArrayQueen[i] == ArrayQueen[n]皇后是否在同一列
2,Math.Abs(n - i) == Math.Abs(ArrayQueen[n] - ArrayQueen[i])皇后是否在同一斜线上

C#代码实现如下:

using System;

namespace 数据结构
{
    public class Queen
    {
        //皇后数
        const int queenMax = 8;
        //统计共有多少种摆法
        static int count;
        //定义数组存放皇后位置结果,如{0,4,7,5,2,6,1,3}
        int[] arrayQueen = new int[queenMax];
        public static void Main(string[] args)
        {
            Queen queen = new Queen();
            queen.Check(0);
            Console.WriteLine($"共有{count}种摆法");
        }

        //打印皇后位置
        private void Print()
        {
            count++;
            foreach (var q in arrayQueen)
            {
                Console.Write(q+" ");
            }
            Console.WriteLine();
        }

        //n表示第几个皇后
        private void Check(int n)
        {
            if (n == queenMax)
            {
                Print();
                return;
            }
            //每一行都摆8次
            for (int j = 0; j < queenMax; j++)
            {
                //皇后摆放位置,回溯
                arrayQueen[n] = j;
                //如果没冲突摆放下个皇后
                if (judge(n))
                {
                    Check(n + 1);
                }
                //如果冲突继续摆放下一个皇后位置arrayQueen[n] = j++
            }
        }

        //n表示第几个皇后
        private bool judge(int n)
        {
            for (int i = 0; i < n; i++)
            {
                //ArrayQueen[i] == ArrayQueen[n]皇后是否在同一列
                //Math.Abs(n - i) == Math.Abs(ArrayQueen[n] - ArrayQueen[i])皇后是否在同一斜线上
                if (arrayQueen[i] == arrayQueen[n] || Math.Abs(n - i) == Math.Abs(arrayQueen[n] - arrayQueen[i]))
                {
                    return false;
                }
            }
            return true;
        }
    }
}

技术图片

以上是关于13,递归,八皇后问题的主要内容,如果未能解决你的问题,请参考以下文章

八皇后问题(递归方法详解)

回溯法八皇后问题(递归和非递归)

Python用迭代(yield)和递归解决八皇后问题

算法——八皇后问题(递归回溯实现)

python关于八皇后判断冲突函数的一些逻辑小问题

递归回溯之八皇后问题详解