Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. // II - straight outta AnuΘ›a's curs*
  6. // *almost
  7. double **A;
  8. int n;
  9. int *predecesor;
  10. const double MaxInf = 1.e20;
  11. void Citire_Date(const char numeFisier[]) {
  12.     int i,j;
  13.     double c;
  14.     ifstream fin(numeFisier);
  15.     fin >> n;
  16.     A = new double*[n];
  17.     for(i=0; i<n; i++) {
  18.         A[i] = new double[n];
  19.         for(j=0;j<n;j++)
  20.             if(i==j)
  21.                 A[i][j] = 0.0;
  22.             else
  23.                 A[i][j] = MaxInf;
  24.      }
  25.     while(fin >> i >> j >> c)
  26.         A[i][j] = c;
  27. }
  28. void afisare(int i) {
  29.     if (predecesor[i] !=  -1)
  30.         afisare(predecesor[i]);
  31.     cout << i << " ";
  32. }
  33. int main() {
  34.     Citire_Date("in.txt");
  35.     predecesor = new int[n];
  36.     int *selectat = new int[n];
  37.     double *dmin = new double[n], min;
  38.     int v, w = -1;
  39.     for (int i = 0; i < n; i++) {
  40.         selectat[i] = 0;
  41.         dmin[i] = 0.0;
  42.         predecesor[i] = -1;
  43.     }
  44.     cout << "Orasul de plecare S: ";
  45.     cin >> v;
  46.     selectat[v] = 1;
  47.     for (int i = 0; i < n; i++) {
  48.         dmin[i] = A[v][i];
  49.         if (i != v)
  50.             if (dmin[i] < MaxInf) predecesor[i] = v;
  51.     }
  52.     for (int i = 1; i <= n - 1; i++){
  53.         min = MaxInf;
  54.         for (int j = 0; j < n; j++)
  55.             if (selectat[j] == 0)
  56.                 if (dmin[j] < min) {
  57.                     min = dmin[j];
  58.                     w = j;
  59.                 }
  60.         if (w != -1) {
  61.             selectat[w] = 1;
  62.             for (int j = 0; j < n; j++)
  63.                 if (selectat[j] == 0)
  64.                     if (dmin[j] > dmin[w] + A[w][j]) {
  65.                         dmin[j] = dmin[w] + A[w][j];
  66.                         predecesor[j] = w;
  67.                     }
  68.         }
  69.     }
  70.     int f;
  71.     cout << "Orasul de sosire F: ";
  72.     cin >> f;
  73.     if (predecesor[f] != -1) {
  74.         cout << "Costul drumului de la S (" << v << ") la F (" << f
  75.              << ") este " << dmin[f] << endl;
  76.         afisare(f);
  77.         cout << endl;
  78.     } else
  79.         cout << "Nu exista drum de la S (" << v << ") la F (" << f << ")" << endl;
  80.     cout << "Restul drumurilor: " << endl;
  81.     for (int i = 0; i < n; i++)
  82.         if (i != v) {
  83.             if (predecesor[i] != -1) {
  84.                 cout << "Costul drumului de la " << v << " la " << i
  85.                      << " este " << dmin[i] << endl;
  86.                 afisare(i);
  87.                 cout << endl;
  88.             } else
  89.                 cout << "Nu exista drum de la " << v << " la " << i << endl;
  90.         }
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement