为A *算法使用不同的启发式算法

时间:2013-11-29 23:18:04

标签: algorithm

我的教授给了我一个简单的编程任务 - 至少我是这么认为的。基础很简单:我有一个随机的迷宫n> 20.000间不同的房间。我觉得“太棒了,让我们用A *来计算最佳路线”。现在我遇到了以下问题:

我教授的java程序将房间随机化为一个大型阵列,从X室保存所有后继房间。例如:

客房[2427] [{42},{289},{2833}] // 2427室位于42,289和2833房间旁边 - 这3间客房可以从2427房间进入。

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

Room Successor的TotalCosts = CurrentRoom的CompleteCosts +从CurrentRoom到Successor的成本+估计的剩余成本。

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

我可以使用其他任何启发式方法吗?我不能把每个开放房间的估计休息费用设为0,我可以吗?还有更好的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

使用0作为启发式应该可行。 0启发式实际上是A *算法的特例,也称为Dijkstra算法。

答案 1 :(得分:0)

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

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