查找最长路径网格

时间:2018-07-24 05:02:26

标签: algorithm hamiltonian-cycle

我正在使用仅允许在正交方向上移动的统一成本网格。这被用作游戏蛇的基础,在游戏蛇必须不断移动并尝试在棋盘上吃苹果。食物的位置和避免碰撞是使用经典的AStar算法完成的,以找到蛇头和食物之间的最短路径。但是,这种方法有时会导致蛇去觅食,从而使蛇没有通往下一个食物的明确路径。这条蛇最终被卡在一个不规则形状的矩形中,目前还没有进一步的模拟。

我的问题是:是否可以找到不规则矩形内最长的移动链,以保持最长的生命,并可能使蛇的尾巴停止阻塞通往下一个食物的路径?我已经看过汉密尔顿算法来尝试访问所有节点,但是似乎没有解决不规则形状的方法。解决方案不一定是完美的,但应始终尝试使蛇有最大机会从陷阱中逃脱。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

board [] [](让我们将板视为2D阵列)

现在为蛇所占据的细胞标记板[i] [j] ='S'

空闲单元格的空白空间

现在您的A *应该给您一条从蛇首到食物的道路。将此路径中的所有单元格标记为“#”。 (可选:取消标记从蛇尾开始的n-1个“ S”细胞,其中n是从蛇头到食物的最短路径。这是因为经过n步,蛇尾也会移动)

现在,对于所有将来的职位(在板子中随机抽取10个点),看看是否可以仅使用空白空间单元从食物位置到达所有这些职位。 (您可以在单个DFS中执行此操作)。如果您可以访问,则可以安全使用所选的路径。否则,请选择其他路径。