Advertisement
Guest User

Untitled

a guest
May 28th, 2017
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.28 KB | None | 0 0
  1. void dfs(vector <vector<int> > &lista_sasiedztwa)
  2. {
  3.     vector <int> tablica_numerow_wierzcholkow(lista_sasiedztwa.size(), 0); // VN
  4.     vector <int> tablica_parametrow(lista_sasiedztwa.size(), 0); //VLow
  5.     vector <bool> czy_jest_na_stose(lista_sasiedztwa.size(), false);
  6.     stack <int> odwiedzone_wierzcholki;
  7.     vector <lista*> lista_spojnych(lista_sasiedztwa.size());
  8.  
  9.     int cvn = 0;
  10.  
  11.        for(int i = 0; i < lista_sasiedztwa.size(); i++)
  12.        {
  13.             dfs_visit(lista_sasiedztwa, odwiedzone_wierzcholki, i, tablica_numerow_wierzcholkow, tablica_parametrow, czy_jest_na_stose, cvn, lista_spojnych);
  14.        }
  15.        odczytaj_wyniki(lista_spojnych);
  16. }
  17.  
  18.  
  19. void dfs_visit(vector <vector<int> > &lista_sasiedztwa, stack <int> &odwiedzone_wierzcholki,
  20.                 int wierzcholek, vector <int> &tablica_numerow_wierzcholkow, vector <int> &tablica_parametrow, vector <bool> &czy_jest_na_stose, int &cvn, vector <lista*> &lista_spojnych)
  21. {
  22.  
  23.     tablica_numerow_wierzcholkow[wierzcholek] = tablica_parametrow[wierzcholek] = cvn;
  24.     cvn++;
  25.     odwiedzone_wierzcholki.push(wierzcholek);
  26.     czy_jest_na_stose[wierzcholek] = true;
  27.  
  28.     for(int i = 0; i < lista_sasiedztwa[wierzcholek].size(); i++)
  29.     {
  30.             if(!czy_jest_na_stose[lista_sasiedztwa[wierzcholek][i]])
  31.             {
  32.                 dfs_visit(lista_sasiedztwa, odwiedzone_wierzcholki, lista_sasiedztwa[wierzcholek][i], tablica_numerow_wierzcholkow, tablica_parametrow,
  33.                        czy_jest_na_stose, cvn, lista_spojnych);
  34.  
  35.                 tablica_parametrow[wierzcholek] = min(tablica_parametrow[wierzcholek], tablica_parametrow[lista_sasiedztwa[wierzcholek][i]]);
  36.             }
  37.  
  38.             else if(czy_jest_na_stose[lista_sasiedztwa[wierzcholek][i]] == false)
  39.             {
  40.                 tablica_parametrow[wierzcholek] =
  41.                 min(tablica_parametrow[wierzcholek], tablica_numerow_wierzcholkow[lista_sasiedztwa[wierzcholek][i]]);
  42.                 //cout<<"2: "<<" tab par "<<tablica_parametrow[wierzcholek]<<" tab par2 "<<tablica_numerow_wierzcholkow[lista_sasiedztwa[wierzcholek][i]];
  43.             }
  44.     }
  45.     lista *roboczy;
  46.  
  47.  //   cout<<"Stos: "<<odwiedzone_wierzcholki.size()<<endl;
  48.   //  cout<<"if(tablica_parametrow[wierzcholek] != tablica_numerow_wierzcholkow[wierzcholek]) "<<tablica_parametrow[wierzcholek]<<"\t"<<tablica_numerow_wierzcholkow[wierzcholek]<<endl;
  49.  
  50.     if(tablica_parametrow[wierzcholek] == tablica_numerow_wierzcholkow[wierzcholek])
  51.     {
  52.  
  53.  
  54.  
  55.         lista_spojnych[wierzcholek] = NULL;
  56.  
  57.         do
  58.         {
  59.                 roboczy = new lista;
  60.                 roboczy->wartosc = odwiedzone_wierzcholki.top();
  61.                 roboczy->nastepny = NULL;
  62.  
  63.                 odwiedzone_wierzcholki.pop();
  64.                 czy_jest_na_stose[roboczy->wartosc] = false;
  65.                 cout<<"LIsta"<<endl;
  66.                 lista_spojnych[wierzcholek]->nastepny = roboczy->nastepny;
  67.  
  68.         }while(roboczy->wartosc != wierzcholek);
  69.     }
  70.  
  71. }
  72. void odczytaj_wyniki(vector <lista*> &lista_spojnych)
  73. {
  74.     for(int i = 0; i < lista_spojnych.size(); i++)
  75.     {
  76.         do
  77.         {
  78.             cout<<lista_spojnych[i]->wartosc;
  79.             lista_spojnych[i] = lista_spojnych[i]->nastepny;
  80.  
  81.         }while(lista_spojnych[i] != NULL);
  82.         cout<<endl;
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement