Advertisement
podsolnyxxx

Дискретка 2 сем. 2 лаб. B2

May 18th, 2024
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. const int INF = 1e9;
  8.  
  9. int main() {
  10.     int N, S, F;
  11.     cin >> N >> S >> F;
  12.     S--;
  13.     F--;  // Преобразуем в 0-индексацию
  14.  
  15.     vector<vector<int>> graph(N, vector<int>(N));
  16.     for (int i = 0; i < N; ++i) {
  17.         for (int j = 0; j < N; ++j) {
  18.             cin >> graph[i][j];
  19.         }
  20.     }
  21.  
  22.     vector<int> dist(N, INF);
  23.     vector<int> prev(N, -1);
  24.     vector<bool> visited(N, false);
  25.  
  26.     dist[S] = 0;
  27.  
  28.     for (int i = 0; i < N; ++i) {
  29.         int u = -1;
  30.         for (int j = 0; j < N; ++j) {
  31.             if (!visited[j] && (u == -1 || dist[j] < dist[u])) {
  32.                 u = j;
  33.             }
  34.         }
  35.  
  36.         if (dist[u] == INF)
  37.             break;
  38.  
  39.         visited[u] = true;
  40.  
  41.         for (int v = 0; v < N; ++v) {
  42.             if (graph[u][v] != -1 && dist[u] + graph[u][v] < dist[v]) {
  43.                 dist[v] = dist[u] + graph[u][v];
  44.                 prev[v] = u;
  45.             }
  46.         }
  47.     }
  48.  
  49.     if (dist[F] == INF) {
  50.         cout << -1 << endl;
  51.     }
  52.     else {
  53.         vector<int> path;
  54.         for (int v = F; v != -1; v = prev[v]) {
  55.             path.push_back(v);
  56.         }
  57.         reverse(path.begin(), path.end());
  58.         for (int v : path) {
  59.             cout << v + 1 << " ";  // Возвращаемся к 1-индексации для вывода
  60.         }
  61.         cout << endl;
  62.     }
  63.  
  64.     return 0;
  65. }
  66.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement