Beispiel #1
0
        public void WeakVertices_in_3v_where_Graph_Is_Triangle()
        {
            int size = 3;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(0); // добавляем вершины
            testGraph.AddVertex(10);
            testGraph.AddVertex(20);

            testGraph.AddEdge(0, 1); // добавление рёбер между вершинами
            testGraph.AddEdge(0, 2);
            testGraph.AddEdge(1, 2);

            List <Vertex <int> > WeakList = testGraph.WeakVertices();

            int expectedCount = 0;
            int actualCount   = WeakList.Count;

            if (WeakList.Count != 0)
            {
                WeakList.ForEach((item) => Console.Write("{0} ", item.Value));
            }
            else
            {
                Console.WriteLine("[]");
            }

            Assert.IsNotNull(WeakList);
            Assert.AreEqual(expectedCount, actualCount);
        }
Beispiel #2
0
        public void SimpleGraphTest()
        {
            //SimpleGraph graph = new SimpleGraph(4);

            int[] arr = { 10, 15, 21, 23 };

            foreach (int item in arr)
            {
                graph.AddVertex(item);
                for (int i = 0; i < graph.max_vertex; i++)
                {
                    if (graph.vertex[i] != null)
                    {
                        if (graph.vertex[i].Value == item)
                        {
                            for (int j = 0; j < graph.max_vertex; j++)
                            {
                                if (graph.IsEdge(i, j))
                                {
                                    Assert.Fail();
                                }
                            }
                        }
                    }
                }
            }
        }
        /*
         *          0   1   2   3   4   5   6   7   8   9
         *
         *
         * 0        0   1   1   0   1   0   0   0   0   0
         *
         * 1        1   0   0   0   0   0   0   1   0   1
         *
         * 2        1   0   0   1   0   0   0   0   0   0
         *
         * 3        0   0   1   0   1   0   0   0   0   0
         *
         * 4        1   0   0   1   0   1   0   0   0   0
         *
         * 5        0   0   0   0   1   0   0   0   0   1
         *
         * 6        0   0   0   0   0   0   0   1   0   1
         *
         * 7        0   1   0   0   0   0   1   0   0   0
         *
         * 8        0   0   0   0   0   0   0   0   0   0
         *
         * 9        0   1   0   0   0   1   1   0   0   0
         */
        private SimpleGraph <int> GetGraphB()
        {
            SimpleGraph <int> graph = new SimpleGraph <int>(10);

            graph.AddVertex(0);
            graph.AddVertex(1);
            graph.AddVertex(2);
            graph.AddVertex(3);
            graph.AddVertex(4);
            graph.AddVertex(5);
            graph.AddVertex(6);
            graph.AddVertex(7);
            graph.AddVertex(8);
            graph.AddVertex(9);

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

            return(graph);
        }
Beispiel #4
0
        public void TestAddED_RemoveED_3()
        {
            SimpleGraph graph = new SimpleGraph(4);

            graph.AddVertex(1);
            graph.AddVertex(2);
            graph.AddVertex(3);
            graph.AddVertex(4);

            graph.AddEdge(0, 1);
            graph.AddEdge(0, 2);
            graph.AddEdge(0, 3);
            graph.AddEdge(2, 3);
            Assert.IsFalse(graph.IsEdge(1, 3));
            Assert.IsFalse(graph.IsEdge(1, 2));
            Assert.IsTrue(graph.IsEdge(0, 1));
            Assert.IsTrue(graph.IsEdge(0, 2));
            Assert.IsTrue(graph.IsEdge(0, 3));
            Assert.IsTrue(graph.IsEdge(2, 3));

            graph.RemoveVertex(2);
            Assert.IsTrue(graph.vertex[2] == null);
            Assert.IsFalse(graph.IsEdge(0, 2));
            Assert.IsFalse(graph.IsEdge(2, 0));

            Assert.IsFalse(graph.IsEdge(3, 2));
        }
Beispiel #5
0
        public void BreadthFirstSearch_5_Vertex_Where_path_has_2v()
        {
            int size = 5;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(0); // добавляем вершины
            testGraph.AddVertex(10);
            testGraph.AddVertex(20);
            testGraph.AddVertex(30);
            testGraph.AddVertex(40);

            testGraph.AddEdge(0, 1); // добавление рёбер между вершинами
            testGraph.AddEdge(0, 3);
            testGraph.AddEdge(0, 4);

            testGraph.AddEdge(1, 2);
            testGraph.AddEdge(2, 3);
            testGraph.AddEdge(3, 4);

            List <Vertex <int> > vList = testGraph.BreadthFirstSearch(0, 4); // попытка построения пути из 0 (0) в 4 (40).

            vList.ForEach((item) => Console.Write(" {0}", item.Value));

            Assert.IsNotNull(vList);
            Assert.IsTrue(vList.Count == 2);
        }
Beispiel #6
0
        public void AddEdge_in_5v_Graph_If_v1_Is_not_Exists()
        {
            int size = 5;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(19);
            testGraph.AddVertex(18);
            testGraph.AddVertex(17);
            testGraph.AddVertex(16);

            testGraph.AddEdge(0, 4);

            for (int i = 0; i < testGraph.m_adjacency.GetLength(0); i++)
            {
                for (int j = 0; j < testGraph.m_adjacency.GetLength(1); j++)
                {
                    Console.Write(testGraph.m_adjacency[i, j] + " ");
                }
                Console.WriteLine();
            }
            Assert.IsTrue(testGraph.vertex[0].Value == 19); // вершина не изменились
            Assert.IsTrue(testGraph.vertex[1].Value == 18);
            Assert.IsTrue(testGraph.vertex[2].Value == 17);
            Assert.IsTrue(testGraph.vertex[3].Value == 16);
            Assert.IsNull(testGraph.vertex[4]);              // вершина не существует
            Assert.AreEqual(0, testGraph.m_adjacency[0, 4]); // ребро не добавлено к v0
            Assert.AreEqual(0, testGraph.m_adjacency[4, 0]); // ребро не добавлено к v4
        }
Beispiel #7
0
        public void TestAddED_RemoveED_5()
        {
            SimpleGraph graph = new SimpleGraph(3);

            graph.AddVertex(1);
            graph.AddVertex(2);
            graph.AddVertex(3);

            graph.AddEdge(0, 1);
            graph.AddEdge(0, 2);
            Assert.IsTrue(graph.m_adjacency[0, 1] == 1);
            Assert.IsTrue(graph.m_adjacency[0, 2] == 1);

            graph.RemoveEdge(0, 2);
            Assert.IsTrue(graph.m_adjacency[0, 1] == 1);
            Assert.IsTrue(graph.m_adjacency[0, 2] == 0);

            graph.AddEdge(2, 0);
            Assert.IsTrue(graph.m_adjacency[0, 1] == 1);
            Assert.IsTrue(graph.m_adjacency[0, 2] == 1);

            graph.RemoveEdge(2, 0);
            Assert.IsTrue(graph.m_adjacency[0, 1] == 1);
            Assert.IsTrue(graph.m_adjacency[2, 0] == 0);
        }
Beispiel #8
0
        public void AddVertex_5v_in_5v_Graph()
        {
            int size = 5;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(19);
            testGraph.AddVertex(18);
            testGraph.AddVertex(17);
            testGraph.AddVertex(16);
            testGraph.AddVertex(15);

            Assert.IsTrue(testGraph.vertex[0].Value == 19);
            Assert.IsTrue(testGraph.vertex[1].Value == 18);
            Assert.IsTrue(testGraph.vertex[2].Value == 17);
            Assert.IsTrue(testGraph.vertex[3].Value == 16);
            Assert.IsTrue(testGraph.vertex[4].Value == 15);
            Assert.AreEqual(size, testGraph.max_vertex);
            Assert.AreEqual(size, testGraph.vertex.Length);
            Assert.AreEqual(size, testGraph.m_adjacency.GetLength(0));
            Assert.AreEqual(size, testGraph.m_adjacency.GetLength(1));
            Assert.AreEqual(0, testGraph.m_adjacency[0, 0]);
            Assert.AreEqual(0, testGraph.m_adjacency[1, 0]);
            Assert.AreEqual(0, testGraph.m_adjacency[2, 0]);
            Assert.AreEqual(0, testGraph.m_adjacency[3, 0]);
            Assert.AreEqual(0, testGraph.m_adjacency[4, 0]);
        }
Beispiel #9
0
        public void AddVertex()
        {
            var g = new SimpleGraph(10);

            g.AddVertex(1);
            g.AddVertex(2);

            Assert.True(!g.IsEdge(1, 2));
        }
Beispiel #10
0
        public void RemoveVertex_1v_in_5v_Graph()
        {
            int size = 5;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(19);
            testGraph.AddVertex(18);
            testGraph.AddVertex(17);
            testGraph.AddVertex(16);
            testGraph.AddVertex(15);

            testGraph.AddEdge(0, 0); // добавление ребёр между вершинами
            testGraph.AddEdge(0, 1);
            testGraph.AddEdge(0, 2);
            testGraph.AddEdge(0, 3);
            testGraph.AddEdge(2, 1);
            testGraph.AddEdge(2, 3);

            for (int i = 0; i < testGraph.m_adjacency.GetLength(0); i++)
            {
                for (int j = 0; j < testGraph.m_adjacency.GetLength(1); j++)
                {
                    Console.Write(testGraph.m_adjacency[i, j] + " ");
                }
                Console.WriteLine();
            }

            Console.WriteLine();

            testGraph.RemoveVertex(0); // удаление вершины

            for (int i = 0; i < testGraph.m_adjacency.GetLength(0); i++)
            {
                for (int j = 0; j < testGraph.m_adjacency.GetLength(1); j++)
                {
                    Console.Write(testGraph.m_adjacency[i, j] + " ");
                }
                Console.WriteLine();
            }

            Assert.AreEqual(0, testGraph.m_adjacency[0, 0]); // проверка удаления ребра вершины на саму себя
            Assert.AreEqual(0, testGraph.m_adjacency[0, 1]); // проверка удаления всех рёбер
            Assert.AreEqual(0, testGraph.m_adjacency[1, 0]);
            Assert.AreEqual(0, testGraph.m_adjacency[0, 2]);
            Assert.AreEqual(0, testGraph.m_adjacency[2, 0]);
            Assert.AreEqual(0, testGraph.m_adjacency[0, 3]);
            Assert.AreEqual(0, testGraph.m_adjacency[3, 0]);
            Assert.AreEqual(1, testGraph.m_adjacency[1, 2]);
            Assert.AreEqual(1, testGraph.m_adjacency[2, 1]);
            Assert.AreEqual(1, testGraph.m_adjacency[2, 3]);
            Assert.AreEqual(1, testGraph.m_adjacency[3, 2]);

            Assert.IsNull(testGraph.vertex[0]); // вершина удалена
        }
Beispiel #11
0
 public void TestAddVertex()
 {
     Assert.IsNull(_graph.vertex[4]);
     _graph.AddVertex(5);
     Assert.IsNotNull(_graph.vertex[4]);
     for (int i = 0; i < _graph.max_vertex; i++)
     {
         Assert.AreEqual(0, _graph.m_adjacency[4, i]);
         Assert.AreEqual(0, _graph.m_adjacency[i, 4]);
     }
 }
Beispiel #12
0
        public void TestAdd_Edge_1()
        {
            SimpleGraph graph = new SimpleGraph(5);

            graph.AddVertex(22);
            graph.AddVertex(5);
            graph.AddVertex(7);

            graph.AddEdge(0, 2);
            Assert.IsFalse(graph.IsEdge(1, 2));
            Assert.IsFalse(graph.IsEdge(0, 1));
            Assert.IsTrue(graph.IsEdge(0, 2));
        }
Beispiel #13
0
        public void AddEdge_5e_in_5v_Graph()
        {
            int size = 5;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(19);
            testGraph.AddVertex(18);
            testGraph.AddVertex(17);
            testGraph.AddVertex(16);
            testGraph.AddVertex(15);

            Assert.IsTrue(testGraph.vertex[0].Value == 19);
            Assert.IsTrue(testGraph.vertex[1].Value == 18);
            Assert.IsTrue(testGraph.vertex[2].Value == 17);
            Assert.IsTrue(testGraph.vertex[3].Value == 16);
            Assert.IsTrue(testGraph.vertex[4].Value == 15);
            Assert.AreEqual(size, testGraph.max_vertex);
            Assert.AreEqual(size, testGraph.vertex.Length);
            Assert.AreEqual(size, testGraph.m_adjacency.GetLength(0));
            Assert.AreEqual(size, testGraph.m_adjacency.GetLength(1));
            Assert.AreEqual(0, testGraph.m_adjacency[0, 2]);
            Assert.AreEqual(0, testGraph.m_adjacency[2, 0]);


            testGraph.AddEdge(0, 1); // добавление ребра между вершинами
            testGraph.AddEdge(0, 2);
            testGraph.AddEdge(0, 3);
            testGraph.AddEdge(2, 1);
            testGraph.AddEdge(2, 3);

            for (int i = 0; i < testGraph.m_adjacency.GetLength(0); i++)
            {
                for (int j = 0; j < testGraph.m_adjacency.GetLength(1); j++)
                {
                    Console.Write(testGraph.m_adjacency[i, j] + " ");
                }
                Console.WriteLine();
            }

            Assert.AreEqual(1, testGraph.m_adjacency[0, 1]);
            Assert.AreEqual(1, testGraph.m_adjacency[0, 2]);
            Assert.AreEqual(1, testGraph.m_adjacency[0, 3]);
            Assert.AreEqual(1, testGraph.m_adjacency[1, 0]);
            Assert.AreEqual(1, testGraph.m_adjacency[1, 2]);
            Assert.AreEqual(1, testGraph.m_adjacency[2, 0]);
            Assert.AreEqual(1, testGraph.m_adjacency[2, 1]);
            Assert.AreEqual(1, testGraph.m_adjacency[2, 3]);
            Assert.AreEqual(1, testGraph.m_adjacency[3, 0]);
            Assert.AreEqual(1, testGraph.m_adjacency[3, 2]);
        }
Beispiel #14
0
        public void AddVertex_1v_in_5v_Graph()
        {
            int size = 5;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(5);

            testGraph.AddVertex(19);

            foreach (Vertex <int> item in testGraph.vertex)
            {
                if (item != null)
                {
                    Console.Write(item.Value + ", ");
                }
                else
                {
                    Console.Write("null, ");
                }
            }

            Assert.IsTrue(testGraph.vertex[0].Value == 19);
            Assert.AreEqual(size, testGraph.max_vertex);
            Assert.AreEqual(size, testGraph.vertex.Length);
            Assert.AreEqual(size, testGraph.m_adjacency.GetLength(0));
            Assert.AreEqual(size, testGraph.m_adjacency.GetLength(1));
            Assert.AreEqual(0, testGraph.m_adjacency[0, 0]);
        }
Beispiel #15
0
        public void TestAddED_RemoveED_2()
        {
            SimpleGraph graph = new SimpleGraph(4);

            graph.AddVertex(1);
            graph.AddVertex(2);
            graph.AddVertex(3);
            graph.AddVertex(4);

            graph.AddEdge(0, 1);
            graph.AddEdge(0, 2);
            graph.AddEdge(0, 3);
            graph.AddEdge(2, 3);
            Assert.IsFalse(graph.IsEdge(1, 3));
            Assert.IsFalse(graph.IsEdge(1, 2));
            Assert.IsTrue(graph.IsEdge(0, 1));
            Assert.IsTrue(graph.IsEdge(0, 2));
            Assert.IsTrue(graph.IsEdge(0, 3));
            Assert.IsTrue(graph.IsEdge(2, 3));

            graph.RemoveVertex(2);
            Assert.IsTrue(graph.vertex[2] == null);
            Assert.IsFalse(graph.IsEdge(0, 2));
            Assert.IsFalse(graph.IsEdge(2, 0));

            Assert.IsFalse(graph.IsEdge(2, 3));
            Assert.IsFalse(graph.IsEdge(3, 2));

            Assert.IsTrue(graph.vertex[0] != null);
            Assert.IsTrue(graph.vertex[1] != null);
            Assert.IsTrue(graph.vertex[2] == null);
            Assert.IsTrue(graph.vertex[3] != null);

            Assert.IsTrue(graph.m_adjacency[0, 0] == 0);
            Assert.IsTrue(graph.m_adjacency[0, 1] == 1);
            Assert.IsTrue(graph.m_adjacency[0, 2] == 0);
            Assert.IsTrue(graph.m_adjacency[0, 3] == 1);
            Assert.IsTrue(graph.m_adjacency[1, 0] == 1);
            Assert.IsTrue(graph.m_adjacency[1, 2] == 0);
            Assert.IsTrue(graph.m_adjacency[1, 3] == 0);
            Assert.IsTrue(graph.m_adjacency[2, 0] == 0);
            Assert.IsTrue(graph.m_adjacency[2, 1] == 0);
            Assert.IsTrue(graph.m_adjacency[2, 3] == 0);
            Assert.IsTrue(graph.m_adjacency[3, 0] == 1);
            Assert.IsTrue(graph.m_adjacency[3, 1] == 0);
            Assert.IsTrue(graph.m_adjacency[3, 2] == 0);
        }
