网格上各点之间的最近路径

时间:2019-02-17 16:05:39

标签: c# wpf algorithm grid-layout

我的网格尺寸为2000x2000。我在网格上存储了一些点,我想将其中一些连接起来,但是连接需要是从一个点到另一个点的最近路径。 我有:

private static readonly Dictionary<double,Point> ExistingPoints = new Dictionary<double, Point>(); private static Point[,] gridMatrix = new Point[200, 200];

其中ExistingPoints是放置在网格上的点的字典,而gridMatrix包含字典中的相同点,但是他的rowcolumn是除以点的x和y以10表示,因此可以在网格上表示。

那么如何找到从一个点到另一个点的最近路径?

编辑

路径只能在网格上,这意味着它只能在直线上,不能是直线,因此当我需要上/下/左/右时,它必须成90度

1 个答案:

答案 0 :(得分:0)

我们在评论中说的

Okey我会这样做:

List<Point> path = new List<Point>();
Point startingPoint = new Point(1000, 1000);
Point targetPoint = new Point(500, 500);
Point currentPos = startingPoint;

//Level in Y
while (currentPos.Y != targetPoint.Y)
{
     path.Add(new Point(currentPos.X, currentPos.Y);
     currentPos.Y += (currentPos.Y > targetPoint.Y ? -1 : 1);
}
//Level in X
while(currentPos.X != targetPoint.X)
{
     path.Add(new Point(currentPos.X, currentPos.Y);
     currentPos.X += (currentPos.X > targetPoint.X ? -1 : 1);
}

//Draw the lines in steps
for (int i = 0; i < path.Count()-1; i++)
{
     DrawLineBetween(path[i], path[i + 1]);
}
DrawLineBetween(path.Last(), targetPoint);

我没有测试代码,但是可以编译并且理论上可以工作。 DrawLineBetween方法当然仍然必须实现,但我想您这里已经准备就绪。

当然,您可以将X和Y调平组合成一个循环,然后按“阶梯”模式进行。