【问题标题】:Searching for matrix way finding algorithm搜索矩阵寻路算法
【发布时间】:2013-02-22 09:33:11
【问题描述】:

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

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

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

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

到目前为止,非常感谢!

亲切的问候

【问题讨论】:

标签: php algorithm vector matrix


【解决方案1】:

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

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

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

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

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

这些方法以正确的顺序直接为您提供字段。对于小领域,我确实怀疑此级别的任何优化在大多数情况下都会产生很大的影响,Nicholas 方法可能同样好。

更新 我稍微修改了要选择的单元格,以遵守规则“仅考虑当前列或同一列中的字段”

【讨论】:

  • 比我的解决方案更令人印象深刻。如果 N 意外变大,我会遇到问题。 ;] +1
  • 我想我不明白^^ sry。这是否尊重我上面描述的左右两侧的问题?
  • 它现在确实考虑了附加约束。
【解决方案2】:

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

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

【讨论】:

  • 还有一条我忘了写的额外规则...我将编辑主要评论
  • 如果我的要求正确,您仍然需要对字段进行排序,这会给复杂性增加另一个 nlogn 因素。
猜你喜欢
  • 2015-09-26
  • 1970-01-01
  • 2017-09-24
  • 2011-12-24
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多