Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <windows.h>
  4. #include<iomanip>
  5. #include <cstdlib>
  6.  
  7. using namespace std;
  8. char NEWT[256];
  9. char*RUS(char*TEXT) {
  10. CharToOemA(TEXT, NEWT);
  11. return NEWT;
  12. }
  13.  
  14. int v;
  15. int main()
  16. {
  17. int i, j;
  18. int infinity = 1000;
  19. int VES[100][100];
  20. int x[100];
  21. int DlinaPuti[100];
  22. int PredVertex[100];
  23. int VERTEX;
  24. int p;
  25. cout<<RUS("Ввести количество вершин в графе ")<<endl;
  26. cin>>VERTEX; p = VERTEX;
  27. cout<<RUS("Заполните матрицу весов графа ")<<endl;
  28. cout<<setw(4);
  29. for (i = 0; i<VERTEX; i++)
  30. cout<<RUS("|x")<<i + 1;
  31. cout<<endl;
  32.  
  33. for (i = 0; i<VERTEX; i++)
  34. {
  35. cout<<RUS("X")<<i + 1<<'|';
  36. for (j = 0; j<VERTEX; j++)
  37. cin>>VES[i][j];
  38. int start;
  39. int end;
  40. N: cout<<RUS("Введите стартовую вершину: ");
  41. cin>>start;
  42. if (start>(p - 1) && start<0) { cout<<RUS("Нет такой вершины повторите ввод...")<<endl; goto N; }
  43. start = start - 1;
  44. for (int prosto = 0; prosto<VERTEX; prosto++)
  45. {
  46. end = prosto;
  47. if (end == start) continue;
  48. else
  49. {
  50.  
  51.  
  52. int u;
  53. for (u = 0; u<p; u++)
  54. {
  55. DlinaPuti[u] = infinity;
  56.  
  57. x[u] = 0;
  58. }
  59. PredVertex[start] = 0;
  60. DlinaPuti[start] = 0;
  61. x[start] = 1;
  62. v = start;
  63.  
  64. while (1)
  65. {
  66.  
  67. for (u = 0; u<p; u++)
  68. {
  69. if (VES[v][u] == 0)continue;
  70. if (x[u] == 0 && DlinaPuti[u]>DlinaPuti[v] + VES[v][u])
  71.  
  72. {
  73. DlinaPuti[u] = DlinaPuti[v] + VES[v][u];
  74.  
  75. PredVertex[u] = v;
  76.  
  77. }
  78. }
  79. int w = infinity;
  80. v = -1;
  81. for (u = 0; u<p; u++)
  82. {
  83. if (x[u] == 0 && DlinaPuti[u]<w)
  84.  
  85.  
  86. {
  87. v = u;
  88. w = DlinaPuti[u];
  89. }
  90. }
  91. if (v == -1)
  92. {
  93. cout<<RUS("Нет пути из вершины ")<<start + 1; cout<<RUS(" в вершину ")<<end + 1<<"."<<endl;
  94. break;
  95. }
  96. if (v == end)
  97. {
  98. cout<<RUS("Кратчайший путь из вершины ")<<start + 1; cout<<RUS(" в вершину ")<<end + 1<<":";
  99. u = end;
  100. while (u != start)
  101. {
  102. cout<<" "<<u + 1;
  103. u = PredVertex[u];
  104. }
  105. cout<<" "<<start + 1<<RUS(". Длина пути - ")<< DlinaPuti[end]; cout<<endl;
  106. break;
  107. }
  108. x[v] = 1;
  109. }
  110. }
  111. }
  112. system("pause");
  113. return 0;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement