Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Computer science A-Star算法详细信息_Computer Science_Graph Algorithm_A Star - Fatal编程技术网

Computer science A-Star算法详细信息

Computer science A-Star算法详细信息,computer-science,graph-algorithm,a-star,Computer Science,Graph Algorithm,A Star,我启动了一个*算法,但我不知道它是如何工作的细节 例如,我有一个图表,它是: A->B=9(不是最初错误询问的90) A->C=20 C->D=40 现在我想从A开始,使用前面提到的路径转到D 如果我使用这个启发式函数:h(n)=直接到D的距离 B和D之间的直接距离为2,但B和D之间没有任何路径 我想知道的是: A*算法是否先转到B,然后再返回A(因为B和D(目标)之间没有任何路径) 或者我的启发式函数是不允许的?(但我在教科书中看到过,这是可以的)好吧,你应该给我们更多关于你的函数的细节 一般

我启动了一个*算法,但我不知道它是如何工作的细节

例如,我有一个图表,它是:

A->B=9(不是最初错误询问的90)

A->C=20

C->D=40

现在我想从A开始,使用前面提到的路径转到D

如果我使用这个启发式函数:h(n)=直接到D的距离 B和D之间的直接距离为2,但B和D之间没有任何路径

我想知道的是:

A*算法是否先转到B,然后再返回A(因为B和D(目标)之间没有任何路径)


或者我的启发式函数是不允许的?(但我在教科书中看到过,这是可以的)

好吧,你应该给我们更多关于你的函数的细节

一般来说,如果路径存在,A*应该返回该路径,因此您可以将不存在的路径视为一个无限成本,或者视为一个“到此为止”符号。
当您到达路径的终点而未到达目的地时,您将返回到具有其他可能性的前一个节点。因此,您的第一个问题的答案是“是”。

不确定您的问题是否属于此处,但在这种情况下:A*从A开始,分数为0。它找到B并分配分数为90,然后找到C并分配分数为20。它然后关闭A。因此A是关闭的,B和C是“打开的”。C在打开的节点中得分最低,所以它到了那里。现在它找到了D并停止,因为这是终点。在一个更有趣的例子中,B的得分比C低,所以它到了B。它找不到任何链接(所以不要添加新的打开的节点),然后关闭B。现在只有C是打开的,所以它会转到那里。其余的和以前一样。