GieeF

Dijkstra

Jan 15th, 2020
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. void dijkstra(int v) {
  2.  
  3.     int* q = new int[n];
  4.     vector<int> s;
  5.     int* d = new int[n];
  6.     int* p = new int[n];
  7.     int min, index, amount = n;
  8.     for (int i = 0; i < n; i++) {
  9.         q[i] = i;
  10.         d[i] = INT_MAX - 200;
  11.         p[i] = -1;
  12.     }
  13.     d[v] = 0;
  14.     while (amount > 0) {
  15.         min = INT_MAX - 200;
  16.         for (int i = 0; i < n; i++) {
  17.             if (q[i] != -1 && min > d[i]) {
  18.                 min = d[i];
  19.                 index = i;
  20.             }
  21.         }
  22.         s.push_back(q[index]);
  23.         q[index] = -1;
  24.         amount--;
  25.         for (int i = 0; i < n; i++) {
  26.             if (check(index, i) && q[i] != -1) {
  27.                 if (d[i] > d[index] + adjMatrix[index][i]) {
  28.                     d[i] = d[index] + adjMatrix[index][i];
  29.                     p[i] = index;
  30.                 }
  31.             }
  32.         }
  33.     }
  34.     for (int i = 0; i < n; i++) {
  35.         cout << i << "\t";
  36.     }
  37.     cout << endl;
  38.     for (int i = 0; i < n; i++) {
  39.         cout << d[i] << "\t";
  40.     }
  41.     cout << endl;
  42.     for (int i = 0; i < n; i++) {
  43.         cout << p[i] << "\t";
  44.     }
  45.     cout << endl;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment