Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 可变环境下的路径搜索算法_Algorithm_Path Finding_A Star - Fatal编程技术网

Algorithm 可变环境下的路径搜索算法

Algorithm 可变环境下的路径搜索算法,algorithm,path-finding,a-star,Algorithm,Path Finding,A Star,我在调整A*算法以适应不断变化的环境方面遇到了困难。作为一个最小的例子,考虑这类流氓地图: ###### #! # ### # #S # ##+### ##F### ###### 目标是从S到F,但要做到这一点,玩家必须踩下打开门。我遇到的问题是,在A*中,一旦访问了一个网格点,它就会“关闭”,并且无法重新进入。如何修改算法以解决此难题?您可以运行*两次: 首先找到开关(!)的最短路径,该开关的门类似于 墙 然后找到从开关到门的最短路径 是空白瓷砖 最短路径将是这两条路径的组合。在您

我在调整A*算法以适应不断变化的环境方面遇到了困难。作为一个最小的例子,考虑这类流氓地图:

######
#!   #
###  #
#S   #
##+###
##F###
######
目标是从
S
F
,但要做到这一点,玩家必须踩下
打开门。我遇到的问题是,在A*中,一旦访问了一个网格点,它就会“关闭”,并且无法重新进入。如何修改算法以解决此难题?

您可以运行*两次:

  • 首先找到开关(
    )的最短路径,该开关的门类似于 墙
  • 然后找到从开关到门的最短路径 是空白瓷砖

  • 最短路径将是这两条路径的组合。

    在您的问题中,在A*中,当您访问一个点(x,y线)时,您不会再次访问同一点

    原因是在您的问题中,状态是网格中的位置,每个门的状态(打开或关闭)。 在开始的时候,在你的例子中,初始状态是(3,1,{false})。(false表示门已关闭)

    当你到达'时位置,新状态将为(1,1,{true}),因此现在当你到达门时,你将通过门。

    玩家是否知道按下该
    打开门
    +
    ?因为如果有多个开关没有指示它们打开了哪扇门,那么A*假设的完整信息将失败,算法无法解决问题。(此外,香草A*在处理迷宫方面相当糟糕。)