我正在尝试在我正在制作的游戏中添加A *路径查找。我现在明白了怎么做,但我不明白回报是做什么的。 http://en.wikipedia.org/wiki/A*_search_algorithm是我正在使用的参考。问题:
return reconstruct_path(came_from, goal)
做什么?return failure
?答案 0 :(得分:0)
通常,return function()
首先评估堆栈上的function()
,然后父/调用函数返回函数返回的任何内容。
在您的情况下,return reconstruct_path(came_from, goal)
会评估reconstruct_path(came_from, goal)
并返回该值。
编辑:
例如 -
A(){
print(B());
}
B(){
return 10;
}
这是一个更加“静态”的回报如何运作的例子。这里,A()
是调用函数,B()
是被调用函数。在这种情况下,返回的值为10
。继续,在您的问题中,return f()
首先调用f()
。 f()
中包含return
并返回一个值 - 比如10
。然后无论f()
计算什么,都会被发送回原来的被叫函数。
答案 1 :(得分:0)
reconstruct_path
只是递归地返回路径所包含的节点列表。
答案 2 :(得分:0)
以下是维基百科链接中的功能:
function reconstruct_path(came_from, current_node)
if current_node in came_from
p := reconstruct_path(came_from, came_from[current_node])
return (p + current_node)
else
return current_node
return reconstruct_path(came_from, goal)
调用此函数。第一个if
递归调用reconstruct_path
,每次都使用不同的current_node
,直到current_node
不在came_from
中(直到if失败)。每次调用自身时,它都会返回p := p + current_node
。每次调用都会p
不断添加,p
成为一系列节点。
它遍历的东西came_from
是一些地图。它可能看起来像这样:
1, 2
2, 3
3, 4
调用came_from[1]
将返回2.或者,您可以说,“2来自1”。
简而言之:reconstruct_path
会自行调用,每次在地图came_from
中向后退一步,直到它构建路径p
。这可能看起来像“1,2,3,4”,坚持上面的例子。
return failure
。