Beispiel #16
0
        public void TestAdd_1()
        {
            SimpleGraph graph = new SimpleGraph(5);

            graph.AddVertex(22);
            graph.AddVertex(5);
            graph.AddVertex(7);
            graph.AddVertex(41);
            graph.AddVertex(92);

            Assert.IsTrue(graph.vertex[0].Value == 22);
            Assert.IsTrue(graph.vertex[1].Value == 5);
            Assert.IsTrue(graph.vertex[2].Value == 7);
            Assert.IsTrue(graph.vertex[3].Value == 41);
            Assert.IsTrue(graph.vertex[4].Value == 92);
            Assert.IsFalse(graph.vertex[0].Value == 91);
        }
Beispiel #17
0
        // TODO: граничные случаи
        public static void Main(string[] args)
        {
            var g = new SimpleGraph <int>(9);

            g.AddVertex(0);
            g.AddVertex(1);
            g.AddVertex(2);
            g.AddVertex(3);
            g.AddVertex(4);
            g.AddVertex(5);
            g.AddVertex(6);
            g.AddVertex(7);
            g.AddVertex(8);

            g.AddEdge(0, 1);
            g.AddEdge(0, 2);
            g.AddEdge(0, 3);
            g.AddEdge(0, 4);

            g.AddEdge(1, 0);
            g.AddEdge(1, 2);
            g.AddEdge(1, 6);

            g.AddEdge(2, 1);
            g.AddEdge(2, 0);
            g.AddEdge(2, 3);

            g.AddEdge(3, 2);
            g.AddEdge(3, 0);
            g.AddEdge(3, 4);
            g.AddEdge(3, 7);

            g.AddEdge(4, 0);
            g.AddEdge(4, 3);
            g.AddEdge(4, 5);

            g.AddEdge(5, 4);
            g.AddEdge(5, 6);
            g.AddEdge(5, 7);

            g.AddEdge(6, 1);
            g.AddEdge(6, 5);

            g.AddEdge(7, 5);
            g.AddEdge(7, 3);

            var result = g.BreadthFirstSearch(1, 5);

            Console.WriteLine(result);
        }
        public void TestFirstSilly_1()
        {
            SimpleGraph <int> graph = new SimpleGraph <int>(5);

            graph.AddVertex(1);
            graph.AddVertex(2);
            graph.AddVertex(3);
            graph.AddVertex(4);
            graph.AddVertex(5);

            graph.AddEdge(0, 1);
            graph.AddEdge(0, 4);
            graph.AddEdge(1, 2);
            graph.AddEdge(2, 3);
            graph.AddEdge(3, 4);

            List <Vertex <int> > list = graph.BreadthFirstSearch(0, 4);
        }
Beispiel #19
0
        public void DepthFirstSearch_5_Vertex_where_1v_has_not_Adj()
        {
            int size = 5;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(19); // добавляем вершины
            testGraph.AddVertex(18);
            testGraph.AddVertex(17);
            testGraph.AddVertex(16);
            testGraph.AddVertex(15);

            testGraph.AddEdge(0, 1); // добавление рёбер между вершинами
            testGraph.AddEdge(0, 4);
            testGraph.AddEdge(1, 3);
            testGraph.AddEdge(3, 4);

            for (int i = 0; i < testGraph.m_adjacency.GetLength(0); i++)
            {
                for (int j = 0; j < testGraph.m_adjacency.GetLength(1); j++)
                {
                    Console.Write(testGraph.m_adjacency[i, j] + " ");
                }
                Console.WriteLine();
            }

            List <Vertex <int> > vList  = testGraph.DepthFirstSearch(0, 2); // попытка построения пути из 0 (ключ 19) в 2 (ключ 17).
            List <Vertex <int> > vList2 = testGraph.DepthFirstSearch(1, 2); // 1 (ключ 18) в 2 (ключ 17).
            List <Vertex <int> > vList3 = testGraph.DepthFirstSearch(3, 2); // 3 (ключ 16) в 2 (ключ 17).
            List <Vertex <int> > vList4 = testGraph.DepthFirstSearch(4, 2); // 4 (ключ 15) в 2 (ключ 17).

            vList.ForEach((item) => Console.WriteLine(item.Value));
            vList2.ForEach((item) => Console.WriteLine(item.Value));
            vList3.ForEach((item) => Console.WriteLine(item.Value));
            vList4.ForEach((item) => Console.WriteLine(item.Value));

            Assert.IsNotNull(vList);
            Assert.IsNotNull(vList2);
            Assert.IsNotNull(vList3);
            Assert.IsNotNull(vList4);
            Assert.IsTrue(vList.Count == 0);
            Assert.IsTrue(vList2.Count == 0);
            Assert.IsTrue(vList3.Count == 0);
            Assert.IsTrue(vList4.Count == 0);
        }
