Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            //int[,] graphMatrix; ;
            //GraphMatrixFromFile("graph_matrix.txt", out graphMatrix);
            //PrintGraphMatrix(ref graphMatrix);


            int GRAPH_SIZE = 6;

            int[,] GRAPH =
            {
                { 0, 1, 0, 0, 1, 0 },
                { 1, 0, 1, 0, 0, 1 },
                { 0, 1, 0, 1, 0, 1 },
                { 0, 0, 1, 0, 1, 0 },
                { 1, 0, 0, 1, 0, 1 },
                { 0, 1, 1, 0, 1, 0 }
            };



            #region Задание 2:
            //Написать рекурсивную функцию обхода графа в глубину.

            Console.WriteLine("Обход графа в глубину:\n");

            MyStack <int> stack             = new MyStack <int>();
            int[]         graphTopsActive_1 = new int[GRAPH_SIZE];
            int           step = 0;

            void GraphDepthTraverse(int topNumber)
            {
                graphTopsActive_1[topNumber] = 1;
                for (int relationTopNumber = 0; relationTopNumber < GRAPH_SIZE; relationTopNumber++)
                {
                    if (graphTopsActive_1[relationTopNumber] == 0 && GRAPH[topNumber, relationTopNumber] != 0)
                    {
                        stack.Push(relationTopNumber);
                    }
                }

                Console.WriteLine($"Шаг {++step}:");
                Console.Write("Вершины: ");
                PrintArray(ref graphTopsActive_1);

                Console.Write($"Стэк: ");
                stack.Print();
                Console.WriteLine("");

                if (stack.Length != 0)
                {
                    GraphDepthTraverse(stack.Pop());
                }
            }

            GraphDepthTraverse(0);

            #endregion



            #region Задание 3:
            //Написать функцию обхода графа в ширину.

            Console.WriteLine("Обход графа в ширину:\n");

            int[]       graphTopsActive_2 = new int[GRAPH_SIZE];
            MyDeq <int> deq = new MyDeq <int>();
            step = 0;

            void GraphWideTraverse(int top)
            {
                graphTopsActive_2[top] = 1;
                for (int relationTopNumber = 0; relationTopNumber < GRAPH_SIZE; relationTopNumber++)
                {
                    if (graphTopsActive_2[relationTopNumber] == 0 && GRAPH[top, relationTopNumber] != 0)
                    {
                        deq.PushFront(relationTopNumber);
                    }
                }

                Console.WriteLine($"Шаг {++step}:");
                Console.Write("Вершины: ");
                PrintArray(ref graphTopsActive_2);

                Console.Write($"Очередь: ");
                deq.Print();
                Console.WriteLine("");

                if (deq.Length != 0)
                {
                    GraphWideTraverse(deq.PopBack());
                }
            }

            GraphWideTraverse(0);

            #endregion



            Console.ReadKey();
        }