Run Dijkstra's Algorithm on a List<Point> in C#

 ̄綄美尐妖づ 提交于 2019-12-23 04:41:26

问题


I have a list of Point types in C#. I want to run Dijkstra's algorithm on this list of points where the first entry in the list is the starting location.

Is there a way of doing this using an existing library?

If such library doesn't exist, is there a way of calculating the distance between two points with x and y coordinates. For example, calculate the distance between point A (x coordinate =2, y coordinate = 4) and point B ((x coordinate =9, y coordinate = 7).

I have used the ZedGraph library to build the graph.


回答1:


I think you misunderstood, what the Dijkstra algorithm stands for.

For a given source vertex (node) in the graph, the algorithm finds the path with lowest cost (i.e. the shortest path) between that vertex and every other vertex.

What you need (i think) the lowest distance between two points based on their coordinates.

And the distance between two points can be counted using basic math:

Point p = new Point(4, 5);
Point r = new Point(10, 2);

double distance = Math.Sqrt(Math.Pow(p.X - r.X, 2) + Math.Pow(p.Y - r.Y, 2));

using this knowledge the problem could be solved with two functions like this:

Returns the distance between p and r:

static double distance(Point p, Point r)
{
     return Math.Sqrt(Math.Pow(p.X - r.X, 2) + Math.Pow(p.Y - r.Y, 2));
}

Returns the index of the closest point to the fromIndex th element of the points list:

static int closestPoint(List<Point> 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;
}

I'm really sorry, if i misunderstood you!



来源:https://stackoverflow.com/questions/12058722/run-dijkstras-algorithm-on-a-listpoint-in-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!