Задача на максимальный поток в Visual Basic - VB

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

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

У меня есть граф, в нём 25 точек.
Спойлер
необходимо решить задачу на максимальный поток. выходим из Донецка, приходим в Киев. вот как я находил это на графе меньшего размера:
Спойлер
а вот сам алгоритм нахождения (Форда — Фалкерсона): 1) Обнуляем все потоки. Остаточная сеть изначально совпадает с исходной сетью. 2) В остаточной сети находим любой путь из источника в сток. Если такого пути нет, останавливаемся. 3) Пускаем через найденный путь (он называется увеличивающим путём или увеличивающей цепью) максимально возможный поток: 1. На найденном пути в остаточной сети ищем ребро с минимальной пропускной способностью Cmin . 2. Для каждого ребра на найденном пути увеличиваем поток на Cmin , а в противоположном ему — уменьшаем на Cmin . 3. Модифицируем остаточную сеть. Для всех рёбер на найденном пути, а также для противоположных им рёбер, вычисляем новую пропускную способность. Если она стала ненулевой, добавляем ребро к остаточной сети, а если обнулилась, стираем его. 4) Возвращаемся на шаг 2. я сделал только часть, обнулил все потоки, но не пойму как выбрать путь из источника в сток, и что делать после этого. вот код:
Листинг программы
  1. Private Sub Form_Load()
  2. Dim a()
  3. Dim b()
  4. Dim n As Integer
  5. Dim Min As Integer
  6. n = 25
  7. ReDim a(n, n)
  8. ReDim b(n, n)
  9. Dim l(1 To 25) As Integer
  10. Dim m(1 To 25) As Integer
  11. Dim i%, j%
  12. Dim s As String, st As String
  13. Dim phi As String
  14. For i = 1 To n ' îáГ*óëåГ*ГЁГҐ ГўГ±ГҐГµ Г§Г*Г*Г·ГҐГ*ГЁГ© Г¬Г*Г±Г±ГЁГўГ* Г± Г°Г*ññòîÿГ*èÿìè
  15. For j = 1 To n
  16. a(i, j) = 0
  17. Next j
  18. Next i
  19. a(1, 2) = 248: a(1, 5) = 337: a(1, 6) = 273
  20. a(2, 3) = 151: a(2, 4) = 210: a(2, 5) = 133: a(2, 6) = 141
  21. a(3, 4) = 70: a(3, 5) = 166
  22. a(4, 5) = 156: a(4, 8) = 194: a(4, 10) = 192
  23. a(5, 6) = 150: a(5, 7) = 172: a(5, 8) = 107
  24. a(6, 7) = 139
  25. a(7, 8) = 184
  26. a(8, 9) = 118: a(8, 10) = 183
  27. a(9, 10) = 127: a(9, 12) = 424: a(9, 14) = 341: a(9, 15) = 310: a(9, 16) = 428
  28. a(10, 12) = 131
  29. a(11, 12) = 492: a(11, 13) = 143: a(11, 14) = 186: a(11, 15) = 302: a(11, 18) = 337: a(11, 19) = 344: a(11, 20) = 449
  30. a(12, 16) = 137
  31. a(13, 14) = 297: a(13, 18) = 335: a(13, 19) = 405: a(13, 20) = 558
  32. a(14, 15) = 137: a(14, 18) = 361: a(14, 20) = 289
  33. a(15, 16) = 181: a(15, 19) = 245: a(15, 20) = 243: a(15, 21) = 301
  34. a(16, 17) = 63: a(16, 20) = 319
  35. a(17, 20) = 325: a(17, 21) = 282: a(17, 22) = 268
  36. a(18, 19) = 170: a(18, 23) = 187
  37. a(19, 20) = 186: a(19, 23) = 149: a(19, 24) = 391
  38. a(20, 21) = 79: a(20, 23) = 226: a(20, 24) = 245
  39. a(21, 22) = 388: a(21, 24) = 229
  40. a(22, 24) = 560
  41. a(23, 24) = 301: a(23, 25) = 341
  42. a(24, 25) = 151
  43.  
  44. For i = 1 To n 'Г§Г*ïîëГ*ГҐГ*ГЁГҐ ñèììåòðè÷Г*îé Г·Г*Г±ГІГЁ Г¬Г*Г±Г±ГЁГўГ* Г± Г°Г*ñññòîÿГ*èÿìè
  45. For j = 1 To n
  46. If a(i, j) <> 0 Then a(j, i) = a(i, j)
  47. Next j
  48. Next i
  49. s = " "
  50. For i = 1 To n ' âûâîä Г*Г*Г·Г*ëüГ*îãî Г¬Г*Г±Г±ГЁГўГ* Г± Г°Г*ññòîÿГ*èÿìè
  51. For j = 1 To n
  52. s = s & a(i, j) & " "
  53. Next j
  54. s = s & vbCrLf
  55. Next i
  56. Label1.Caption = s
  57. 'îáГ*óëåГ*ГЁГҐ ГўГ±ГҐГµ ГґГЁ
  58. For i = 1 To n
  59. For j = 1 To n
  60. b(i, j) = 0
  61. Next j
  62. Next i
  63.  
  64. ' âûâîä ôè
  65. For i = 1 To n
  66. For j = 1 To n
  67. phi = phi & b(i, j) & " "
  68. Next j
  69. phi = phi & vbCrLf
  70. Next i
  71. Label2.Caption = phi
  72.  
  73. End Sub
Если у кого-то есть какие-то идеи, need your help

Решение задачи: «Задача на максимальный поток в Visual Basic»

textual
Листинг программы
  1. a(1, 5) = 337

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


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

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

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

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

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

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