Beispiel #20
0
        public void TestAddRemove_Edge_1()
        {
            SimpleGraph graph = new SimpleGraph(5);

            graph.AddVertex(2);
            graph.AddVertex(5);

            graph.AddEdge(0, 1);
            Assert.IsFalse(graph.IsEdge(1, 2));
            Assert.IsFalse(graph.IsEdge(4, 2));
            Assert.IsTrue(graph.IsEdge(0, 1));
            Assert.IsTrue(graph.IsEdge(1, 0));

            graph.RemoveVertex(0);
            Assert.IsTrue(graph.vertex[0] == null);
            for (int i = 0; i < graph.vertex.Length; i++)
            {
                Assert.IsTrue(graph.m_adjacency[i, 0] == 0);
                Assert.IsTrue(graph.m_adjacency[0, i] == 0);
            }
        }
Beispiel #21
0
        public void DepthFirstSearch_5_Vertex()
        {
            int size = 5;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(19); // добавляем вершины
            testGraph.AddVertex(18);
            testGraph.AddVertex(17);
            testGraph.AddVertex(16);
            testGraph.AddVertex(15);

            testGraph.AddEdge(0, 1); // добавление рёбер между вершинами
            testGraph.AddEdge(0, 3);
            testGraph.AddEdge(0, 4);
            testGraph.AddEdge(1, 2);
            testGraph.AddEdge(1, 3);
            testGraph.AddEdge(2, 3);
            testGraph.AddEdge(3, 4);

            for (int i = 0; i < testGraph.m_adjacency.GetLength(0); i++)
            {
                for (int j = 0; j < testGraph.m_adjacency.GetLength(1); j++)
                {
                    Console.Write(testGraph.m_adjacency[i, j] + " ");
                }
                Console.WriteLine();
            }

            List <Vertex <int> > vList = testGraph.DepthFirstSearch(1, 4); // попытка построения пути из 1 (ключ 18) в 4 (ключ 15).

            vList.ForEach((item) => Console.WriteLine(item.Value));

            Assert.IsNotNull(vList);
            Assert.IsTrue(vList.Count == 3);
            Assert.AreEqual(18, vList[0].Value);
            Assert.AreEqual(19, vList[1].Value);
            Assert.AreEqual(15, vList[2].Value);
        }
Beispiel #22
0
        public void BreadthFirstSearch_10_Vertex_Where_Path_is_not_Exists()
        {
            int size = 10;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(0); // добавляем вершины
            testGraph.AddVertex(10);
            testGraph.AddVertex(20);
            testGraph.AddVertex(30);
            testGraph.AddVertex(40);
            testGraph.AddVertex(50);
            testGraph.AddVertex(60);
            testGraph.AddVertex(70);
            testGraph.AddVertex(80);

            testGraph.AddVertex(90); // ребро без связей

            testGraph.AddEdge(0, 1); // добавление рёбер между вершинами
            testGraph.AddEdge(0, 2);
            testGraph.AddEdge(0, 3);

            testGraph.AddEdge(1, 4);
            testGraph.AddEdge(2, 5);
            testGraph.AddEdge(3, 6);

            testGraph.AddEdge(4, 7);
            testGraph.AddEdge(5, 7);
            testGraph.AddEdge(5, 8);

            testGraph.AddEdge(6, 8);

            List <Vertex <int> > vList = testGraph.BreadthFirstSearch(0, 9); // попытка построения пути из 0 (0) в  9 (90).

            vList.ForEach((item) => Console.Write(" {0}", item.Value));

            Assert.IsNotNull(vList);
            Assert.IsTrue(vList.Count == 0);
        }
Beispiel #23
0
        private static IUndirectedGraph <String, Edge <String> > CreateStringGraph()
        {
            var g = new SimpleGraph <String, Edge <String> >(new EdgeFactory <string, Edge <string> >());

            var vertex1 = "1";
            var vertex2 = "2";
            var vertex3 = "3";
            var vertex4 = "4";

            // add the vertices
            g.AddVertex(vertex1);
            g.AddVertex(vertex2);
            g.AddVertex(vertex3);
            g.AddVertex(vertex4);

            // add edges to create a circuit
            g.AddEdge(vertex1, vertex2);
            g.AddEdge(vertex2, vertex3);
            g.AddEdge(vertex3, vertex4);
            g.AddEdge(vertex4, vertex1);

            return(g);
        }
Beispiel #24
0
        public void RemoveEdge()
        {
            var g = new SimpleGraph(4);

            g.AddVertex(1);
            g.AddVertex(2);

            g.AddEdge(1, 2);
            g.AddEdge(1, 1);

            Assert.True(g.IsEdge(1, 2));
            Assert.True(g.IsEdge(1, 1));

            g.RemoveEdge(1, 2);
            Assert.True(!g.IsEdge(1, 2));
            Assert.True(g.IsEdge(1, 1));

            g.RemoveEdge(1, 1);
            Assert.True(!g.IsEdge(1, 2));
            Assert.True(!g.IsEdge(1, 1));

            g.RemoveEdge(3, 3);
        }
Beispiel #25
0
        public void WeakVertices_in_5v_where_2v_Is_Weak()
        {
            int size = 5;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(0); // добавляем вершины
            testGraph.AddVertex(10);
            testGraph.AddVertex(30);
            testGraph.AddVertex(50);
            testGraph.AddVertex(70);

            testGraph.AddEdge(0, 1); // добавление рёбер между вершинами
            testGraph.AddEdge(0, 2);
            testGraph.AddEdge(0, 3);
            testGraph.AddEdge(0, 4);
            testGraph.AddEdge(3, 4);

            List <Vertex <int> > WeakList = testGraph.WeakVertices();

            int expectedCount = 2;
            int actualCount   = WeakList.Count;

            if (WeakList.Count != 0)
            {
                WeakList.ForEach((item) => Console.Write("{0} ", item.Value));
            }
            else
            {
                Console.WriteLine("[]");
            }

            Assert.IsNotNull(WeakList);
            Assert.AreEqual(expectedCount, actualCount);
            Assert.IsTrue(WeakList[0].Value == 10);
            Assert.IsTrue(WeakList[1].Value == 30);
        }
Beispiel #26
0
        public void WeakVertices_in_3v_where_All_Is_Weak()
        {
            int size = 3;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(0); // добавляем вершины
            testGraph.AddVertex(10);
            testGraph.AddVertex(20);

            testGraph.AddEdge(0, 1); // добавление рёбер между вершинами
            testGraph.AddEdge(0, 2);

            List <Vertex <int> > WeakList = testGraph.WeakVertices();

            int expectedCount = 3;
            int actualCount   = WeakList.Count;

            WeakList.ForEach((item) => Console.Write("{0} ", item.Value));

            Assert.AreEqual(expectedCount, actualCount);
            Assert.IsTrue(WeakList[0].Value == 0);
            Assert.IsTrue(WeakList[1].Value == 10);
            Assert.IsTrue(WeakList[2].Value == 20);
        }
Beispiel #27
0
        public void WeakVertices_in_9v_where_2v_Is_Weak()
        {
            int size = 9;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(0); // добавляем вершины
            testGraph.AddVertex(10);
            testGraph.AddVertex(20);
            testGraph.AddVertex(30);
            testGraph.AddVertex(40);
            testGraph.AddVertex(50);
            testGraph.AddVertex(60);
            testGraph.AddVertex(70);
            testGraph.AddVertex(80);

            testGraph.AddEdge(0, 1); // добавление рёбер между вершинами
            testGraph.AddEdge(0, 3);
            testGraph.AddEdge(0, 4);
            testGraph.AddEdge(1, 5);
            testGraph.AddEdge(2, 5);
            testGraph.AddEdge(2, 6);

            testGraph.AddEdge(3, 4);
            testGraph.AddEdge(4, 5);
            testGraph.AddEdge(5, 6);
            testGraph.AddEdge(3, 7);
            testGraph.AddEdge(4, 7);
            testGraph.AddEdge(6, 8);

            List <Vertex <int> > WeakList = testGraph.WeakVertices();

            int expectedCount = 2;
            int actualCount   = WeakList.Count;

            WeakList.ForEach((item) => Console.Write("{0} ", item.Value));

            Assert.AreEqual(expectedCount, actualCount);
            Assert.IsTrue(WeakList[0].Value == 10);
            Assert.IsTrue(WeakList[1].Value == 80);
        }
Beispiel #28
0
        public void TestAddED_RemoveED_4()
        {
            SimpleGraph graph = new SimpleGraph(7);

            graph.AddVertex(1);
            graph.AddVertex(2);
            graph.AddVertex(3);
            graph.AddVertex(4);
            graph.AddVertex(5);
            graph.AddVertex(6);
            graph.AddVertex(7);

            graph.AddEdge(0, 1);
            graph.AddEdge(0, 2);
            graph.AddEdge(0, 3);
            graph.AddEdge(0, 4);
            graph.AddEdge(0, 5);
            graph.AddEdge(0, 6);
            graph.AddEdge(3, 5);
            Assert.IsTrue(graph.m_adjacency[0, 3] == 1);
            Assert.IsTrue(graph.m_adjacency[0, 5] == 1);
            Assert.IsTrue(graph.vertex[3] != null);
            Assert.IsTrue(graph.vertex[5] != null);

            graph.RemoveVertex(3);
            Assert.IsTrue(graph.m_adjacency[0, 3] == 0);
            Assert.IsTrue(graph.m_adjacency[0, 5] == 1);
            Assert.IsTrue(graph.vertex[3] == null);
            Assert.IsTrue(graph.vertex[5] != null);

            graph.RemoveEdge(0, 5);
            Assert.IsTrue(graph.m_adjacency[0, 5] == 0);
            Assert.IsTrue(graph.vertex[5] != null);

            graph.AddEdge(5, 0);
            Assert.IsTrue(graph.m_adjacency[0, 5] == 1);
            Assert.IsTrue(graph.vertex[5] != null);
        }
Beispiel #29
0
        public void DepthFirstSearch_7_Vertex_where_Suboptimal_Path()
        {
            int size = 7;
            SimpleGraph <int> testGraph = new SimpleGraph <int>(size);

            testGraph.AddVertex(10); // добавляем вершины
            testGraph.AddVertex(20);
            testGraph.AddVertex(30);
            testGraph.AddVertex(40);
            testGraph.AddVertex(50);
            testGraph.AddVertex(70); // вершина короткого пути
            testGraph.AddVertex(60);

            testGraph.AddEdge(0, 1); // добавление рёбер между вершинами
            testGraph.AddEdge(0, 5);
            testGraph.AddEdge(1, 2);
            testGraph.AddEdge(2, 3);
            testGraph.AddEdge(3, 4);
            testGraph.AddEdge(4, 6);
            testGraph.AddEdge(5, 6);

            for (int i = 0; i < testGraph.m_adjacency.GetLength(0); i++)
            {
                for (int j = 0; j < testGraph.m_adjacency.GetLength(1); j++)
                {
                    Console.Write(testGraph.m_adjacency[i, j] + " ");
                }
                Console.WriteLine();
            }

            List <Vertex <int> > vList = testGraph.DepthFirstSearch(0, 6); // попытка построения пути из 0 (ключ 10) в 6 (ключ 60).

            vList.ForEach((item) => Console.WriteLine(item.Value));

            Assert.IsNotNull(vList);
            Assert.IsTrue(vList.Count == 6);
        }
Beispiel #30
0
        public void TestAdd_Edge_2()
        {
            SimpleGraph graph = new SimpleGraph(5);

            graph.AddVertex(22);
            graph.AddVertex(5);
            graph.AddVertex(7);
            graph.AddVertex(11);
            graph.AddVertex(52);
            graph.AddVertex(27);
            for (int i = 0; i < graph.max_vertex; i++)
            {
                Assert.IsTrue(graph.vertex[i].Value != 27);
            }


            graph.AddEdge(1, 4);
            graph.AddEdge(3, 4);
            graph.AddEdge(0, 1);
            Assert.IsFalse(graph.IsEdge(1, 2));
            Assert.IsFalse(graph.IsEdge(1, 3));
            Assert.IsFalse(graph.IsEdge(2, 0));
            Assert.IsFalse(graph.IsEdge(2, 1));
            Assert.IsFalse(graph.IsEdge(2, 3));
            Assert.IsFalse(graph.IsEdge(3, 0));
            Assert.IsFalse(graph.IsEdge(3, 1));
            Assert.IsFalse(graph.IsEdge(3, 2));
            Assert.IsFalse(graph.IsEdge(4, 0));
            Assert.IsFalse(graph.IsEdge(4, 2));

            Assert.IsTrue(graph.IsEdge(4, 1));
            Assert.IsTrue(graph.IsEdge(1, 4));
            Assert.IsTrue(graph.IsEdge(3, 4));
            Assert.IsTrue(graph.IsEdge(4, 3));
            Assert.IsTrue(graph.IsEdge(0, 1));
            Assert.IsTrue(graph.IsEdge(1, 0));
        }