Advertisement
TranQuang98

Dijktra_main

May 22nd, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int main ()
  7. {
  8.     int a , b, n , i , sum = 0;
  9.     fstream f;
  10.     f.open("inputDijktra.txt");
  11.     f >> n;
  12.     f >> a;
  13.     f >> b;
  14.     int G[n][n] , len[n] , S[n] , P[n];
  15.     int k = 0 , j = 0;
  16. //  cout << n << " " << a << " "<< b;
  17. //  Creat
  18.     for (int i = 0 ; i < n ; i++)
  19.     {
  20.         for (int j = 0; j < n ; j++)
  21.        
  22.         {
  23.             f >> G[i][j];
  24.             sum += G[i][j];
  25.         }
  26.    
  27.     }
  28.    
  29.     for (int i = 0 ; i < n ; i++)
  30.     {
  31.         for (int j = 0; j < n ; j++)
  32.        
  33.         {
  34.             if (i != j && !G[i][j]) G[i][j] = sum;
  35.         }
  36.     }
  37.     a--;
  38.     b--;
  39.     for (int i = 0 ; i < n ; i++)
  40.     {
  41.         len[i] = sum;
  42.         S[i] = a;
  43.         P[i] = 0;
  44.     }
  45.     len [a] = 0;
  46.    
  47. //Dijktra
  48.     while (!P[b])
  49.     {
  50.     //tim mot vi tri ko phai la vo cung
  51.     for (i = 0 ; i < n ; i++)
  52.         if (!P[i] && len[i] < sum)
  53.             break;
  54.            
  55.     if (i >= n)
  56.     {
  57.     cout << "Not exist the path " << a << " - > " << b << endl ; break;
  58.     }
  59.     // tim diem co do dai la min
  60.     for (int j = 0 ; j < n ; j++)
  61.         if (!P[j] && len[i] > len[j])
  62.             i = j;
  63.  
  64.     //cho i vao danh sach xet
  65.     P[i] = 1;
  66.    
  67.     //tinh lai cac dinh chua xet
  68.     for (int j = 0 ; j < n ; j++)
  69.         if (!P[j] && len[i] + G[i][j] < len[j])
  70.             len[j] = len[i] + G[i][j], S[j] = i;
  71.    
  72.     }  
  73.     cout << "Done Dijktra !" << endl;
  74.  
  75.     if (len[b] > 0 && len[b] < sum)
  76.     {
  77.     cout << "The Min Length from " << a + 1<< " to " << b + 1 <<" is " << len[b] << endl;
  78.     //truy vet
  79.     while (i != a)
  80.     {
  81.         cout << i + 1<< " <- ";
  82.         i = S[i];
  83.     }
  84.     cout << a + 1;
  85.     }
  86.     else cout << "Not Exist the path from " << a << " to " << b <<  endl;
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement