【发布时间】:2019-12-05 13:08:02
【问题描述】:
我需要实现一个功能, 它返回一个满足以下要求的 6 x 6 矩阵:
- 棋盘上的36个数字必须是9个1、9个2、9个3和9个4
- 任何行或列不得包含 3 个或更多相同数量的直接邻居
- 函数返回值不能是常量
- 显然不允许使用预先计算好的答案
正确答案:
[[3, 2, 4, 1, 3, 2],
[2, 2, 1, 1, 4, 4],
[4, 4, 1, 3, 3, 2],
[4, 1, 3, 2, 2, 4],
[3, 1, 2, 4, 3, 1],
[3, 3, 1, 1, 2, 4]]
[[3, 3, 1, 2, 2, 4],
[1, 1, 3, 3, 2, 4],
[4, 4, 2, 1, 1, 3],
[2, 2, 3, 4, 4, 1],
[4, 4, 1, 1, 2, 2],
[3, 1, 2, 3, 3, 4]]
错误答案:
[[3, 3, 3, 2, 2, 4],
[1, 1, 1, 3, 2, 4],
[4, 4, 2, 1, 1, 3],
[2, 2, 3, 4, 4, 1],
[4, 4, 1, 1, 2, 2],
[3, 1, 2, 3, 3, 4]]
[[3, 3, 1, 2, 2, 4],
[1, 1, 2, 3, 2, 4],
[4, 4, 1, 1, 2, 3],
[2, 2, 3, 4, 4, 1],
[4, 4, 1, 1, 2, 2],
[3, 1, 2, 3, 3, 4]]
无需过多担心学术时间/空间的复杂性。更多地关注工程的观点。有什么好主意吗?
【问题讨论】:
-
回溯显然可以解决问题。另一种是随机生成一个,然后每三排“粉碎”一次,然后重新填充剩余的,直到它停止?
-
随机生成一个1s、2s、3s、4s分布正确的棋盘,不满足行/列条件则丢弃。只要有效的板相对常见,这应该可以正常工作。这就是所谓的“验收抽样”
标签: python algorithm numpy matrix nested-lists