STANAANDREY

dijkstra cls

Mar 8th, 2021 (edited)
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. const int maxi = 15000;
  4. int c[20][20], d[20], t[20], p[20], n, m, s;
  5.  
  6. void citire() {
  7.     int i, j, x, y, cost;
  8.     cin >> n >> m;
  9.     for (i = 1; i <= n; i++)
  10.         for (j = 1; j <= n; j++)
  11.             if (i == j)
  12.                 c[i][j] = 0;
  13.             else
  14.                 c[i][j] = maxi;
  15.     for (i = 1; i <= m; i++) {
  16.         cin >> x >> y >> cost;
  17.         c[x][y] = cost;
  18.     }
  19. }
  20.  
  21. void dijkstra(int s) {
  22.     int i, j, k, mini;
  23.     for (i = 1; i <= n; i++) {
  24.         d[i] = c[s][i];
  25.         if (i != s && d[i] != maxi)
  26.             t[i] = s;
  27.     }
  28.     p[s] = 1;
  29.     for (k = 1; k < n; k++) {
  30.         mini = maxi;
  31.         for (i = 1; i <= n; i++)
  32.             if (!p[i] && d[i] < mini) {
  33.                 mini = d[i];
  34.                 j = i;
  35.             }
  36.         for (i = 1; i <= n; i++)
  37.             if (!p[i])
  38.                 if (d[i] > d[j] + c[j][i]) {
  39.                     d[i] = d[j] + c[j][i];
  40.                     t[i] = j;
  41.                 }
  42.         p[j] = 1;
  43.     }
  44. }
  45.  
  46. void drum(int i) {
  47.     if (t[i])
  48.         drum(t[i]);
  49.     cout << i << " ";
  50. }
  51.  
  52. int main() {
  53.     citire();
  54.     cin >> s;
  55.     dijkstra(s);
  56.     for (int i = 1; i <= n; i++)
  57.         if (i != s) {
  58.             cout << s << "->" << i << ": ";
  59.             drum(i);
  60.             cout << "=" << d[i] << endl;
  61.         }//*/
  62. }
  63.  
Add Comment
Please, Sign In to add comment