Advertisement
Derga

Untitled

Dec 8th, 2023
874
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.35 KB | None | 0 0
  1. /*
  2. #include <iostream>
  3. #include <vector>
  4. #include <queue>
  5. #include <climits>
  6. using namespace std;
  7.  
  8. int main() {
  9.     int ver; //кол-во вершин
  10.     cin >> ver;
  11.     vector<vector<pair<int, int>>> list_merge(ver); //список смежности
  12.     vector<int> weights(ver); // веса вершин
  13.  
  14.     int g, h, ves;
  15.  
  16.     // Считываем вершины и веса рёбер
  17.     cin >> g >> h >> ves;
  18.     while (g != 0 || h != 0) {
  19.         list_merge[g - 1].push_back({ h - 1, ves });
  20.         list_merge[h - 1].push_back({ g - 1, ves });
  21.         cin >> g >> h >> ves;
  22.     }
  23.  
  24.     for (int i = 0; i < ver; i++) {
  25.         cin >> weights[i];
  26.     }
  27.  
  28.     vector<int> result_weights(ver, INT_MAX); // Веса + расстояния до трёх заданных вершин
  29.  
  30.     int v1, v2, v3;
  31.     cin >> v1 >> v2 >> v3;
  32.  
  33.     // Найдем минимальную сумму для каждой вершины
  34.     for (int start_p = 0; start_p < ver; start_p++) {
  35.         vector<int> dist(ver, INT_MAX);
  36.         vector<int> bfs(ver);
  37.         dist[start_p] = 0;
  38.         for (int i = 0; i < ver; i++) {
  39.             int nearest = -1;
  40.             for (int j = 0; j < ver; j++) {
  41.                 if (bfs[j] == 0 && (nearest == -1 || dist[nearest] > dist[j])) {
  42.                     nearest = j;
  43.                 }
  44.             }
  45.             if (dist[nearest] == INT_MAX) {
  46.                 break;
  47.             }
  48.             bfs[nearest] = 1;
  49.  
  50.             for (pair<int, int> a : list_merge[nearest]) {
  51.                 if (dist[a.first] > dist[nearest] + a.second) {
  52.                     dist[a.first] = dist[nearest] + a.second;
  53.                 }
  54.             }
  55.         }
  56.  
  57.         result_weights[start_p] = weights[start_p] + dist[v1 - 1] + dist[v2 - 1] + dist[v3 - 1];
  58.     }
  59.  
  60.     for (int a : result_weights) {
  61.         cout << a << " ";
  62.     }
  63.  
  64.  
  65.     //Найдем минимальную сумму и соответствующую вершину
  66.     int min_sum = result_weights[0];
  67.     int min_vertex = 0;
  68.     for (int i = 1; i < ver; i++) {
  69.         if (result_weights[i] < min_sum) {
  70.             min_sum = result_weights[i];
  71.             min_vertex = i;
  72.         }
  73.     }
  74.  
  75.     cout << "Минимальная сумма: " << min_sum << endl;
  76.     cout << "Вершина: " << min_vertex + 1 << endl;
  77.  
  78.     return 0;
  79. }
  80. */
  81.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement