public void Test_Adjacency_list() { // 0 // 1 / \ 20 // 1 - 2 // 3 List <IList <WeightedNode> > adjacencyList = new List <IList <WeightedNode> > { new List <WeightedNode> { new WeightedNode(1, 1), new WeightedNode(2, 20) }, new List <WeightedNode> { new WeightedNode(0, 1), new WeightedNode(2, 3) }, new List <WeightedNode> { new WeightedNode(0, 20), new WeightedNode(1, 3) } }; //https://www.geeksforgeeks.org/dijkstras-algorithm-for-adjacency-list-representation-greedy-algo-8/ //List<IList<WeightedNode>> adjacencyList = new List<IList<WeightedNode>> //{ // new List<WeightedNode> {new WeightedNode(1, 4), new WeightedNode(7, 8)}, // new List<WeightedNode> {new WeightedNode(0, 4), new WeightedNode(7, 11), new WeightedNode(2, 8)}, // new List<WeightedNode> {new WeightedNode(1, 8), new WeightedNode(8, 2), new WeightedNode(5, 4), new WeightedNode(3, 7)}, // new List<WeightedNode> {new WeightedNode(2,7), new WeightedNode(5, 14), new WeightedNode(4, 9)}, // new List<WeightedNode> {new WeightedNode(3,9), new WeightedNode(5,10)}, // new List<WeightedNode> {new WeightedNode(4,10), new WeightedNode(3,14), new WeightedNode(2,4), new WeightedNode(6,2)}, // new List<WeightedNode> {new WeightedNode(5,2), new WeightedNode(8,6), new WeightedNode(7,1)}, // new List<WeightedNode> {new WeightedNode(6,1), new WeightedNode(8,7), new WeightedNode(1,11), new WeightedNode(0,8)}, // new List<WeightedNode> {new WeightedNode(7,7), new WeightedNode(6,6), new WeightedNode(2,2)} //}; var expected = new int[] { 0, 1, 4 }; var dijkstras = new Dijkstras(); var shortestPaths = dijkstras.FindMinPath(adjacencyList, 0); List <int> way = new List <int>(); for (var at = 2; at != 0; at = shortestPaths.path[at]) { way.Add(shortestPaths.path[at]); } way.Reverse(); CollectionAssert.AreEqual(expected, shortestPaths.dist); CollectionAssert.AreEqual(new[] { 0, 1 }, way); }
public void Test_Adjacency_matrix() { // 0 // 1 / \ 20 // 1 - 2 // 3 int[,] graph = { { 0, 1, 20 }, { 1, 0, 3 }, { 20, 3, 0 } }; var expected = new int[] { 0, 1, 4 }; var dijkstras = new Dijkstras(); var shortestPaths = dijkstras.FindMinPath(graph, 0); CollectionAssert.AreEqual(expected, shortestPaths); }