php - 搜索矩阵寻路算法

标签 php algorithm vector matrix

我正在用 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/

相关文章:

php - Mod_rewrite 在 url 中返回空格

php - 如何将普通的 sql 查询转换为 Zend_Db_Select?

php - 如何将 example.com/index.php#anchor 的 URL 重写为 example.com/anchor?

php - Codeigniter 表单验证安全性

c - 如何测试一个点是否位于其表面由点云定义的 3d 形状内?

c - 来自有向边列表的顶点连接算法

c++ - 从整数列表中找到最小缺失整数的最快方法

algorithm - 如何遍历图中两个指定顶点之间的所有路径?

c# - 如何将 vector<double> 从 C++ 编码到 C#

c++ - 将数组转换为 vector 的最简单方法是什么?