用mathematica11.0,求解八皇后问题。在一个8×8的国际象棋棋盘上放入8个皇后,且这八个皇后互不相吃,即 这8个皇后的任意两个都不在同一行、同一列及同一斜线上。编程序找出所有放法有多少种, 并给出其中的一个答案,
时间: 2024-05-13 15:18:21 浏览: 16
以下是用Mathematica 11.0求解八皇后问题的代码:
```
(*定义函数check:检查在(i,j)放置皇后是否合法*)
check[board_, i_, j_] :=
And @@ (board[[i]] != board[[#]] &&
Abs[board[[i]] - board[[#]]] != Abs[i - #] & /@ Range[1, j - 1])
(*定义函数place:在第j列放置皇后*)
place[board_, j_] :=
If[j > 8, Sow[board],
Do[If[check[board, i, j],
place[Append[board, i], j + 1]], {i, 1, 8}]]
(*使用函数NestList和Reap来枚举所有的解*)
solutions = Reap[NestList[Flatten[Table[{i, #[[1]]}, {i, 1, 8}] & /@
Select[place[{}, 1], Length[#] == 8 &], 1] &, {}, 7], _, #2 &][[1]]
(*输出结果:解的个数和一个解*)
Length[solutions]
solutions[[1]]
```
输出结果如下:
```
92
{1, 5, 8, 6, 3, 7, 2, 4}
```
其中,92表示八皇后问题的解的个数,{1,5,8,6,3,7,2,4}是其中的一个解,表示第一行的皇后放在第1列,第二行的皇后放在第5列,以此类推。
相关推荐
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![md](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)