• 八皇后问题


      //八皇后问题   回溯算法
        class Program
        {
            //初始化一个二维数组
            public static int Row = 8;
            public static int Col = 8;
            public static int[,] maps = new int[8, 8];
            public static int  count=0;
    
            //如何去放皇后
    
            public static void PutQueen(int row)
            {
                //递归出口
                if (row == Row)
                {
                    //打印八皇后的摆法
                    PrintQueen();
                    return;
                }
    
    
                for (int i = 0; i < Col; i++)
                {
                    if (IsKO(row, i))
                    {
                        //将皇后放在该点
                        maps[row, i] = 8;
                        //递归去放皇后
                        PutQueen(row+1);
                        //回溯
                        maps[row, i] = 0;
                     
                    }
                }
            }
            public static void PrintQueen()
            {
                Console.WriteLine("********************");
                count++;
               
                Console.WriteLine("第{0}中摆法,",count);
                for (int i = 0; i < Row; i++)
                {
                    for (int j = 0; j < Col; j++)
                    {
                        Console.Write(" "+maps[i, j]);
                    }
                    Console.WriteLine();
                }
            }
    
    
    
    
            //改行,行列,
            //如果把皇后方法到(x,y)点,则需要判断该点是否可以放
    
    
            public static bool IsKO(int x, int y)
            {
                //遍历二维数组,判断该行,列,正斜边,逆斜边是否存在皇后
                for (int i = 0; i < Row; i++)
                {
                    for (int j = 0; j < Col; j++)
                    {
                       //判断该行,列,正斜边,逆斜边是否存在皇后
                        //正斜边  x-y等于恒定值
                        // 逆斜边 x+y
                        //行  i==x   列 j==y
    
                        if (i == x || j == y || i - j == x - y||  i+j==x+y)
                        {
                            if (maps[i, j] == 8) //如果该点放了一个皇后,则返回false
                            {
                                return false;
                            }
                        }
                    }
                }
                return true;
            }
            static void Main(string[] args)
            {
    
    
                PutQueen(0);
                Console.ReadKey();
            }
        }
  • 相关阅读:
    C#中IDisposable学习
    C# volatile与lock
    TFS源代码管理
    C#如何获取真实IP地址
    c# 协变和逆变
    基本数据类型
    用户交互
    变量.常量
    输出语句,注释,
    基础知识随笔
  • 原文地址:https://www.cnblogs.com/tianranhui/p/10731026.html
Copyright © 2020-2023  润新知