Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Vertices {
- string name;
- list vertices;
- Vertices * next;
- };
- struct listofString {
- string name;
- listofString *next;
- };
- struct vertinfo {
- string name;
- int koszt;
- listofString *visited;
- };
- /*Na poczatku musisz miec wypelnione Tab wierzcholkami i odleglosciami (wierzcholek poczatkowy ma miec odleglosc 0
- pusta liste poprzednikow a reszta nieskonczonosc i tez pusta liste poprzednikow). Wywolujac funkcje koszt ustawiasz na
- 0 i poprzednicy to pusta lista*/
- void dijkstra(Vertices *&S, listofString *&Q, vertinfo *&Tab, string vert, int koszt, listofString poprzednicy) {
- dodajnapoczatek(poprzednicy, vert); // dodajesz na poczatek aktualny wierzcholek do listy poprzednikow
- dodajnapoczatek(Q, vert)// to samo tylko ze do listy Q (lista Q jest podana referencyjnie takze niezaleznie dla wszystkich wierzcholkow jest taka sama w sensie nie tak jak poprzednicy gdzie dla kazdej galezi rekurencji jest inna)
- listaSasiadowzodleglosciami *sasiedzi = getNeighbours(S, vert);//pobierz liste sasiadow wierzcholka vert
- while (sasiedzi) {
- if (!sprawdzCzyJestWOdwiedzonych(sasiedzi->city, Q)) { //sprawdzasz czy jest w liscie Q jesli tak to nic se nei robisz
- int kosztsasiadaZtabeli = pobierzkoszt(Tab, sasiedzi->city); // pobierasz koszt z tej listy co tobie mowilem z trzema argumentami
- if (koszt + odleglosc(sasiedzi->city) < kosztsasiadaZtabeli) { //no jesli ten koszt jest wiekszy niz droga ktora dotarles do tego wierzcholka to
- Ustawnowykoszt(Tab, sasiedzi->city, koszt + odleglosc); // zastap ten koszt nowym
- usun(Tab->poprzednicy); //usun wszystkich poprzednikow
- tab -> poprzednicy = poprzednicy; //zastap poprzednikow z tabeli nowymi
- dijkstra(S, Q, Tab, sasiedzi->city, koszt + odleglosc(sasiedzi->city, poprzednicy);//rekurencyjnie wywolaj funkcje dla nowego wierzcholka
- }
- }
- sasiedzi = sasiedzi->next
- }
- }
- //funkcja nic nie zwraca ale zmienia ci poprzez referencje masz ustawiona tabele Tab i wystarczy pobrac z tej tabeli dla wierzcholka porządanego jego koszt i poprzednikow
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement