【问题标题】:How do I find the shortest way through a list of connected waypoints?如何通过已连接航点列表找到最短路径?
【发布时间】:2011-05-15 14:38:03
【问题描述】:
public class Waypoint
{
    System.Drawing.Point _loc = new System.Drawing.Point();
    public System.Drawing.Point Location { get { return _loc; } }

    List<Waypoint> _connections = new List<Waypoint>();
    public List<Waypoint> Connections { get { return _connections; } }

    public Waypoint() { }

    public Waypoint(int x, int y) { _loc = new System.Drawing.Point(x, y); }
}

...是我的航点类。
我需要找到从Waypoint AWaypoint B 的最短路径。
航路点是相互连接的。 (例如:X.Connections 包含 Y 所以 Y.Connections 包含 X
当我设计这个系统时,我已经想到了一种找到它们的方法......但是它不起作用。

【问题讨论】:

    标签: c# path-finding


    【解决方案1】:

    你想要的是A*算法。

    A* 是Dijkstra's algorithm 的扩展,但使用启发式方法来估计到最终目的地的距离(就像breadth-first-search 一样)。这是两全其美的。 :)

    Amit 的页面非常适合学习整个算法,但要更顺畅​​地介绍,请查看 this link。我花了一段时间才了解 A* 的工作原理,但我认为花时间学习它真的很值得。

    【讨论】:

    • 是的...但是 C# 中有什么我不需要真正理解的东西?
    • 如果您想听听我的意见,理解 A* 比简单地复制代码更好,从长远来看,它也会对您有所帮助,但随心所欲。 :)
    【解决方案2】:

    您正在描述Shortest path problem
    维基百科有一个算法列表。

    【讨论】:

    • 是的...但是 C# 中有什么我不需要真正理解的东西?
    • 我不想让它成为我的代码...另外我可以理解别人的代码。
    【解决方案3】:

    您可以通过从初始点到到达航点执行breadth first search 来最简单地做到这一点。

    【讨论】:

    • 这在我看来是最明智的方式。我会尝试翻译伪代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 2022-11-11
    相关资源
    最近更新 更多