Реализация обхода графа в глубину (DFS) - C#

Узнай цену своей работы

Формулировка задачи:

Всем здравствуйте! Задача такова реализация обхода не взвешенного дерева, который задан матрицей смежности и поиск высоты дерева. Пыталась реализовать, но идет путаница в цикле. Помогите пожалуйста исправить код:
Листинг программы
  1. class Graff
  2. {
  3. public int[,] tree; // Матрица смежности неориентированного дерева
  4. }
  5. public Graff() // Конструктор: задаем дерево матрицей смежности
  6. {
  7. int[,] tree = new int[a, b];
  8. }
  9. public static void SearchDeep(ref int[,] tree) // Метод поиска в глубину и высота дерева
  10. {
  11. int height1 = 0; int height2 = 0;
  12. List<int> nodeDFS = new List<int>(); // создаем пустой список для перечисления вершин обхода в глубину
  13. nodeDFS.Add(0); // Добавляем корневую вершину, с которой начинается обход - вершина 0
  14. int[,] assist = (int[,])tree.Clone(); // копируем матрицу смежности во вспомогательный массив
  15. int var = 0;
  16. int a, b;
  17. for (a = var; a < assist.GetLength(0); a++) // !!!здесь идет сбой цикла когда var=b
  18. {
  19. if (height2 < height1)
  20. {
  21. height2 = height1;
  22. height1 = 0;
  23. }
  24. for (b = a + 1; b < assist.GetLength(1); b++)
  25. {
  26. if (assist[a, b] == 1)
  27. {
  28. height1++;
  29. nodeDFS.Add(b);
  30. assist[a, b] = 0;
  31. var = b;
  32. break;
  33. }
  34. else
  35. if (a != 0)
  36. {
  37. var = 0;
  38. }
  39. }
  40. }
  41. Console.WriteLine("Выведем список вершин при обходе дерева в глубину:");
  42. for (int i = 0; i < nodeDFS.Count; i++)
  43. {
  44. Console.WriteLine("\t" + nodeDFS[i]);
  45. }
  46. Console.WriteLine("Высота дерева:" + height2);
  47. }
  48. class Program
  49. {
  50. static void Main()
  51. {
  52. int[,] tree = new int[8, 8]{{0,1,1,1,0,0,0,0},
  53. {0,0,0,0,1,0,0,0},
  54. {1,0,0,0,0,0,0,0},
  55. {1,0,0,0,0,1,1,0},
  56. {1,0,0,0,0,0,0,0},
  57. {0,0,0,1,0,0,0,1},
  58. {0,0,0,1,0,0,0,0},
  59. {0,0,0,0,0,1,0,0}};
  60.  
  61. SearchDeep(ref tree);
  62. }
  63. }
Это фрагмент класса с методами, лишнее убрала. Возможно вы сможете предложить более оптимальный код. Буду благодарна. Итог компиляции этого кода во вложении

Решение задачи: «Реализация обхода графа в глубину (DFS)»

textual
Листинг программы
  1.        Stack<int> st = new Stack<int>();
  2.  
  3.         // поиск в глубину
  4.         bool DFS(int v)
  5.         {
  6.             if (ListVer[v].TyepVer == Vertex.TyepVerFoSoet.Black)
  7.                 return false;
  8.  
  9.             if (ListVer[v].TyepVer == Vertex.TyepVerFoSoet.Gray)
  10.                 return true;
  11.  
  12.             // при переходе на вершину красим ее в серый
  13.             ListVer[v].TyepVer = Vertex.TyepVerFoSoet.Gray;
  14.  
  15.             for (int i = 0; i < ListVer.Count; i++)
  16.             {
  17.                 if (AdjacencyMatrix[v, i])
  18.                 {
  19.                     if (DFS(i))
  20.                         return true;
  21.                 }                
  22.             }
  23.  
  24.             st.Push(v);
  25.             ListVer[v].TyepVer = Vertex.TyepVerFoSoet.Black;
  26.             return false;
  27.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут