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(); }