2

我正在用 php 开发一个棋盘游戏,现在我在编写算法时遇到了问题......

游戏板是一个多维数组($board[10][10]),用于定义板矩阵或向量的行和列...

现在我必须遍历整个电路板,但要有一个动态的起点。例如,用户选择单元格 [5,6] 这是循环的起点。目标是找到所选单元格周围的所有可用棋盘单元格,以找到移动方法的目标单元格。我认为我需要一种高效且高效的方法来做到这一点。有谁知道循环遍历矩阵/向量的算法,只有每个字段才能找到可用和使用的单元格?

额外规则...在所附图片中选择了一个蓝色字段(比另一个大一点)。可用字段仅在右侧。左侧可用,但无法从当前选择的位置到达……我认为这是一个额外的信息,它使算法有点复杂……

到目前为止,谢谢!

亲切的问候

4

2 回答 2

1

不完全确定我的要求是正确的,所以让我重申一下:

您想要一个高效的算法来遍历 nxn 矩阵的所有元素,其中 n 大约为 10,它从给定元素 (i,j) 开始并按与 (i,j) 的距离排序!?

我会循环通过距离变量 d 从 0 到 n/2 然后对于 d 的每个值循环 l 到 -(2*d) 到 +(2*d)-1 选择单元格 (i+d, j +l),如果 i>=0 还为每个单元格选择 (i+l,jd),(i+l, j+d),您必须应用模 n,将负索引映射回矩阵。

这认为矩阵基本上是一个圆环,将上下边缘以及左右边缘粘合在一起。

如果你不喜欢这样,你可以让 d 运行到 n ,而不是模运算,只是忽略矩阵之外的值。

These aproaches give you the fields directly in the correct order. For small fields I do doubt any kind of optimization on this level has much of an effect in most situations, Nicholas approach might be just as good.

Update I slightly modified the cells to pick in order to honor the rule 'only consider fields that are right from the current column or on the same column'

于 2013-02-22T09:53:09.020 回答
0

如果您的地图只有 10x10,我会从 [0][0] 循环,收集玩家移动的所有可能空间,然后按与当前玩家位置的距离对空间进行分级。N 很小,因此算法具有 O(N^2) 的事实不会对您的性能产​​生太大影响。

也许在算法方面有更多背景的人有一些东西。

于 2013-02-22T09:39:52.950 回答