Exemplo n.º 1
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));
        }
Exemplo n.º 2
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));
        }
        public void DirectedGetAllNeighbors()
        {
            MyGraph <string> graph = new MyGraph <string>();

            var a = graph.AddVertex("a");
            var b = graph.AddVertex("b");
            var c = graph.AddVertex("c");
            var d = graph.AddVertex("d");

            graph.AddDirectedEdge(d, a, 5);
            graph.AddDirectedEdge(a, b, 5);
            graph.AddDirectedEdge(a, c, 5);

            List <Tuple <Vertex <string>, int> > pointingToA = graph.GetNeighborsDirected(a);

            Assert.Equal(3, pointingToA.Count);
        }
Exemplo n.º 4
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));
        }
        public void DirectedGetNeighborsPointingFromC()
        {
            MyGraph <string> graph = new MyGraph <string>();

            var a = graph.AddVertex("a");
            var b = graph.AddVertex("b");
            var c = graph.AddVertex("c");
            var d = graph.AddVertex("d");

            graph.AddDirectedEdge(a, b, 5);
            graph.AddDirectedEdge(a, c, 5);
            graph.AddDirectedEdge(a, d, 5);
            graph.AddDirectedEdge(c, a, 1);

            List <Tuple <Vertex <string>, int> > pointingToC = graph.OutDegree(c);

            Assert.Single(pointingToC);
        }
        public void AddDirectedEdge()
        {
            MyGraph <string> graph = new MyGraph <string>();
            Vertex <string>  vert1 = new Vertex <string>("A");
            Vertex <string>  vert2 = new Vertex <string>("B");

            graph.AdjacencyList.Add(vert1, new List <Edge <string> >());
            graph.AdjacencyList.Add(vert2, new List <Edge <string> >());
            graph.AddDirectedEdge(vert1, vert2, 1);
            Assert.Equal(graph.AdjacencyList[vert1][0].Vertex, vert2);
        }
Exemplo n.º 7
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);
        }
Exemplo n.º 8
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);
        }
Exemplo n.º 9
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);
        }
Exemplo n.º 10
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);
        }
Exemplo n.º 11
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);
        }
Exemplo n.º 12
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);
        }
Exemplo n.º 13
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);
        }
        static void Main(string[] args)
        {
            MyGraph <string> graph = new MyGraph <string>();

            var a = graph.AddVertex("a");
            var b = graph.AddVertex("b");
            var c = graph.AddVertex("c");
            var d = graph.AddVertex("d");
            var e = graph.AddVertex("e");
            var f = graph.AddVertex("f");
            var g = graph.AddVertex("g");

            graph.AddUndirectedEdge(a, b, 5);
            graph.AddUndirectedEdge(b, c, 5);
            graph.AddUndirectedEdge(c, d, 5);
            graph.AddUndirectedEdge(d, e, 5);
            graph.AddUndirectedEdge(e, f, 5);
            graph.AddUndirectedEdge(f, g, 5);
            graph.AddUndirectedEdge(g, a, 5);

            graph.AddDirectedEdge(a, c, 1);


            graph.Print();

            //graph.GetNeighborsPointingTo(a);
            //graph.GetNeighborsPointingFrom(a);
            //both run by:
            graph.GetNeighborsDirected(a);

            MyGraph <string> graph1 = new MyGraph <string>();

            var j = graph1.AddVertex("A");
            var k = graph1.AddVertex("B");
            var l = graph1.AddVertex("C");
            var m = graph1.AddVertex("D");
            var n = graph1.AddVertex("E");
            var o = graph1.AddVertex("F");

            graph1.AddUndirectedEdge(j, k, 5);
            graph1.AddUndirectedEdge(k, l, 5);
            graph1.AddUndirectedEdge(k, m, 5);
            graph1.AddUndirectedEdge(l, n, 5);
            graph1.AddUndirectedEdge(l, o, 5);
            graph1.AddUndirectedEdge(m, o, 5);

            graph1.BreadthFirst(j);

            MyGraph <string> graph2 = new MyGraph <string>();

            var aa = graph2.AddVertex("aa");
            var bb = graph2.AddVertex("bb");
            var cc = graph2.AddVertex("cc");
            var dd = graph2.AddVertex("dd");
            var ee = graph2.AddVertex("ee");

            graph2.AddUndirectedEdge(aa, bb, 5);
            graph2.AddUndirectedEdge(aa, cc, 5);
            graph2.AddUndirectedEdge(aa, dd, 5);

            graph2.AddUndirectedEdge(bb, cc, 5);
            graph2.AddUndirectedEdge(cc, dd, 5);
            graph2.AddUndirectedEdge(dd, bb, 5);

            Console.WriteLine(graph2.ClusteringCoefficientUndirected(aa));
        }