.NET 4.x BFS для ориентированного графа - C#

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

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

Имеется граф такого вида. Что непонятно: 1)Как добавлять смежные вершины в очередь для их проверки? 2)Как вообще организовать этот граф в коде? Предполагалось что смогу организовать его с помощью списка смежности графа, но как видите вышла полная чушь. Был бы очень рад примерам представления графов.
Листинг программы
  1. class Width
  2. {
  3. static void Main(string[] args)
  4. {
  5. //искомое число
  6. int given_number = 8;
  7. List<int>[][] list = new List<int>[7][];
  8. //инициализация подмассивов со списками соседей
  9. list[0] = new List<int>[1];
  10. list[1] = new List<int>[3];
  11. list[2] = new List<int>[2];
  12. list[3] = new List<int>[2];
  13. list[4] = new List<int>[1];
  14. list[5] = new List<int>[0];
  15. list[6] = new List<int>[0];
  16. list[7] = new List<int>[0];
  17. list[0][0].Add(1);
  18. list[1][1].Add(2);// добавление соседей 1 вершины в коллекцию
  19. list[1][2].Add(3);
  20. list[1][3].Add(4);
  21. list[2][1].Add(5);//2
  22. list[2][2].Add(6);
  23. list[3][1].Add(7);//3
  24. list[3][2].Add(8);
  25. list[4][1].Add(5);//4
  26. int temp;
  27. List<int>[]turn = new List<int>[8];
  28. for (int i = 0;i<=3; i++)
  29. {
  30. for (int j = 0; j <= 4; j++)
  31. {
  32. for (int s = 0; s < 8; s++)
  33. {
  34. turn[s] = list[j][i];
  35. // как сравнить значение в коллекции с искомым?
  36. if (turn[s] == given_number)
  37. Console.WriteLine("Поиск окончен, длин пути равна" + s);
  38. else
  39. temp = j;
  40. //как добавить смежные вершины в очередь??
  41. for (int q = 0; q < temp; q++)
  42. turn[s] = list[temp][i];
  43. }
  44. }
  45. }
  46. }
  47. }

Решение задачи: «.NET 4.x BFS для ориентированного графа»

textual
Листинг программы
  1.         public static void Main(string[] args)
  2.         {
  3.             var graph = new List< List<int>>()
  4.             {
  5.                 { new List<int> {1, 2, 3}},
  6.                 { new List<int> {4, 5}},
  7.                 { new List<int> {6, 7}},
  8.                 { new List<int> {4}},
  9.                 { new List<int> { }},
  10.                 { new List<int> { }},
  11.                 { new List<int> { }},
  12.                 { new List<int> { }},
  13.             };
  14.  
  15.             var path = BreadthFirstSearch(graph, 0);
  16.  
  17.             if (path.Count > 1)
  18.                 Console.WriteLine(String.Join(" ", path));
  19.         }
  20.  
  21.    static List<int> BreadthFirstSearch(List< List<int>> graph,
  22.             int start)
  23.         {
  24.             var path = new List<int>();
  25.             var queue = new Queue<int>();
  26.             var visited = new List<bool>(new bool[graph.Count]);
  27.            
  28.             queue.Enqueue(start);
  29.             path.Add(start);
  30.            
  31.             while (queue.Count > 0)
  32.             {
  33.                 int v = queue.Dequeue();
  34.                 foreach (int ver in graph[v])
  35.                     if (!visited[ver])
  36.                     {
  37.                         queue.Enqueue(ver);
  38.                         path.Add(ver);
  39.                         visited[ver] = true;
  40.                     }
  41.             }
  42.             return path;
  43.         }

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


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

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

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

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

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

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