Advertisement
r1411

Untitled

Jun 13th, 2021
752
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int a[100][100];    // Матрица смежности
  5. int d[100];         // Кратчайшие пути до вершин
  6. int v[100];         // Посещенные вершины
  7. int w, minimum;             // w - итератор вершины, minimum - минимум (гениально)
  8.  
  9. void main() {
  10.     setlocale(LC_ALL, "Russian");
  11.  
  12.     int n;
  13.     cout << "Введите колво вершин" << endl;
  14.     cin >> n;
  15.  
  16.     for (int i = 1; i <= n; i++)
  17.         for(int j = 1; j <= n; j++)
  18.             a[i][j] = 10000;
  19.    
  20.     cout << "Вводите смежные вершины (формат: <v1> <v2> <стоимость>, окончание ввода - 0 0 0)" << endl;
  21.     int v1, v2, cost;
  22.     cin >> v1 >> v2 >> cost;
  23.     while (v1 != 0 && v2 != 0) {
  24.         a[v1][v2] = cost;
  25.         a[v2][v1] = cost; // Убрать, если граф ориентированый.
  26.         cin >> v1 >> v2 >> cost;
  27.     }
  28.  
  29.     for (int i = 2; i <= n; i++) {
  30.         d[i] = a[1][i];
  31.         v[i] = 0;
  32.     }
  33.  
  34.  
  35.     d[1] = 0;
  36.     do {
  37.         w = 1000;
  38.         minimum = 1000;
  39.         //Ищем ближайшую непосещенную вершину (w - вершина, minimum - расстояние до нее)
  40.         for (int i = 2; i <= n; i++) {
  41.             if (d[i] < minimum && v[i] == 0) {
  42.                 minimum = d[i];
  43.                 w = i;
  44.             }
  45.         }
  46.  
  47.         //Если такая нашлась
  48.         if (w != 1000) {
  49.             for (int i = 2; i <= n; i++)
  50.                 if (minimum + a[w][i] < d[i])
  51.                     d[i] = minimum + a[w][i];
  52.  
  53.             v[w] = 1; // Помечаем вершину w посещенной
  54.         }
  55.  
  56.        
  57.     } while (w != 1000);
  58.  
  59.     for (int i = 2; i <= n; i++) {
  60.         cout << "От 1 до " << i << ": " << d[i] << endl;
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement