Программа по нахождению кратчайшего пути (не могу прилепить нормальный вывод) - C#

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

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

Здравствуйте. Проблема заключается в следующем - программе не хватает вывода пути. Я никак не могу придумать, как сделать вывод. Подскажите как можно это реализовать? PS консольное приложение
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ConsoleApplication3
  6. {
  7. class Program
  8. {
  9. static int i, j, n, p, xn, xk;
  10. static bool[] flag;
  11. static uint[,] c;
  12. static uint[] l;
  13. static int min(int n)
  14. {
  15. //поиск кратчайшего пути
  16. int i, result = 0;
  17. for (i = 0; i < n; i++)
  18. if (!(flag[i])) result = i;
  19. for (i = 0; i < n; i++)
  20. if ((l[result] > l[i]) && (!flag[i])) result = i;
  21. return result;
  22. }
  23. static uint minim(uint x, uint y)
  24. {
  25. if (x < y) return x;
  26. return y;
  27. }
  28. static void Main(string[] args)
  29. {
  30. string s = "";
  31. bool z = false;
  32. string path = "";
  33. Console.Write("Напишите число точек: ");
  34. //ввод количества вершин графа
  35. for (; ; )
  36. {
  37. s = Console.ReadLine();
  38. for (int q = 0; q < s.Length; q++)
  39. if (s[q] == '1' || s[q] == '2' || s[q] == '3' || s[q] == '4' || s[q] == '5' || s[q] == '6' || s[q] == '7' || s[q] == '8' || s[q] == '9' || s[q] == '0')
  40. {
  41. z = true;
  42. }
  43. else
  44. {
  45. z = false;
  46. break;
  47. }
  48. if (z == true)
  49. { n = Convert.ToInt32(s); break; }
  50. else
  51. Console.Write("Неверный ввод данных. Повторите, пожалуйста: ");
  52. }
  53. l = new uint[n];
  54. c = new uint[n, n];
  55. flag = new bool[n];
  56. s = "";
  57. //ввод длин рёбер
  58. for (i = 0; i < n; i++)
  59. for (j = 0; j < n; j++) c[i, j] = 0;
  60. for (i = 0; i < n; i++)
  61. for (j = i + 1; j < n; j++)
  62. {
  63. Console.Write(" задайте длину ребра x");
  64. Console.Write(i + 1);
  65. Console.Write(" до x");
  66. Console.Write(j + 1);
  67. Console.Write(": ");
  68. c[i, j] = Convert.ToUInt32(Console.ReadLine());
  69. if (c[i, j] < 0) c[i, j] = 0;
  70. }
  71. Console.Write(" ");
  72. for (i = 0; i < n; i++)
  73. {
  74. Console.Write(" X");
  75. Console.Write(i + 1);
  76. }
  77. Console.Write("\n");
  78. Console.Write("\n");
  79. //печать матрицы смежности
  80. for (i = 0; i < n; i++)
  81. {
  82. Console.Write("X{0:D}", i + 1);
  83. for (j = 0; j < n; j++)
  84. {
  85. Console.Write("{0,6:D}", c[i, j]);
  86. c[j, i] = c[i, j];
  87. }
  88. Console.Write("\n\n");
  89. }
  90. //избавление от нулей
  91. for (i = 0; i < n; i++)
  92. for (j = 0; j < n; j++)
  93. if (c[i, j] == 0) c[i, j] = 65535;
  94. //ввод начальной точки пути
  95. Console.Write(" задайте начальную точку: ");
  96. xn = Convert.ToInt32(Console.ReadLine());
  97. path = Convert.ToString(xn + " ");
  98. //ввод конечной точки пути
  99. Console.Write(" задайте конечную точку: ");
  100. xk = Convert.ToInt32(Console.ReadLine());
  101. int rem = xk;
  102. xk--;
  103. xn--;
  104. //проверка на совпадение точек
  105. if (xn == xk)
  106. {
  107. Console.WriteLine("Начальная и конечные точки совпадают");
  108. Console.ReadLine();
  109. return;
  110. }
  111. for (i = 0; i < n; i++)
  112. {
  113. flag[i] = false;
  114. l[i] = 65535;
  115. }
  116. //установка начальной точки
  117. l[xn] = 0;
  118. flag[xn] = true;
  119. p = xn;
  120. s = Convert.ToString(xn + 1);
  121. //расчёт путей и выбор кратчайшего пути
  122. do
  123. {
  124. for (i = 0; i < n; i++)
  125. if ((c[p, i] != 65535) && (!flag[i]) && (i != p))
  126. {
  127. if (l[i] > l[p] + c[p, i])
  128. {
  129. s = Convert.ToString(i + 1);
  130. }
  131. l[i] = minim(l[i], l[p] + c[p, i]);
  132. }
  133. p = min(n);
  134. //запись пути
  135. path += (p+1) + " ";
  136. flag[p] = true;
  137. } while (p != xk);
  138.  
  139. //вывод полученных данных
  140. if (l[p] < 65535)
  141. {
  142. Console.Write("Put: ");
  143. Console.Write(path);
  144. Console.Write("\n");
  145. Console.Write("Dlina puti: ");
  146. Console.Write(l[p]);
  147. Console.Write("\n");
  148. }
  149. else
  150. Console.Write("Путь не существует!");
  151. Console.Write("\n");
  152. Console.ReadLine();
  153. }
  154. }
  155. }

Решение задачи: «Программа по нахождению кратчайшего пути (не могу прилепить нормальный вывод)»

textual
Листинг программы
  1.                 Console.Write(path);

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


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

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

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

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

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

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