我需要一些关于如何构建一个算法来放置多艘船只的建议,根据规则,船只不能重叠或接触(甚至是对角线)。在选择随机位置后,我如何确保还有足够的空间放置其余的船只呢?
例如,我想在一个6x6的二维数组上放置5艘船只,它们的大小分别为:5、4、3、1、1。有多种方法可以安排它们,其中一种如下所示:
随机算法看起来像这样:
例如,我想在一个6x6的二维数组上放置5艘船只,它们的大小分别为:5、4、3、1、1。有多种方法可以安排它们,其中一种如下所示:
-------------
| 1 1 1 1 1 . |
| . . . . . . |
| 2 2 2 2 . 4 |
| . . . . . . |
| 3 3 3 . . 5 |
| . . . . . . |
-------------
随机算法看起来像这样:
1. Get next ship
2. Get random cell and orientation
3. Try to fit ship (find any conflicts)
3a. If ship cannot fit, try different
cell and orientation, untill all cells
have been tried (function fails)
3b. If ship fits, get another ship (goto 1)
但是如果我使用它,我可能会像这样结束(编辑:更改以反映在步骤0中按大小排序的船只):
-------------
| . 3 3 3 . 4 | 5
| . . . . . . |
| . 2 2 2 2 . |
| . . . . . . |
| 1 1 1 1 1 . |
| . . . . . . |
-------------
意味着没有足够的空间放置大小为1个小方格的船只。我该如何避免这个问题?我应该如何实现在3b中放置函数 verifyRestShipsWillFit()
?