Algorithm 对a*算法使用不同的启发式

Algorithm 对a*算法使用不同的启发式,algorithm,Algorithm,我的教授给了我一个简单的编程任务——至少我这么认为。基本原理很简单:我有一个随机的迷宫,由n>20000个不同的房间组成。我想“嘿,太好了,让我们用A*来计算最佳路线”。现在我遇到了以下问题: 我教授的java程序将房间随机分成一个大数组,保存X房间的所有后续房间。示例: 房间[2427][{42},{289},{2833}]//房间2427紧挨着房间42、289和2833——这3个房间可以从房间2427进入 A*需要一个好的启发式方法来衡量每个房间的以下成本。例如: 后续房间的总成本=当前房间

我的教授给了我一个简单的编程任务——至少我这么认为。基本原理很简单:我有一个随机的迷宫,由n>20000个不同的房间组成。我想“嘿,太好了,让我们用A*来计算最佳路线”。现在我遇到了以下问题:

我教授的java程序将房间随机分成一个大数组,保存X房间的所有后续房间。示例:

房间[2427][{42},{289},{2833}]//房间2427紧挨着房间42、289和2833——这3个房间可以从房间2427进入

A*需要一个好的启发式方法来衡量每个房间的以下成本。例如:

后续房间的总成本=当前房间的完整成本+从当前房间到后续房间的成本+估计的剩余成本

“估计的剩余成本”是个问题。如果我有一个2D阵列,我可以很容易地使用从a到b的空中距离作为一个基本的启发,因为至少会有X个成本(从a到b的空中距离)。但是我现在不能用它,因为我不知道房间在哪里!他们是完全随机的,我不知道23878房间在哪里

我还可以使用其他类型的启发式方法吗?我不能将每个开放房间的预计休息成本设置为0,可以吗?有更好的方法吗


谢谢

使用0作为启发式应该就行了。0-启发式实际上是a*算法的一个特例,也称为Dijkstra算法。

我认为在这种情况下没有可接受的启发式估计,即在所有情况下h(x)=0


然而,图的边似乎没有加权。您可以简单地编写BFS,它将在O(V+E)中以最佳速度运行(并且易于实现)。

我可能错了,但我认为没有一个可接受的启发式估计。我想这大概有一个小时了。。。我想也没有。在java中保存这些房间时,没有办法说出像空中距离这样聪明的东西。棘手的事情。那么,我是否应该将h值(估计的剩余成本)设置为0?是的,我认为如果存在负权重边,则必须使用通用Dijkstra或Bellman Ford。是的,对于迷宫,没有任何启发式方法可以帮助加快计算速度。下一个房间和后面的路可以一直通向起点。简单的迪杰克斯特拉是一条路要走A*适用于大多数情况下具有某种程度可能的总体方向的地图。