Advertisement
allia

дейкстра

Dec 27th, 2020
906
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. class Graph
  5. {
  6.   private:
  7.   bool orient;
  8.   int n, **arr, shet_reber, *d;
  9.  
  10.   public:
  11.   Graph (int **matrix, int x, int shet)
  12.   {
  13.     n = x;
  14.     arr = matrix;
  15.     shet_reber = shet;
  16.     d = new int[n];
  17.   }
  18.   void minpath(int x);
  19.   int get_length_path(int x, int y);
  20. };
  21.  
  22. void Graph::minpath(int x)
  23. {
  24.   int w, min, j;
  25.   bool *old = new bool[n];
  26.   int *path = new int[n];
  27.  
  28.   for ( int i = 0; i < n; i++)
  29.   {
  30.     d[i] = arr[x][i];
  31.     old[i] = false;
  32.     path[i] = x;
  33.   }
  34.  
  35.   old[x] = true;
  36.  
  37.  for (int i = 1; i < n; i++)
  38.    {
  39.      for ( w = -1, min = INT8_MAX, j = 0; j < n; j++)
  40.       if (!old[j] && d[j] < min)
  41.       {
  42.         w = j;
  43.         min = d[j];
  44.       }
  45.      if (w < 0)
  46.         break;
  47.  
  48.      for (old[w] = true, j = 0; j < n; j++)
  49.       if (!old[j] && d[j] > d[w] + arr[w][j])
  50.       {
  51.         d[j] = d[w] + arr[w][j];
  52.         path[j] = w;
  53.       }
  54.   }
  55.  
  56. delete [] old;
  57. }
  58.  
  59. int Graph::get_length_path(int x, int y)
  60. {
  61.  int dlina = 0;
  62.   minpath(x);
  63.  
  64.  int i = y;
  65.  if ( d[i] == INT8_MAX)
  66.   dlina = -1;
  67.  else dlina = d[i];
  68.  
  69.  return dlina;
  70. }
  71.  
  72. int main()
  73. {
  74.  int n, shet_reber = 0, x, y;
  75.  cin >> n >> x >> y;
  76.  
  77. int **arr = new int*[n];
  78.  
  79. for ( int i = 0; i < n; i++)
  80.      arr[i] = new int[n];
  81.    
  82. for (int i = 0; i < n; i++)
  83.   for (int j = 0; j < n; j++)  
  84.      {
  85.        cin >> arr[i][j];
  86.         if (arr[i][j] != 0)
  87.          shet_reber++;
  88.      }
  89.  
  90.  Graph object(arr, n, shet_reber);
  91.  
  92.  cout << object.get_length_path(x-1, y-1);
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement