我正在用 php 开发棋盘游戏,现在我在编写算法时遇到问题...
棋盘是一个多维数组($board[10][10])来定义棋盘矩阵或向量的行和列...
现在我必须循环遍历整个板,但要有一个动态起点。例如,用户选择单元格 [5,6] 这是循环的起点。目标是找到所选单元周围的所有可用棋盘单元,以找到移动方法的目标单元。我想我需要一种高效的方法来做到这一点。有谁知道循环遍历矩阵/向量的算法,每个字段只有一个来找到可用和使用的单元格?
额外规则... 在附加的图片中选择了一个蓝色字段(比另一个大一点)。可用字段仅在右侧。左侧可用但无法从当前选择的位置到达...我认为这是一个额外的信息,使算法有点复杂....
到目前为止非常感谢!
亲切的问候
最佳答案
不完全确定我的要求是否正确,所以让我重申一下:
您想要一个高效的算法来遍历 n 大约为 10 的 nxn 矩阵的所有元素,该矩阵从给定元素 (i,j) 开始并按与 (i,j) 的距离排序!?
我将遍历从 0 到 n/2 的距离变量 d 然后对于 d 的每个值循环 l 通过 -(2*d) 到 +(2*d)-1 选择单元格 (i+d, j+l),如果 i>=0 也选择 (i+l,j-d),(i+l, j+d) 对于每个单元格,您必须应用模 n,将负索引映射回矩阵。
这认为矩阵基本上是一个环面,将上下边缘以及左右边缘粘合在一起。
如果您不喜欢这样,您可以让 d 运行到 n,而不是模运算,而只是忽略矩阵外的值。
这些方法会以正确的顺序直接为您提供字段。对于小领域,我怀疑此级别上的任何优化在大多数情况下都会产生很大影响,Nicholas 方法可能同样好。
更新 我稍微修改了要选择的单元格,以遵守“仅考虑当前列或同一列中的字段”这一规则
关于php - 搜索矩阵寻路算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15020891/