在C#中的List 上运行Dijkstra的算法

我在C#中有一个Point类型列表。 我想在这个点列表上运行Dijkstra的算法 ,其中列表中的第一个条目是起始位置。

有没有办法使用现有的库?

如果这样的库不存在,有没有办法用x和y坐标计算两点之间的距离。 例如,计算点​​A(x坐标= 2,y坐标= 4)和点B((x坐标= 9,y坐标= 7)之间的距离。

我使用ZedGraph库来构建图形。

我想你误解了,Dijkstra算法代表什么。

对于图中的给定源顶点(节点),算法找到该顶点与每个其他顶点之间具有最低成本(即最短路径)的路径。

您需要(我认为)基于坐标的两点之间的最低距离。

并且可以使用基本数学计算两点之间的距离:

Point p = new Point(4, 5); Point r = new Point(10, 2); double distance = Math.Sqrt(Math.Pow(pX - rX, 2) + Math.Pow(pY - rY, 2)); 

使用这些知识可以通过以下两个函数解决问题:

返回pr之间的距离:

 static double distance(Point p, Point r) { return Math.Sqrt(Math.Pow(pX - rX, 2) + Math.Pow(pY - rY, 2)); } 

返回points列表的fromIndex th元素的最近点的索引:

 static int closestPoint(List points, int fromIndex) { Point start = points[fromIndex]; int resultIndex = 0; for (int i = 1; i < points.Count; i++) { if (fromIndex == i) continue; Point current = points[i]; if (distance(start, current) < distance(start, points[resultIndex])) resultIndex = i; } return resultIndex; } 

如果我误解了你,我真的很抱歉!