Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.44 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.                 int u;
  51.                 for (u = 0; u < p; u++)
  52.                 {
  53.                     DlinaPuti[u] = infinity;
  54.  
  55.                     x[u] = 0;
  56.                 }
  57.                 PredVertex[start] = 0;
  58.                 DlinaPuti[start] = 0;
  59.                 x[start] = 1;
  60.                 v = start;
  61.  
  62.                 while (1)
  63.                 {
  64.                     for (u = 0; u<p; u++)
  65.                     {
  66.                         if (VES[v][u] == 0)continue;
  67.                         if (x[u] == 0 && DlinaPuti[u]>DlinaPuti[v] + VES[v][u])
  68.  
  69.                         {
  70.                             DlinaPuti[u] = DlinaPuti[v] + VES[v][u];
  71.  
  72.                             PredVertex[u] = v;
  73.                         }
  74.                     }
  75.                     int w = infinity;
  76.                     v = -1;
  77.                     for (u = 0; u < p; u++)
  78.                     {
  79.                         if (x[u] == 0 && DlinaPuti[u] < w)
  80.  
  81.                         {
  82.                             v = u;
  83.                             w = DlinaPuti[u];
  84.                         }
  85.                     }
  86.                     if (v == -1)
  87.                     {
  88.                         cout << RUS("Нет пути из вершины ") << start + 1; cout << RUS(" в вершину ") << end + 1 << "." << endl;
  89.                         break;
  90.                     }
  91.                     if (v == end)
  92.                     {
  93.                         cout << RUS("Кратчайший путь из вершины ") << start + 1; cout << RUS(" в вершину ") << end + 1 << ":";
  94.                         u = end;
  95.                         while (u != start)
  96.                         {
  97.                             cout << " " << u + 1;
  98.                             u = PredVertex[u];
  99.                         }
  100.                         cout << " " << start + 1 << RUS(". Длина пути - ") << DlinaPuti[end]; cout << endl;
  101.                         break;
  102.                     }
  103.                     x[v] = 1;
  104.                 }
  105.             }
  106.         }
  107.         system("pause");
  108.         return 0;
  109.     }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement