码迷,mamicode.com
首页 > 其他好文 > 详细

13,递归,八皇后问题

时间:2020-07-22 15:44:03      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:png   main   否则   code   foreach   多少   string   space   arp   

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

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,递归,八皇后问题

标签:png   main   否则   code   foreach   多少   string   space   arp   

原文地址:https://www.cnblogs.com/xiaojvhuang/p/13359877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!