public void BreadthFirstSearchAllTest()
        {
            /*
             *             v1
             *            /\
             *           v2 v3
             *          /\    /\
             *         v4 v5 v6-v7
             *         \  /
             *         v8
             *
             *
             */

            Node <string> v1 = new Node <string>("v1");
            Node <string> v2 = new Node <string>("v2");
            Node <string> v3 = new Node <string>("v3");
            Node <string> v4 = new Node <string>("v4");
            Node <string> v5 = new Node <string>("v5");
            Node <string> v6 = new Node <string>("v6");
            Node <string> v7 = new Node <string>("v7");
            Node <string> v8 = new Node <string>("v8");

            Node <string>[] myNodes = new Node <string>[] {
                v1, v2, v3, v4, v5, v6, v7, v8
            };
            GraphAdjacentList <string> gh = new GraphAdjacentList <string>(myNodes);

            gh.AddEdge(v1, v2, 1);

            gh.AddEdge(v2, v4, 1);
            gh.AddEdge(v2, v5, 1);

            gh.AddEdge(v4, v8, 1);

            gh.AddEdge(v5, v8, 1);

            gh.AddEdge(v1, v3, 1);
            gh.AddEdge(v3, v6, 1);
            gh.AddEdge(v3, v7, 1);
            gh.AddEdge(v6, v7, 1);


            gh.BreadthFirstSearchAll();

            List <string> path = new List <string>();

            path.Add("v1,v2,v3,v4,v5,v6,v7,v8");

            Assert.IsNotNull(gh.Path);

            Assert.AreEqual(path.Count, gh.Path.Count);

            Assert.AreEqual(path[0], gh.Path[0]);
        }
        public void DeleteEdgeTest()
        {
            /*
             *      A-----B\
             *      |\     E
             *      | \   /
             *      C-  D/
             */

            Node <string> a = new Node <string>("A");
            Node <string> b = new Node <string>("B");
            Node <string> c = new Node <string>("C");
            Node <string> d = new Node <string>("D");
            Node <string> e = new Node <string>("E");

            Node <string>[] myNodes = new Node <string>[] {
                a, b, c, d, e
            };
            GraphAdjacentList <string> gh = new GraphAdjacentList <string>(myNodes);

            gh.AddEdge(a, b, 1);
            gh.AddEdge(a, b, 1);

            gh.AddEdge(b, e, 1);
            gh.AddEdge(e, d, 1);
            gh.AddEdge(d, c, 1);
            gh.AddEdge(c, a, 1);
            gh.AddEdge(a, d, 1);

            Assert.AreEqual(6, gh.GetNumOfEdge());


            gh.DeleteEdge(a, e);
            Assert.AreEqual(6, gh.GetNumOfEdge());

            gh.DeleteEdge(a, b);
            Assert.AreEqual(5, gh.GetNumOfEdge());

            gh.DeleteEdge(b, e);
            Assert.AreEqual(4, gh.GetNumOfEdge());


            gh.DeleteEdge(e, d);
            Assert.AreEqual(3, gh.GetNumOfEdge());


            gh.DeleteEdge(d, c);
            Assert.AreEqual(2, gh.GetNumOfEdge());

            gh.DeleteEdge(c, a);
            Assert.AreEqual(1, gh.GetNumOfEdge());

            gh.DeleteEdge(a, d);
            Assert.AreEqual(0, gh.GetNumOfEdge());
        }
        public void AddEdgeTest()
        {
            /*
             *      A-----B\
             *      |\     E
             *      | \   /
             *      C-  D/
             */

            Node <string> a = new Node <string>("A");
            Node <string> b = new Node <string>("B");
            Node <string> c = new Node <string>("C");
            Node <string> d = new Node <string>("D");
            Node <string> e = new Node <string>("E");

            Node <string>[] myNodes = new Node <string>[] {
                a, b, c, d, e
            };
            GraphAdjacentList <string> gh = new GraphAdjacentList <string>(myNodes);

            gh.AddEdge(a, b, 1);
            gh.AddEdge(a, b, 1);

            gh.AddEdge(b, e, 1);
            gh.AddEdge(e, d, 1);
            gh.AddEdge(d, c, 1);
            gh.AddEdge(c, a, 1);
            gh.AddEdge(a, d, 1);

            AdjacentListNode p = gh[0].FirstAdjacentListNode;

            Assert.IsNotNull(p);
            Assert.AreEqual(1, p.AdjacentVertexNodeIndex);
            p = p.Next;
            Assert.IsNotNull(p);
            Assert.AreEqual(2, p.AdjacentVertexNodeIndex);

            p = p.Next;
            Assert.IsNotNull(p);
            Assert.AreEqual(3, p.AdjacentVertexNodeIndex);
        }
        public void MyTestInitialize()
        {
            //设置这样的图

            /*
             *       v1-----v2
             *       |     /  |
             *       |    v4  |
             *       |   /  \ |
             *       |  /    \|
             *       v3/     v5
             *
             */

            nodes = new Node <string> [5];

            //设置节点
            v1 = new Node <string>("v1");
            v2 = new Node <string>("v2");
            v3 = new Node <string>("v3");
            v4 = new Node <string>("v4");
            v5 = new Node <string>("v5");

            nodes[0] = v1;
            nodes[1] = v2;
            nodes[2] = v3;
            nodes[3] = v4;
            nodes[4] = v5;


            graph = new  GraphAdjacentList <string>(nodes);


            //设置边
            graph.AddEdge(v1, v2, 1);
            graph.AddEdge(v1, v3, 1);

            graph.AddEdge(v2, v4, 1);
            graph.AddEdge(v2, v5, 1);


            graph.AddEdge(v3, v4, 1);
            graph.AddEdge(v4, v5, 1);
        }