public void BasicTest()
        {
            //Graph with three vertexes
            Graph graph = new Graph(3);

            graph.Add(0, 1, 2);
            graph.Add(1, 2, 1);
            graph.Add(0, 2, 5);

            // Min cost path from vertex (0) to vertex (2)
            int[] result = new int[]{0, 1, 2};

            Assert.That(graph.ShortestPath(0, 2), Is.EqualTo(result));
        }
        public void CompleteGraphTest()
        {
            Graph graph = new Graph(5);

            graph.Add(0, 1, 3);
            graph.Add(0, 2, 7);
            graph.Add(0, 3, 9);
            graph.Add(0, 4, 1);
            graph.Add(1, 2, 5);
            graph.Add(1, 3, 5);
            graph.Add(1, 4, 3);
            graph.Add(2, 3, 2);
            graph.Add(2, 4, 9);
            graph.Add(3, 4, 8);

            int[] result = new int[]{0, 1, 3};

            Assert.That(graph.ShortestPath(0, 3), Is.EqualTo(result));
        }
        public void GraphWithBridgeTest()
        {
            Graph graph = new Graph(7);

            graph.Add(0, 1, 4);
            graph.Add(0, 2, 5);
            graph.Add(1, 3, 3);
            graph.Add(2, 3, 1);
            graph.Add(3, 4, 2);
            graph.Add(4, 5, 4);
            graph.Add(4, 6, 3);
            graph.Add(5, 6, 2);

            int[] result = new int[]{0, 2, 3, 4, 5};

            Assert.That(graph.ShortestPath(0, 5), Is.EqualTo(result));
        }
        public void ForestTest()
        {
            Graph graph = new Graph(6);

            graph.Add(0, 1, 1);
            graph.Add(0, 2, 1);
            graph.Add(1, 2, 1);
            graph.Add(3, 5, 1);
            graph.Add(3, 4, 1);
            graph.Add(4, 5, 1);

            int[] result = new int[0];

            Assert.That(graph.ShortestPath(0, 5), Is.EqualTo(result));
        }
        public void RegularGraphTest()
        {
            Graph graph = new Graph(6);

            graph.Add(0, 1, 2);
            graph.Add(0, 2, 4);
            graph.Add(1, 2, 1);
            graph.Add(2, 3, 5);
            graph.Add(1, 3, 8);
            graph.Add(1, 4, 10);
            graph.Add(3, 4, 2);
            graph.Add(3, 5, 6);
            graph.Add(4, 5, 3);

            int[] result = new int[]{0, 1, 2, 3, 4, 5};

            Assert.That(graph.ShortestPath(0, 5), Is.EqualTo(result));
        }
        public void WeirdGraphTest()
        {
            Graph graph = new Graph(8);

            graph.Add(0, 1, 2);
            graph.Add(1, 3, 1);
            graph.Add(1, 2, 4);
            graph.Add(3, 2, 2);
            graph.Add(2, 4, 2);
            graph.Add(2, 5, 2);
            graph.Add(5, 7, 3);
            graph.Add(5, 6, 5);
            graph.Add(6, 7, 1);

            int[] result = new int[]{6, 7, 5, 2, 3, 1, 0};

            Assert.That(graph.ShortestPath(6, 0), Is.EqualTo(result));
        }
        public void TreeGraphTest()
        {
            Graph graph = new Graph(8);

            graph.Add(0, 1, 1);
            graph.Add(0, 2, 1);
            graph.Add(2, 3, 1);
            graph.Add(2, 4, 1);
            graph.Add(2, 5, 1);
            graph.Add(4, 6, 1);
            graph.Add(4, 7, 1);

            int[] result = new int[]{1, 0, 2, 4, 6};

            Assert.That(graph.ShortestPath(1, 6), Is.EqualTo(result));
        }