我正在用PHP开发一款棋盘游戏,现在我在编写算法时遇到了问题......
游戏板是一个多维数组($ board [10] [10]),用于定义板矩阵或向量的行和列......
现在我必须循环完整的主板但是有一个动态起点。例如,用户选择单元格[5,6]这是循环的起点。目标是找到所选单元周围的所有可用板单元,以找到移动方法的目标单元。我想我需要一种高效且有效的方法来做到这一点。有没有人知道一个循环遍历矩阵/向量的算法,只有每个字段才能找到可用和已用过的单元格?
额外规则...... 在附图中是选中的蓝色区域(比另一个稍大)。可用字段仅在右侧。左侧是可用的,但无法从当前选定的位置到达...我认为这是一个额外的信息,使算法有点复杂....
到目前为止,这是一个很大的问题!亲切的问候
答案 0 :(得分:1)
不完全确定我的要求是正确的,所以让我重申一下:
你想要一个有效的算法来遍历nxn矩阵的所有元素,其中n大约为10,它从给定的元素(i,j)开始,并按距离(i,j)的距离排序!?
我循环通过距离变量d从0到n / 2 然后对于l到 - (2 * d)到+(2 * d)-1的d循环的每个值 选择单元格(i + d,j + 1),如果i> = 0也选择(i + l,j-d),(i + l,j + d) 对于每个单元格,您必须应用模n,将负指数映射回矩阵。
这将矩阵基本上视为圆环,将上边缘和下边缘以及左右边缘粘合在一起。
如果您不喜欢,可以让d运行到n而不是模运算,只需忽略矩阵外的值。
这些aproaches直接以正确的顺序为您提供字段。对于小型领域,我怀疑在这个级别上的任何类型的优化在大多数情况下都有很大的影响,尼古拉斯的方法可能同样好。
<强>更新强> 我稍微修改了要选择的单元格,以遵守规则“仅考虑当前列或同一列中的字段”
答案 1 :(得分:0)
如果您的地图只有10x10,我会从[0] [0]循环,收集玩家移动的所有可能空间,然后按距离对当前玩家位置进行分级。 N很小,因此算法具有O(N ^ 2)这一事实不应该对您的性能产生太大影响。
也许拥有更多算法背景的人会有所帮助。