Advertisement
Guest User

Untitled

a guest
Sep 17th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int minDistance(int*, int*, int);
  6. void printPath(int*, int);
  7.  
  8. int main() {
  9.  
  10.     cout << "Unesite broj cvorova koji se nalaze u mrezi" << endl;
  11.     int n;
  12.     cin >> n;
  13.  
  14.     cout << "Za svaki par cvorova navesti tezinu grane izmedju njih:" << endl;
  15.  
  16.     int** matrix = new int* [n];
  17.     for (int i = 0; i < n; matrix[i++] = new int[n]);
  18.  
  19.     for (int i = 0; i < n; i++)
  20.         for (int j = 0; j < n; j++) {
  21.             cout << "(" << i << ", " << j << ") :";
  22.             cin >> matrix[i][j];
  23.             cout << endl;
  24.         }
  25.  
  26.     cout << "Od kog cvora se racunaju najkraci putevi? ";
  27.     int root;
  28.     cin >> root;
  29.  
  30.     int* dist = new int[n];
  31.     int* sptSet = new int[n];
  32.     int* parent = new int[n];
  33.  
  34.     for (int i = 0; i < n; i++) {
  35.         parent[i] = -1;
  36.         dist[i] = INT_MAX;
  37.         sptSet[i] = 0;
  38.     }
  39.     dist[root] = 0;
  40.  
  41.     for (int count = 0; count < n - 1; count++) {
  42.         int u = minDistance(dist, sptSet, n);
  43.  
  44.         sptSet[u] = 1;
  45.  
  46.         for (int v = 0; v < n; v++)
  47.             if (!sptSet[v] && matrix[u][v] &&
  48.                 dist[u] + matrix[u][v] < dist[v])
  49.             {
  50.                 parent[v] = u;
  51.                 dist[v] = dist[u] + matrix[u][v];
  52.             }
  53.     }
  54.  
  55.     for (int i = 0; i < n; i++) {
  56.         if (i != root) {
  57.             cout << "Udaljenost cvora " << i << " od cvora " << root << " je " << dist[i] << endl;
  58.             cout << "Putanja: " << root;
  59.             printPath(parent, i);
  60.             cout << endl;
  61.            
  62.         }
  63.        
  64.     }
  65.     system("pause");
  66.  
  67.     for (int i = 0; i < n; i++) delete[] matrix[i];
  68.     delete[] matrix;
  69.     delete[] dist;
  70.     delete[] sptSet;
  71.     delete[] parent;
  72.  
  73.     return 0;
  74. }
  75.  
  76.  
  77.  
  78. int minDistance(int* dist, int* sptSet, int n) {
  79.  
  80.     int min = INT_MAX, min_index;
  81.  
  82.     for (int v = 0; v < n; v++)
  83.         if (sptSet[v] == false &&
  84.             dist[v] <= min)
  85.             min = dist[v], min_index = v;
  86.  
  87.     return min_index;
  88. }
  89.  
  90. void printPath(int* parent, int j) {
  91.  
  92.     if (parent[j] == -1) return;
  93.  
  94.     printPath(parent, parent[j]);
  95.  
  96.     cout << "->" << j;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement