Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.97 KB | None | 0 0
  1.  
  2.  
  3. #include <iostream>
  4. #include <queue>
  5.  
  6. // OBSŁUGA KOLEJKI //
  7. // queue<int> k;
  8. // k.push(x); //dodaje
  9. // k.front(); //zwraca
  10. // k.pop(); //usuwa
  11. // k.empty(); // zwraca prawede jezeli kolejka jest pusta
  12.  
  13. using namespace std;
  14.  
  15. const int N = 5;
  16. int graf[N][N] = { 0,2,0,0,6,0,0,1,3,0,4,0,0,0,2,0,0,1,0,1,3,0,0,0,0 }; //macierz sasiedztwa
  17. int odwiedzony[N] = { 0 }; //0 – nieodwiedzony, 1 – odwiedzony
  18.  
  19. void init() {
  20.     for (int i = 0; i<N; i++) {
  21.         for (int j = 0; j<N; j++) {
  22.             graf[i][j] = rand() % 2;
  23.             cout << graf[i][j] << " ";
  24.         }
  25.         cout << endl;
  26.     }
  27. }
  28.  
  29. void BFS(int s) {
  30.     queue<int> kolejka;
  31.     kolejka.push(s);
  32.     odwiedzony[s] = 1;
  33.     while (!kolejka.empty()) {
  34.         int u = kolejka.front();
  35.         kolejka.pop();
  36.         for (int i = 0; i<N; i++) {
  37.             if (graf[u][i] == 1 && odwiedzony[i] == 0) {
  38.                 kolejka.push(i);
  39.                 odwiedzony[i] = 1;
  40.             }
  41.         }
  42.     }
  43. }
  44.  
  45. bool isFinished() {
  46.     for (int i = 0; i<N; i++){
  47.         if (odwiedzony[i] == 0)
  48.         {
  49.             return false;
  50.         }
  51.     }
  52.     return true;
  53. }
  54.  
  55. int min(int droga[])
  56. {
  57.     int minimum = 1000;
  58.     int index = -1;
  59.     for (int i = 0; i<N; i++)
  60.         if ((droga[i] < minimum) && (odwiedzony[i] == 0))
  61.         {
  62.             minimum = droga[i];
  63.             index = i;
  64.         }
  65.     odwiedzony[index] = 1;
  66.     return index;
  67. }
  68.  
  69. void dijkstra(int s)
  70. {
  71.     int droga[N] = {}; //1000 = nieskonczonosc
  72.     for (int i = 0; i<N; i++)
  73.         droga[i] = 1000;
  74.  
  75.     int poprzednik[N] = {}; //-1 = brak poprzednika
  76.     for (int i = 0; i<N; i++)
  77.     {
  78.         poprzednik[i] = -1;
  79.     }
  80.  
  81.     droga[s] = 0;
  82.  
  83.     while (!isFinished())
  84.     {
  85.         int u = min(droga);
  86.         for (int i = 0; i<N; i++)
  87.             if (graf[u][i] > 0)
  88.                 if (droga[i] >(droga[u] + graf[u][i]))
  89.                 {
  90.                     droga[i] = droga[u] + graf[u][i];
  91.                     poprzednik[i] = u;
  92.                 }
  93.     }
  94.  
  95.     for(int i=0; i<N; i++)
  96.     cout << i+1 << " droga: " <<  droga[i] << endl;
  97.    
  98. }
  99.  
  100. int main(int argc, const char * argv[]) {
  101.     /* zad1 TO DO
  102.     srand(time(NULL));
  103.     init();
  104.     DFS();*/
  105.  
  106.     /* zad2
  107.     init();
  108.     BFS(0); */
  109.  
  110.     /*dijkstra*/
  111.      dijkstra(0);
  112.  
  113.  
  114.     return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement