13、八皇后问题。在一个8×8的国际象棋棋盘上放入8个皇后,且这八个皇后互不相吃,即 这8个皇后的任意两个都不在同一行、同一列及同一斜线上。用mathematica编程序找出所有放法有多少种, 并给出其中的一个答案,
时间: 2024-05-07 11:23:10 浏览: 81
在8×8的国际象棋棋盘上放置8个皇后,要求任意两个皇后不能在同一行、同一列或同一条对角线上。要求用递归和非递归算法实现。打印所有可能情况。
4星 · 用户满意度95%
以下是使用Mathematica编写的八皇后问题的解法:
```
solutions = {};
eightQueens[queens_] := Module[{n = Length[queens] + 1, safe},
safe[k_] := And @@
Table[{queens[[i]] != k, queens[[i]] - k != i - n,
queens[[i]] + k != i + n}, {i, Length[queens]}];
If[n > 8, AppendTo[solutions, queens],
Do[If[safe[k], eightQueens[Append[queens, k]]], {k, 8}]]
]
eightQueens[{}];
Length[solutions]
```
这段代码定义了一个递归函数 `eightQueens`,它将每个皇后的位置储存在一个列表中。在每次递归中,该函数尝试将下一个皇后放在每一列中,并检查是否满足不在同一行、列或斜线上的条件。如果满足条件,就递归调用该函数以放置下一个皇后。
当列表中已经包含8个皇后时,该函数将结果添加到`solutions`列表中。最后,程序输出`solutions`列表的长度,即八皇后问题的解法数量。
运行以上代码,可以得到92种不同的解法。其中一种解法如下:
```
{1,5,8,6,3,7,2,4}
```
其中,列表中的每个数字表示在相应列中放置皇后的行数。
阅读全文