C# 多点间最短路径

C# 多点间最短路径,c#,math,geometry,2d,C#,Math,Geometry,2d,我需要找到多个点之间的最短路线。假设我有以下四点: var startPoint = new Point(1, 1); var pointsToGoPast = new List<Point> { new Point(3,1); new Point(2,4); }; var endPoint = new Point(10, 10); var起始点=新点(1,1); var pointstogopass=新列表{新点(3,1);新点(2,4);}; var端点=新点(10,10);

我需要找到多个点之间的最短路线。假设我有以下四点:

var startPoint = new Point(1, 1);
var pointsToGoPast = new List<Point> { new Point(3,1); new Point(2,4); };
var endPoint = new Point(10, 10);
var起始点=新点(1,1);
var pointstogopass=新列表{新点(3,1);新点(2,4);};
var端点=新点(10,10);
所以,我想找出首先经过哪些点,以获得从起点到终点的最短路径

有人能帮我吗


更新:它必须通过PointsToGoPass列表中的每个点。每一条路线的成本是相等的。

你可以通过Dijkstra的算法来做到这一点

唯一需要更改的是项目中的权重,因为权重基于两点之间的距离。(因此,您需要修改
位置
以存储
,并修改
连接
以计算构造函数中的权重(距离)

Dijkstra类
{        
私有整数秩=0;
私有int[,]L;
私有int[]C;
公共int[]D;
私有int-trank=0;
公共Dijkstra(int-paramRank,int[,]paramArray)
{
L=新整数[paramRank,paramRank];
C=新整数[paramRank];
D=新的整数[paramRank];
秩=准秩;
for(int i=0;i0&&D[i]rank;trank++)
{
dijkstra();
Console.WriteLine(“迭代”+trank);
for(int i=0;i
正如已经指出的,不清楚从一个点到另一个点的成本是多少。这仅仅是这些点之间的距离吗? 无论如何,这样的问题可以用传统的线性规划来解决。 我刚刚制作了一个C#库来简化最短路径问题。可下载

在这个库上还有更多的工作要做,但是它应该以一种非常简单的方式提供您想要的东西

问候,


Bruce。

如果您有SQL server,就可以简单地解决这个问题

select geography :: Point(@PointALatitude, @PointALongitude, 4326).STDistance(geography::Point(@PointBLatitude, @PointBLongitude, 4326))

结果以米为单位返回,因此只要除以1000公里或1609.344英里

你就可以直接从任何一点移动到任何一点?两个点之间的成本是多少?我会同意Dijkstra在60年代解决了这个问题。他现在已经走了,你必须自己应用他的算法:你想访问每个点,还是仅仅找到一个点最短路径?最短路径更容易,访问每个点要困难得多。搜索旅行推销员问题,了解其复杂性。可能重复的
select geography :: Point(@PointALatitude, @PointALongitude, 4326).STDistance(geography::Point(@PointBLatitude, @PointBLongitude, 4326))