This .NETStandart 2.1 library implements Dijkstra pathfinding algorithm.
Here`s an example how to use this lib.
usingPathfinding.Models;//Add Graph and other modelsusingPathfinding.Algoritms;//Graph extensions vara=newVertex<string>(){Data="a"};varb=newVertex<string>(){Data="b"};varc=newVertex<string>(){Data="c"};vard=newVertex<string>(){Data="d"};varab=newEdge<string>(){StartNode=a,EndNode=b,Distance=1};varbd=newEdge<string>(){StartNode=b,EndNode=d,Distance=2};varac=newEdge<string>(){StartNode=a,EndNode=c,Distance=1};varcd=newEdge<string>(){StartNode=c,EndNode=d,Distance=4};// 1 2//a-b -> b-d //// 1 4//a-c -> c-dvargraph=newGraph<string>();graph.Vertices=newHashSet<IVertex<string>>(new[]{a,b,c,d});graph.Edges=newHashSet<IEdge<string>>(new[]{ab,bd,ac,cd});varshortestPath=graph.FindShortestPath(a,d);foreach(varedgeinshortestPath){Console.WriteLine($"{edge.StartNode.Data} -> {edge.EndNode.Data} ");}Console out:
a -> b
b -> d
Having an xml file representing graph you can easily generate it.
testGraph.xml
<?xml version="1.0" encoding="utf-8" ?>
<graph>
<edgedistance="1">
<startNode>a</startNode>
<endNode>b</endNode>
</edge>
<edgedistance="2">
<startNode>b</startNode>
<endNode>d</endNode>
</edge>
<edgedistance="1">
<startNode>a</startNode>
<endNode>c</endNode>
</edge>
<edgedistance="4">
<startNode>c</startNode>
<endNode>d</endNode>
</edge>
</graph>usingPathfinding.GraphSources;varpath=@"./testGraph.xml";vargraph=XmlSource.GetGraphFromXml(path);