Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4. #include <fstream>
  5. using namespace std;
  6.  
  7. priority_queue<pair<int, int>> myheap;
  8. vector <int> vector_muchii[100001];
  9. vector <int> vector_costuri[100001];
  10. int viz[100001], dist[100001];
  11. ifstream fin("dijkstra2.in");
  12. ofstream fout("dijkstra2.out");
  13. int n, m, p;
  14.  
  15. #define max_size 20000005
  16. void citire()
  17. {
  18.     int i, j;
  19.     fin >> n >> m >> p;
  20.     for(i = 1; i <= m; i++)
  21.     {
  22.         int x, y, cost;
  23.         fin >> x >> y >> cost;
  24.         vector_muchii[x].push_back(y);
  25.         vector_costuri[x].push_back(cost);
  26.  
  27.     }
  28. }
  29.  
  30. void dijkstra()
  31. {
  32.     int i, vecin, lim, k;
  33.     for(i = 1; i <= n; i++)
  34.     {
  35.         if(i == p)
  36.             dist[i] = 0;
  37.         else
  38.             dist[i] = max_size;
  39.         myheap.push(make_pair(-dist[i], i));
  40.     }
  41.  
  42.     while(!myheap.empty())
  43.     {
  44.         pair<int, int> pr = myheap.top();
  45.  
  46.         int index = pr.second;
  47.         myheap.pop();
  48.         if(viz[index] == 1);
  49.  
  50.         else
  51.         {
  52.             viz[index] = 1;
  53.             lim = vector_muchii[index].size();
  54.             for(k = 0; k < lim; k++)
  55.             {
  56.                 vecin = vector_muchii[index][k];
  57.                 if(dist[vecin] > (dist[index] + vector_costuri[index][k]))
  58.                 {
  59.                     dist[vecin] = dist[index] + vector_costuri[index][k];
  60.                     myheap.push(make_pair(-dist[vecin], vecin));
  61.                     cout << "intra aici";
  62.                 }
  63.             }
  64.         }
  65.  
  66.     }
  67.     for(i = 1; i <= n; i++)
  68.     {
  69.         if(dist[i] == max_size)
  70.            dist[i] = 0;
  71.         fout << dist[i] << " ";
  72.     }
  73. }
  74. int main()
  75. {
  76.  
  77.     citire();
  78.     dijkstra();
  79.  
  80.     fin.close();
  81.     fout.close();
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement