Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void dfs(vector <vector<int> > &lista_sasiedztwa)
- {
- vector <int> tablica_numerow_wierzcholkow(lista_sasiedztwa.size(), 0); // VN
- vector <int> tablica_parametrow(lista_sasiedztwa.size(), 0); //VLow
- vector <bool> czy_jest_na_stose(lista_sasiedztwa.size(), false);
- stack <int> odwiedzone_wierzcholki;
- vector <lista*> lista_spojnych(lista_sasiedztwa.size());
- int cvn = 0;
- for(int i = 0; i < lista_sasiedztwa.size(); i++)
- {
- dfs_visit(lista_sasiedztwa, odwiedzone_wierzcholki, i, tablica_numerow_wierzcholkow, tablica_parametrow, czy_jest_na_stose, cvn, lista_spojnych);
- }
- odczytaj_wyniki(lista_spojnych);
- }
- void dfs_visit(vector <vector<int> > &lista_sasiedztwa, stack <int> &odwiedzone_wierzcholki,
- int wierzcholek, vector <int> &tablica_numerow_wierzcholkow, vector <int> &tablica_parametrow, vector <bool> &czy_jest_na_stose, int &cvn, vector <lista*> &lista_spojnych)
- {
- tablica_numerow_wierzcholkow[wierzcholek] = tablica_parametrow[wierzcholek] = cvn;
- cvn++;
- odwiedzone_wierzcholki.push(wierzcholek);
- czy_jest_na_stose[wierzcholek] = true;
- for(int i = 0; i < lista_sasiedztwa[wierzcholek].size(); i++)
- {
- if(!czy_jest_na_stose[lista_sasiedztwa[wierzcholek][i]])
- {
- dfs_visit(lista_sasiedztwa, odwiedzone_wierzcholki, lista_sasiedztwa[wierzcholek][i], tablica_numerow_wierzcholkow, tablica_parametrow,
- czy_jest_na_stose, cvn, lista_spojnych);
- tablica_parametrow[wierzcholek] = min(tablica_parametrow[wierzcholek], tablica_parametrow[lista_sasiedztwa[wierzcholek][i]]);
- }
- else if(czy_jest_na_stose[lista_sasiedztwa[wierzcholek][i]] == false)
- {
- tablica_parametrow[wierzcholek] =
- min(tablica_parametrow[wierzcholek], tablica_numerow_wierzcholkow[lista_sasiedztwa[wierzcholek][i]]);
- //cout<<"2: "<<" tab par "<<tablica_parametrow[wierzcholek]<<" tab par2 "<<tablica_numerow_wierzcholkow[lista_sasiedztwa[wierzcholek][i]];
- }
- }
- lista *roboczy;
- // cout<<"Stos: "<<odwiedzone_wierzcholki.size()<<endl;
- // cout<<"if(tablica_parametrow[wierzcholek] != tablica_numerow_wierzcholkow[wierzcholek]) "<<tablica_parametrow[wierzcholek]<<"\t"<<tablica_numerow_wierzcholkow[wierzcholek]<<endl;
- if(tablica_parametrow[wierzcholek] == tablica_numerow_wierzcholkow[wierzcholek])
- {
- lista_spojnych[wierzcholek] = NULL;
- do
- {
- roboczy = new lista;
- roboczy->wartosc = odwiedzone_wierzcholki.top();
- roboczy->nastepny = NULL;
- odwiedzone_wierzcholki.pop();
- czy_jest_na_stose[roboczy->wartosc] = false;
- cout<<"LIsta"<<endl;
- lista_spojnych[wierzcholek]->nastepny = roboczy->nastepny;
- }while(roboczy->wartosc != wierzcholek);
- }
- }
- void odczytaj_wyniki(vector <lista*> &lista_spojnych)
- {
- for(int i = 0; i < lista_spojnych.size(); i++)
- {
- do
- {
- cout<<lista_spojnych[i]->wartosc;
- lista_spojnych[i] = lista_spojnych[i]->nastepny;
- }while(lista_spojnych[i] != NULL);
- cout<<endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement