Advertisement
danielvitor23

Dijkstra

Aug 19th, 2021
1,422
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int n, m; // Nós, arestas
  5. vector<vector<pair<int, int>>> gr;  // Lista de adjacência
  6. vector<bool> visited;    // Vetor que indica se já foi visitado
  7. vector<int> dist;        // Vetor de distâncias
  8.  
  9. void dijkstra(int s) {
  10.     visited.assign(n, false);
  11.  
  12.     dist.assign(n, 1e9);
  13.     dist[s] = 0;
  14.  
  15.     priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
  16.     pq.push({0, s});
  17.  
  18.     while (!pq.empty()) {
  19.         pair<int, int> topo = pq.top();
  20.         pq.pop();
  21.  
  22.         int u = topo.second;
  23.  
  24.         if (visited[u] == true) {
  25.             continue;
  26.         }
  27.         visited[u] = true;
  28.  
  29.         for (pair<int, int> pr : gr[u]) {
  30.             int to = pr.first;
  31.             int w = pr.second;
  32.  
  33.             if (dist[u] + w < dist[to]) {
  34.                 dist[to] = dist[u] + w;
  35.                 pq.push({dist[to], to});
  36.             }
  37.  
  38.         }
  39.  
  40.     }
  41. }
  42.  
  43. int main() {
  44.     cin >> n >> m;
  45.  
  46.     gr.assign(n, vector<pair<int, int>>());
  47.  
  48.     for (int i = 0, u, v, c; i < m; ++i) {
  49.         cin >> u >> v >> c;
  50.         gr[u].push_back({v, c});
  51.         //gr[v].push_back({u, c});
  52.     }
  53.  
  54.     dijkstra(0);
  55.  
  56.     for (int i = 0; i < n; ++i) {
  57.         cout << "Cara: " << i << "; Distancia: " << dist[i] << endl;
  58.     }
  59. }
  60.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement