八皇后问题 回溯法

 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 Program
10     {
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                     else
23                         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 }

 

转载于:https://www.cnblogs.com/mandalaluo/p/4204269.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值