复杂的路径

时间:2009-12-11 06:02:53

标签: c# algorithm math

                      L->|
  A -> B              ^  |
  |__> C -> D-> G->X--|  |
       K    |_> T  |  |_>Z
       |___________|

我希望这张小图有助于传达我想要做的事情。

我有一个包含7,000个位置的列表,每个位置都有一个未定义但门数较少的位置。每扇门都是两个地点之间的桥梁。

参考上面的图表,我将如何找到通过大门从A到Z的最快路线?

我不需要完整的源代码,只需伪装代码即可。

显然你可以采取A - > B - > C - > D - > G - > X - > L - > Z, 但最短的路线是A - > B - > C - > K - > X - > ž。

4 个答案:

答案 0 :(得分:6)

将您的位置表示为节点,并将门表示为图形中的边。然后应用一些相当标准的shortest path algorithm(s),你就完成了。

答案 1 :(得分:2)

在维基百科上查找Pathfinding算法。你基本上在它们之间建立了一系列节点和连接,算法通过它们找到从开始到目标的方式。

答案 2 :(得分:2)

您可以假设每个房间都是一个节点,每个门都是一个节点,问题将在图表中找到最短路径,您可以使用Dijkstra's algorithm找到它,例如

答案 3 :(得分:2)

如果您有一个启发式可以对下一个尝试的最佳节点做出合理的猜测,那么您可以使用A *算法。我在我的博客上有一个C#实现;随意使用代码。给定正确的启发式算法,A *可以比其他路径寻找算法更有效率。

http://blogs.msdn.com/ericlippert/archive/tags/AStar/default.aspx