Advertisement
AmidamaruZXC

Untitled

Jun 23rd, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. #include <queue>
  5.  
  6. using namespace std;
  7.  
  8. # define INF 1000000000
  9.  
  10. typedef pair<int, int> iPair;
  11.  
  12. void addEdge(vector <pair<int, int> > adj[], int u,
  13.     int v, int wt)
  14. {
  15.     adj[u].push_back(make_pair(v, wt));
  16.     adj[v].push_back(make_pair(u, wt));
  17. }
  18.  
  19.  
  20. void shortestPath(vector<pair<int, int> > adj[], int V, int src)
  21. {
  22.     priority_queue< iPair, vector <iPair>, greater<iPair> > pq;
  23.  
  24.     vector<int> dist(V, INF);
  25.  
  26.     pq.push(make_pair(0, src));
  27.     dist[src] = 0;
  28.  
  29.     while (!pq.empty())
  30.     {
  31.         int u = pq.top().second;
  32.         pq.pop();
  33.  
  34.         for (auto x : adj[u])
  35.         {
  36.             int v = x.first;
  37.             int weight = x.second;
  38.  
  39.             if (dist[v] > dist[u] + weight)
  40.             {
  41.                 dist[v] = dist[u] + weight;
  42.                 pq.push(make_pair(dist[v], v));
  43.             }
  44.         }
  45.     }
  46.  
  47.     for (int i = 1; i < V; ++i)
  48.         cout << dist[i] << " ";
  49. }
  50.  
  51.  
  52. int main()
  53. {
  54.     int N, M, A, B, W;
  55.     cin >> N;
  56.     cin >> M;
  57.     vector<iPair >* adj = new vector<iPair>[N];
  58.     for (int i = 0; i < M; i++)
  59.     {
  60.         cin >> A >> W >> B;
  61.         A -= 1;
  62.         B -= 1;
  63.         addEdge(adj, A, B, W);
  64.     }
  65.     shortestPath(adj, N, 0);
  66.  
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement