Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }