Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            var newGraph = new WeightedGraph();

            newGraph.AddNode("A");
            newGraph.AddNode("B");
            newGraph.AddNode("C");
            newGraph.AddNode("D");

            newGraph.AddEdge("A", "B", 3);

            newGraph.AddEdge("B", "D", 4);

            newGraph.AddEdge("C", "D", 5);
            newGraph.AddEdge("A", "C", 1);
            newGraph.AddEdge("B", "C", 2);



            Console.WriteLine(newGraph.ShortestDistance("A", "D"));

            Console.WriteLine(newGraph.ShortestPath("A", "D"));

            Console.WriteLine(newGraph.MinimumSpaningTree());
        }
Ejemplo n.º 2
0
        public void TestHasCycleReturnFalseForCorrectGraph()
        {
            var graph = new WeightedGraph();

            graph.AddNode("a");
            graph.AddNode("b");
            graph.AddNode("c");
            graph.AddNode("p");
            graph.AddEdge("a", "b", 0);
            graph.AddEdge("b", "c", 0);
            var hasCycle = graph.HasCycle();

            Assert.That(false, Is.EqualTo(hasCycle));
        }
        private WeightedGraph <Char> TestCharGraph()
        {
            var graph = new WeightedGraph <Char>();

            var a = new CharNode('A');
            var b = new CharNode('B');

            graph.AddNode(a);
            graph.AddNode(b);

            graph.AddUndirectedEdge(a, b, 10);

            return(graph);
        }
Ejemplo n.º 4
0
        public void TestHasCycleReturnTrueIfThereIsCycle()
        {
            var graph = new WeightedGraph();

            graph.AddNode("a");
            graph.AddNode("b");
            graph.AddNode("c");
            graph.AddNode("p");
            graph.AddEdge("a", "b", 0);
            graph.AddEdge("b", "c", 0);
            graph.AddEdge("c", "a", 0);
            var hasCycle = graph.HasCycle();

            Assert.That(true, Is.EqualTo(hasCycle));
        }
Ejemplo n.º 5
0
        public void TestGetShortedPath()
        {
            var graph = new WeightedGraph();

            graph.AddNode("a");
            graph.AddNode("b");
            graph.AddNode("c");
            graph.AddNode("p");
            graph.AddEdge("a", "b", 1);
            graph.AddEdge("b", "c", 2);
            graph.AddEdge("a", "c", 10);

            var path = graph.GetShortedPath("a", "c");

            StringAssert.AreEqualIgnoringCase("a,b,c", path.ToString());
        }
Ejemplo n.º 6
0
        public void GivenTwoKeys_WhenBothExists_ShouldAddRelationship()
        {
            // Arrange
            var graph = new WeightedGraph <string>();

            graph.AddNode("test1");
            graph.AddNode("test2");
            graph.AddEdge("test1", "test2", 10);

            // Act
            var values = graph.GetAll();

            // Assert
            values.Should().NotBeNull().And.HaveCount(2);
            values.GetValueOrDefault("test1").Should().ContainSingle("test2");
            values.GetValueOrDefault("test2").Should().ContainSingle("test1");
        }
        public void TestExpandingEdges()
        {
            var graph = new WeightedGraph <Char>((oldEdge, newEdge) => newEdge > oldEdge);

            var a = new CharWeightedNode('A');
            var b = new CharWeightedNode('B');

            graph.AddNode(a);
            graph.AddNode(b);

            graph.AddUndirectedEdge(a, b, 10);
            Assert.AreEqual(10, a.Cost(b));

            graph.UpdateUndirectedEdge(a, b, 20);
            Assert.AreEqual(20, a.Cost(b));

            graph.UpdateUndirectedEdge(a, b, 6);
            Assert.AreEqual(20, a.Cost(b));
        }
        private WeightedGraph <Char> MockWeightedGraph()
        {
            var graph = new WeightedGraph <Char>();

            var a = new CharWeightedNode('A');
            var b = new CharWeightedNode('B');
            var c = new CharWeightedNode('C');
            var d = new CharWeightedNode('D');
            var e = new CharWeightedNode('E');
            var g = new CharWeightedNode('G');

            graph.AddNode(a);
            graph.AddNode(b);
            graph.AddNode(c);
            graph.AddNode(d);
            graph.AddNode(e);
            graph.AddNode(g);

            graph.AddUndirectedEdge(a, b, 20);
            graph.AddUndirectedEdge(a, e, 8);
            graph.AddUndirectedEdge(b, c, 18);
            graph.AddUndirectedEdge(b, d, 21);
            graph.AddUndirectedEdge(c, d, 15);
            graph.AddUndirectedEdge(c, e, 30);
            graph.AddUndirectedEdge(d, e, 12);

            return(graph);
        }
        public void TestUndirectedUnion()
        {
            var addition = new WeightedGraph <Char>();

            var a = new CharWeightedNode('A');
            var c = new CharWeightedNode('C');
            var f = new CharWeightedNode('F');
            var h = new CharWeightedNode('H');

            addition.AddNode(a);
            addition.AddNode(c);
            addition.AddNode(f);
            addition.AddNode(h);

            addition.AddUndirectedEdge(a, c, 11);
            addition.AddUndirectedEdge(a, h, 7);
            addition.AddUndirectedEdge(c, h, 14);

            var graph = MockWeightedGraph();

            graph.UndirectedUnion(addition);

            var bfs = "";

            graph.BFS(node => bfs += node.Content);
            Assert.AreEqual("ABECHDGF", bfs);

            var edges  = graph.UndirectedEdges();
            var actual = $"{edges.Length} edges";

            foreach (var edge in edges)
            {
                actual += $", {edge.Item1.Content.ToString()}-{edge.Item3.ToString()}-{edge.Item2.Content.ToString()}";
            }
            var expected = "10 edges, A-20-B, A-8-E, A-11-C, A-7-H, B-18-C, B-21-D, C-15-D, C-30-E, C-14-H, D-12-E";

            Assert.AreEqual(expected, actual);
        }
        public void Run()
        {
            var weightedGraphA = new WeightedGraph();

            weightedGraphA.AddNode("A");
            weightedGraphA.AddNode("B");
            weightedGraphA.AddNode("C");
            weightedGraphA.AddNode("D");
            weightedGraphA.AddNode("E");

            weightedGraphA.AddEdge("A", "B", 1);
            weightedGraphA.AddEdge("B", "C", 1);
            weightedGraphA.AddEdge("B", "E", 12);
            weightedGraphA.AddEdge("C", "D", 1);
            weightedGraphA.AddEdge("D", "E", 1);
            weightedGraphA.AddEdge("A", "E", 10);

            weightedGraphA.Print();

            Console.WriteLine($"Shortest path from A to E: {string.Join(",", weightedGraphA.GetShortestPath("A", "E"))}");
            Console.WriteLine("");

            Console.WriteLine($"Does graph A have a cycle?: {weightedGraphA.HasCycle()}");
            Console.WriteLine("");

            Console.WriteLine("Creating Graph B");
            var weightedGraphB = new WeightedGraph();

            weightedGraphB.AddNode("A");
            weightedGraphB.AddNode("B");
            weightedGraphB.AddNode("C");

            weightedGraphB.AddEdge("A", "B", 1);
            weightedGraphB.AddEdge("B", "C", 1);

            weightedGraphB.Print();
            Console.WriteLine("");

            Console.WriteLine($"Does graph B have a cycle?: {weightedGraphB.HasCycle()}");
            Console.WriteLine("");

            Console.WriteLine("Creating Graph C");
            var weightedGraphC = new WeightedGraph();

            weightedGraphC.AddNode("A");
            weightedGraphC.AddNode("B");
            weightedGraphC.AddNode("C");
            weightedGraphC.AddNode("D");
            weightedGraphC.AddEdge("A", "B", 3);
            weightedGraphC.AddEdge("B", "D", 4);
            weightedGraphC.AddEdge("C", "D", 5);
            weightedGraphC.AddEdge("A", "C", 1);
            weightedGraphC.AddEdge("B", "C", 2);
            weightedGraphC.Print();
            Console.WriteLine("");

            Console.WriteLine($"Minimum Spanning Tree for Graph C: ");
            var minimumSpanningTreeC = weightedGraphC.GetMinimumSpanningTree();

            minimumSpanningTreeC.Print();
        }