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 - > ž。
答案 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