我被告知制作一个10x10场地的船舶比赛项目。现在我需要知道如何在现场随机生成船的位置(这是一个10x10阵列)。这些字段不能彼此叠加,它们不能彼此相邻。它们也可以是水平或垂直的。
我需要放置以下船只: 1艘五个领域的船 1艘四场船 2艘三场战舰 3艘船两艘 4艘船只
我真的没看到我能做到这一点。这就是我到目前为止所做的:
void generateField(int field[][dim])
{
int i,j;
for (i=0; i<dim; i++)
{
for (j=0; j<dim; j++)
{
field[i][j] = 0;
}
}
}
这使得该字段全为零。我想像之前说的那样生成船只
答案 0 :(得分:2)
好像你想要一个接受int(size_of_boat)的方法,然后为x
和y
选择一个随机数(比方说:2,5)。
您需要做的就是检查您是否可以从该点开始适合该船
1.左转进入size_of_boat。如果你没有找到任何其他“占用”位,或者你没有离开董事会。不错。
2.如果没有,检查......
对... ...
下来......
如果找到了方向,请将数组中的这些位设置为true,然后返回true。 如果没有,这意味着你不能把那个大小的船放在那个位置,所以随机搜索另一个位置再试一次。
这不是最佳算法,但我确信它足以满足您的需求