首页 > 代码库 > 八皇后问题 回溯法

八皇后问题 回溯法

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace Demo 8 { 9     class Program10     {11         static int num = 8;/*可以随意修改,num是多少解的就是几皇后问题*/12         static int[] arr = new int[8];13         static int count = 0;14         static void display()/*一个简单的数组输出函数,顺便统计解的个数*/15         {16             for (int i = 0; i < num; ++i)17             {18                 for (int j = 0; j < num; j++)19                 {20                     if (arr[i] == j)21                         Console.Write("Q");22                     else23                         Console.Write("*");24                 }25 26                 Console.WriteLine(" ");27             }28             count++;29             Console.WriteLine("-------------" + count.ToString() + "--------------------");30         }31 32         static void queens(int pos = 0)33         {34             /*同在斜线或者直线上*/35             for (int i = 0; i < pos-1; ++i)36              {37                 int off = arr[i] - arr[pos - 1];38                 if (off == 0 || off == pos - 1 - i || -off == pos - 1 - i)39                     return;40             }41 42             /*符合条件就输出*/43             if (pos == num)44             { 45                 display(); 46                 return; 47             }48 49             /*递归搜索解空间*/50             for (int k = 0; k < num; ++k)51             {52                 arr[pos] = k;53                 queens(pos + 1);54             }55         }56 57         static void Main(string[] args)58         {59             queens(0);60 61             Console.ReadKey();62 63         }64     }65 }

 

八皇后问题 回溯法