Ejemplo n.º 1
0
        public void CanAddAVerticesToAdjacencyList()
        {
            MyGraph <string> graph = new MyGraph <string>();

            graph.AddNode("Hello");
            graph.AddNode("World");
            Assert.Equal(2, graph.Size());
        }
Ejemplo n.º 2
0
        public void ProperSizeIsReturned()
        {
            MyGraph <int> graph = new MyGraph <int>();
            Node <int>    nodeA = graph.AddNode(5);
            Node <int>    nodeB = graph.AddNode(10);
            Node <int>    nodeC = graph.AddNode(1);
            Node <int>    nodeD = graph.AddNode(99);

            Assert.Equal(4, graph.Size());
        }
Ejemplo n.º 3
0
        public void CanGetAllVerticesFromAdjacencyList()
        {
            MyGraph <string> graph = new MyGraph <string>();

            graph.AddNode("Hello");
            graph.AddNode("World");
            graph.AddNode("Foo");
            graph.AddNode("Bar");
            List <Vertex <string> > actual = graph.GettAllVertices();

            Assert.Equal(4, actual.Count);
        }
Ejemplo n.º 4
0
        public void CanAddDirectedEdge()
        {
            MyGraph <string> graph = new MyGraph <string>();
            Vertex <string>  v1    = graph.AddNode("Hello");
            Vertex <string>  v2    = graph.AddNode("World");

            graph.AddDirectedEdge(v1, v2, 50);
            string actual   = graph.Print();
            string expected = "Vertices: Hello and World, Weight: 50 --> null";

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 5
0
        public void CanAddEdgeToGraph()
        {
            MyGraph <int> graph        = new MyGraph <int>();
            Node <int>    nodeA        = graph.AddNode(5);
            Node <int>    nodeB        = graph.AddNode(10);
            Edge <int>    expectedEdge = new Edge <int>(nodeB, 7);

            graph.AddDirectedEdge(nodeA, nodeB, 7);
            List <Edge <int> > edges = graph.GetNeighbors(nodeA);

            Assert.Equal(expectedEdge.Node.Value, edges[0].Node.Value);
            Assert.Equal(expectedEdge.Weight, edges[0].Weight);
        }
Ejemplo n.º 6
0
        public void GivenAKey_WhenGraphAlreadyHaveAnNodeWithSameKey_ShouldNotAddIt()
        {
            // Arrange
            var graph = new MyGraph <string>();

            graph.AddNode("one");

            // Act
            graph.AddNode("one");

            // Assert
            graph.GetAll().Should().HaveCount(1);
        }
Ejemplo n.º 7
0
        public void WillReturnNullIfRootIsNotInGraph()
        {
            MyGraph <int> graph = new MyGraph <int>();

            Node <int> nodeA = graph.AddNode(5);
            Node <int> nodeB = graph.AddNode(10);
            Node <int> nodeC = graph.AddNode(1);
            Node <int> nodeD = graph.AddNode(7);

            graph.AddDirectedEdge(nodeA, nodeB, 1);
            graph.AddDirectedEdge(nodeA, nodeC, 3);

            Assert.Null(DepthFirstPreOrder(graph, nodeD));
        }
Ejemplo n.º 8
0
        public void CollectionOfAllNodesCanBeRetrieve()
        {
            MyGraph <int>      graph         = new MyGraph <int>();
            Node <int>         nodeA         = graph.AddNode(5);
            Node <int>         nodeB         = graph.AddNode(10);
            Node <int>         nodeC         = graph.AddNode(1);
            Node <int>         nodeD         = graph.AddNode(99);
            List <Node <int> > expectedNodes = new List <Node <int> > {
                nodeA, nodeB, nodeC, nodeD
            };

            List <Node <int> > actualNodes = graph.GetNodes();

            Assert.Equal(expectedNodes, actualNodes);
        }
Ejemplo n.º 9
0
        public void WillReturnFalsIfPathFromAtoDDoesNotExist()
        {
            MyGraph <int> graph = new MyGraph <int>();

            Node <int> nodeA = graph.AddNode(5);
            Node <int> nodeB = graph.AddNode(10);
            Node <int> nodeC = graph.AddNode(1);
            Node <int> nodeD = graph.AddNode(7);

            graph.AddDirectedEdge(nodeA, nodeB, 1);
            graph.AddDirectedEdge(nodeC, nodeB, 645);
            graph.AddDirectedEdge(nodeC, nodeD, 2);

            Assert.False(graph.PathBetween(nodeA, nodeD));
        }
Ejemplo n.º 10
0
        public void GivenTwoKeys_WhenGraphHaveThisNodesAndTheyDoNotHaveRelationship_ShouldConnectThisTwoNodes()
        {
            // Arrange
            var graph = new MyGraph <string>();

            graph.AddNode("one");
            graph.AddNode("two");

            // Act
            graph.AddEdge("one", "two");

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

            values.GetValue("one").Should().ContainSingle("two");
        }
Ejemplo n.º 11
0
        public void CanAddAVertexToAdjacencyList()
        {
            MyGraph <string> graph  = new MyGraph <string>();
            Vertex <string>  actual = graph.AddNode("Hello");

            Assert.True(graph.AdjacencyList.ContainsKey(actual));
        }
Ejemplo n.º 12
0
        public void WillReturnTrueIfPathFromAtoDExists()
        {
            MyGraph <int> graph = new MyGraph <int>();

            Node <int> nodeA = graph.AddNode(5);
            Node <int> nodeB = graph.AddNode(10);
            Node <int> nodeC = graph.AddNode(1);
            Node <int> nodeD = graph.AddNode(7);

            graph.AddDirectedEdge(nodeA, nodeB, 1);
            graph.AddDirectedEdge(nodeA, nodeC, 3);
            graph.AddDirectedEdge(nodeA, nodeD, 10);
            graph.AddDirectedEdge(nodeC, nodeB, 645);
            graph.AddDirectedEdge(nodeC, nodeD, 2);

            Assert.True(graph.PathBetween(nodeA, nodeD));
        }
Ejemplo n.º 13
0
        public void GivenTwoKeys_WhenGraphHaveTheseNodesAndTheyHaveRelationship_ShouldRemoveTheRelationship()
        {
            // Arrange
            var graph = new MyGraph <string>();

            graph.AddNode("node1");
            graph.AddNode("node2");
            graph.AddEdge("node1", "node2");

            // Act
            graph.RemoveEdge("node1", "node2");

            // Assert
            foreach (var item in graph.GetAll())
            {
                item.Value.Should().BeEmpty();
            }
        }
Ejemplo n.º 14
0
        public void GivenMoreThanOneKey_WhenGraphIsEmpty_ShouldAddThem()
        {
            // Arrange
            var graph = new MyGraph <string>();

            // Act
            graph.AddNode("one");
            graph.AddNode("two");
            graph.AddNode("three");

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

            values.Should().HaveCount(3);
            values.ContainsKey("one").Should().BeTrue();
            values.ContainsKey("two").Should().BeTrue();
            values.ContainsKey("three").Should().BeTrue();
        }
Ejemplo n.º 15
0
        public void CanAddNodeToTheGraph()
        {
            MyGraph <int> graph        = new MyGraph <int>();
            Node <int>    expectedNode = new Node <int>(5);

            Node <int> actualNode = graph.AddNode(5);

            Assert.Equal(expectedNode.Value, actualNode.Value);
        }
Ejemplo n.º 16
0
        public void GivenAGraph_WhenNodesHaveCycle_ShouldReturnTrue()
        {
            // Arrange
            var graph = new MyGraph <string>();

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

            graph.AddEdge("A", "B");
            graph.AddEdge("B", "C");
            graph.AddEdge("C", "A");

            // Act
            var hasCycle = graph.HasCycle();

            // Assert
            hasCycle.Should().BeTrue();
        }
        public void GivenAGraphWithNode_WhenTheyHaveDependencyFromEachOther_ShouldTopologicalSortComThoseDependencies()
        {
            // Arrange
            var graph = new MyGraph <string>();

            graph.AddNode("P");
            graph.AddNode("A");
            graph.AddNode("B");
            graph.AddNode("X");
            graph.AddEdge("X", "B");
            graph.AddEdge("X", "A");
            graph.AddEdge("A", "P");
            graph.AddEdge("B", "P");

            // Act
            var sort = graph.TopologicalSort();

            // Assert
            sort.Should().BeEquivalentTo("X", "B", "A", "P");
        }
Ejemplo n.º 18
0
        public void WillReturnListOfPreOrderNodes()
        {
            MyGraph <int> graph = new MyGraph <int>();

            Node <int> nodeA = graph.AddNode(5);
            Node <int> nodeB = graph.AddNode(10);
            Node <int> nodeC = graph.AddNode(1);
            Node <int> nodeD = graph.AddNode(7);

            graph.AddDirectedEdge(nodeA, nodeB, 1);
            graph.AddDirectedEdge(nodeA, nodeC, 3);
            graph.AddDirectedEdge(nodeB, nodeD, 2);

            List <Node <int> > expectedList = new List <Node <int> > {
                nodeA, nodeB, nodeD, nodeC
            };

            List <Node <int> > actualList = DepthFirstPreOrder(graph, nodeA);

            Assert.Equal(expectedList, actualList);
        }
Ejemplo n.º 19
0
        public void GivenAKey_WhenGraphHaveThisKey_ShouldRemoveIt()
        {
            // Arrange
            var graph = new MyGraph <string>();

            graph.AddNode("one");

            // Act
            graph.RemoveNode("one");

            // Assert
            graph.GetAll().Should().BeEmpty();
        }
Ejemplo n.º 20
0
        public void CanBreadthFirstTraverseGraph()
        {
            MyGraph <int> graph = new MyGraph <int>();

            Node <int> nodeA = graph.AddNode(5);
            Node <int> nodeB = graph.AddNode(10);
            Node <int> nodeC = graph.AddNode(1);
            Node <int> nodeD = graph.AddNode(7);

            graph.AddDirectedEdge(nodeA, nodeB, 1);
            graph.AddDirectedEdge(nodeA, nodeC, 3);
            graph.AddDirectedEdge(nodeC, nodeD, 2);

            List <Node <int> > expectedList = new List <Node <int> >()
            {
                nodeA, nodeB, nodeC, nodeD
            };

            List <Node <int> > actualList = graph.BreadthFist(nodeA);

            Assert.Equal(expectedList, actualList);
        }
Ejemplo n.º 21
0
        public void CanGetAllEdgesConnectedToAVertex()
        {
            MyGraph <string> graph = new MyGraph <string>();
            Vertex <string>  v1    = graph.AddNode("Wa");
            Vertex <string>  v2    = graph.AddNode("GA");
            Vertex <string>  v3    = graph.AddNode("CA");
            Vertex <string>  v4    = graph.AddNode("MI");

            graph.AddDirectedEdge(v1, v2, 50);
            graph.AddDirectedEdge(v1, v4, 100);
            List <int> actual   = new List <int>();
            List <int> expected = new List <int>()
            {
                50, 100
            };

            foreach (var item in graph.GetNeighbors(v1))
            {
                actual.Add(item.Weight);
            }
            Assert.Equal(expected, actual);
        }
Ejemplo n.º 22
0
        public void WillReturnSingleNodeGraph()
        {
            MyGraph <int> graph = new MyGraph <int>();
            Node <int>    nodeA = graph.AddNode(5);

            List <Node <int> > expectedList = new List <Node <int> >()
            {
                nodeA
            };

            List <Node <int> > actualList = graph.BreadthFist(nodeA);

            Assert.Equal(expectedList, actualList);
        }
Ejemplo n.º 23
0
        public void GivenANewKey_WhenGraphIsEmpty_ThenAddIt()
        {
            //Given
            var graph = new MyGraph <string>();

            //When
            graph.AddNode("one");

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

            values.Should().HaveCount(1);
            values.ContainsKey("one").Should().BeTrue();
        }
        private void BuildTheForest(int[,] grid, MyGraph <Coordinates> graph)
        {
            for (int i = 0; i < grid.GetLength(0); i++)
            {
                for (int j = 0; j < grid.GetLength(1); j++)
                {
                    if (grid[i, j] == 1)
                    {
                        var tempCoordinates = new Coordinates(i, j);
                        if (!graph.Contains(tempCoordinates))
                        {
                            graph.AddNode(tempCoordinates);
                        }

                        if (GetValidValue(grid, i + 1, j) == 1)
                        {
                            var otherCoordinates = new Coordinates(i + 1, j);
                            if (!graph.Contains(otherCoordinates))
                            {
                                graph.AddNode(otherCoordinates);
                            }
                            graph.AddUndirectedEdge(graph.Nodes.FindByData(tempCoordinates), graph.Nodes.FindByData(otherCoordinates), 0);
                        }
                        if (GetValidValue(grid, i, j + 1) == 1)
                        {
                            var otherCoordinates = new Coordinates(i, j + 1);
                            if (!graph.Contains(otherCoordinates))
                            {
                                graph.AddNode(otherCoordinates);
                            }
                            graph.AddUndirectedEdge(graph.Nodes.FindByData(tempCoordinates), graph.Nodes.FindByData(otherCoordinates), 0);
                        }
                    }
                }
            }
        }
Ejemplo n.º 25
0
        public void CanRetrieveListOfEdges()
        {
            MyGraph <int> graph = new MyGraph <int>();

            Node <int> nodeA = graph.AddNode(5);
            Node <int> nodeB = graph.AddNode(10);
            Node <int> nodeC = graph.AddNode(1);

            Edge <int>         edgeA         = new Edge <int>(nodeB, 2);
            Edge <int>         edgeB         = new Edge <int>(nodeC, 5);
            List <Edge <int> > expectedEdges = new List <Edge <int> > {
                edgeA, edgeB
            };

            graph.AddDirectedEdge(nodeA, nodeB, 2);
            graph.AddDirectedEdge(nodeA, nodeC, 5);

            List <Edge <int> > actualEdges = graph.GetNeighbors(nodeA);

            Assert.Equal(expectedEdges[0].Node.Value, actualEdges[0].Node.Value);
            Assert.Equal(expectedEdges[0].Weight, actualEdges[0].Weight);
            Assert.Equal(expectedEdges[1].Node.Value, actualEdges[1].Node.Value);
            Assert.Equal(expectedEdges[1].Weight, actualEdges[1].Weight);
        }
Ejemplo n.º 26
0
        public void GivenAKey_WhenGraphDoesntHaveIt_ShouldDoNothing()
        {
            // Arrange
            var graph = new MyGraph <string>();

            graph.AddNode("one");

            // Act
            graph.RemoveNode("two");

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

            values.Should().HaveCount(1);
            values.ContainsKey("one").Should().BeTrue();
        }
Ejemplo n.º 27
0
        public void GraphWithOnlyOneNodeAndOneEdgeCanBeRetrieved()
        {
            MyGraph <int> graph = new MyGraph <int>();
            Node <int>    nodeA = graph.AddNode(5);

            List <Node <int> > expectedNodes = new List <Node <int> >()
            {
                nodeA
            };

            graph.AddDirectedEdge(nodeA, nodeA, 5);

            List <Node <int> > actualNodes = graph.GetNodes();

            Assert.Equal(expectedNodes, actualNodes);
        }
Ejemplo n.º 28
0
 private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
 {
     if (e.Button == MouseButtons.Left)
     {
         if (AddNodeRadioButton.Checked)
         {
             if (checkBox1.Checked)
             {
                 counter++;
                 Val = int.Parse(ValueTB.Text) + counter;
             }
             else
             {
                 Val = int.Parse(ValueTB.Text);
             }
             Graph.AddNode(e.X, e.Y, Val);
         }
         else if (MoveNodeRadioButton.Checked)
         {
             Graph.MoveNode(e.X, e.Y);
         }
         else if (AddEdgeRadioButton.Checked)
         {
             Graph.CreateEdge(e.X, e.Y, int.Parse(ValueTB.Text));
         }
         else if (radioButtonDeleteNode.Checked)
         {
             Graph.DeleteNode(e.X, e.Y);
         }
         else if (radioButtonDeleteEdge.Checked)
         {
             Graph.DeleteEdge(e.X, e.Y);
         }
         Bitmap btm = new Bitmap(pictureBox1.Width, pictureBox1.Height);
         g = Graphics.FromImage(btm);
         Graph.DrawGraph(g);
         pictureBox1.Image = btm;
     }
 }
Ejemplo n.º 29
0
        private static void CreateGraph(ref MyGraph<string> myGraph)
        {
            //Adds nodes to our graph
            Node<String> n1 = myGraph.AddNode("OREGON");
            Node<String> n2 = myGraph.AddNode("CALIFORNIA");
            Node<String> n3 = myGraph.AddNode("IDAHO");
            Node<String> n4 = myGraph.AddNode("UTAH");
            Node<String> n5 = myGraph.AddNode("NEW MEXICO");
            Node<String> n6 = myGraph.AddNode("KANSAS");
            Node<String> n7 = myGraph.AddNode("SOUTH DAKOTA");
            Node<String> n8 = myGraph.AddNode("NORTH DAKOTA");
            Node<String> n9 = myGraph.AddNode("IOWA");
            Node<String> n10 = myGraph.AddNode("TENNESSEE");
            Node<String> n11 = myGraph.AddNode("NEW YORK");
            Node<String> n12 = myGraph.AddNode("FLORIDA");
            Node<String> n13 = myGraph.AddNode("TEXAS");

            //Creates edges between the graphs nodes
            myGraph.AddEdge("OREGON", "CALIFORNIA");
            myGraph.AddEdge("CALIFORNIA", "UTAH");
            myGraph.AddEdge("UTAH", "IDAHO");
            myGraph.AddEdge("UTAH", "NEW MEXICO");
            myGraph.AddEdge("NEW MEXICO", "KANSAS");
            myGraph.AddEdge("NEW MEXICO", "TEXAS");
            myGraph.AddEdge("TEXAS", "TENNESSEE");
            myGraph.AddEdge("TEXAS", "FLORIDA");
            myGraph.AddEdge("TEXAS", "KANSAS");
            myGraph.AddEdge("KANSAS", "SOUTH DAKOTA");
            myGraph.AddEdge("SOUTH DAKOTA", "NORTH DAKOTA");
            myGraph.AddEdge("NORTH DAKOTA", "IOWA");
            myGraph.AddEdge("IOWA", "TENNESSEE");
            myGraph.AddEdge("TENNESSEE", "FLORIDA");
            myGraph.AddEdge("TENNESSEE", "NEW YORK");
        }