public void TestCase1() { var vertices = new ExtendedVertex[] { new ExtendedVertex(1, new AdjacentEdge[] { new AdjacentEdge(2,10), new AdjacentEdge(4,30), new AdjacentEdge(5,100), }), new ExtendedVertex(2, new AdjacentEdge[] { new AdjacentEdge(3,50), }), new ExtendedVertex(3, new AdjacentEdge[] { new AdjacentEdge(5,10), }), new ExtendedVertex(4, new AdjacentEdge[] { new AdjacentEdge(3,20), new AdjacentEdge(5,50), }), new ExtendedVertex(5, new AdjacentEdge[0]), }; var alg = new DijkstraAlgorithm(vertices); var minPaths = alg.CalculateMinPath(); Assert.AreEqual(5, minPaths.Length); Assert.AreEqual("0,10,50,30,60", string.Join(",", minPaths)); }
static void Main(string[] args) { string filePath = args[0]; var stopWatch = new Stopwatch(); stopWatch.Start(); var nodesEnumerable = File.ReadLines(filePath); var vertices = nodesEnumerable.Select(node => node.Split(new[] { ' ', '\t', ',' }, StringSplitOptions.RemoveEmptyEntries)) .Select(nodeArray => { int nodeId = int.Parse(nodeArray[0]); var adjacentList = new List<AdjacentEdge>(); for (int i = 1; i < nodeArray.Length; i +=2) { adjacentList.Add(new AdjacentEdge(int.Parse(nodeArray[i]), int.Parse(nodeArray[i+1]))); } return new ExtendedVertex(nodeId, adjacentList.ToArray()); }) .ToArray(); stopWatch.Stop(); var initTime = stopWatch.ElapsedMilliseconds; Console.WriteLine("read and init time={0}", initTime); stopWatch.Restart(); var alg = new DijkstraAlgorithm(vertices); var result = alg.CalculateMinPath(); stopWatch.Stop(); Console.WriteLine("running time = {0}, result={1}", stopWatch.ElapsedMilliseconds, string.Join( ",", result[6], result[36], result[58], result[81], result[98], result[114], result[132], result[164], result[187], result[196])); Console.WriteLine("press any key"); Console.ReadLine(); }
public void TestCase2() { var vertices = new ExtendedVertex[] { new ExtendedVertex(1, new AdjacentEdge[] { new AdjacentEdge(2,50), new AdjacentEdge(3,10), new AdjacentEdge(5,45), }), new ExtendedVertex(2, new AdjacentEdge[] { new AdjacentEdge(5,10), }), new ExtendedVertex(3, new AdjacentEdge[] { new AdjacentEdge(1,20), new AdjacentEdge(4,15), }), new ExtendedVertex(4, new AdjacentEdge[] { new AdjacentEdge(2,20), new AdjacentEdge(5,35), }), new ExtendedVertex(5, new AdjacentEdge[] { new AdjacentEdge(4,30), }), new ExtendedVertex(6, new AdjacentEdge[] { new AdjacentEdge(4,3), }), }; var alg = new DijkstraAlgorithm(vertices); Assert.AreEqual("0,45,10,25,45,1000000", string.Join(",", alg.CalculateMinPath())); Assert.AreEqual("1000000,50,1000000,30,0,1000000", string.Join(",", alg.CalculateMinPath(5))); Assert.AreEqual("1000000,23,1000000,3,33,0", string.Join(",", alg.CalculateMinPath(6))); }