Przeszukiwanie DFS listy sąsiedztwa
Ostatnio zmodyfikowano 2014-04-22 21:10
gapz Temat założony przez niniejszego użytkownika |
Przeszukiwanie DFS listy sąsiedztwa » 2014-04-22 21:10:20 Witam, otóż, mam do napisania program który wczyta z pliku : miasto_startu, miasto_ladowania, czas_lotu, np: Warszawa Rzeszow 70 Warszawa Gdansk 160 Warszawa Krakow 60 Warszawa Wroclaw 90 Warszawa Poznan 75 Gdansk Warszawa 170 Gdansk Lodz 70 Poznan Wroclaw 25 Poznan Gdansk 100 Wroclaw Rzeszow 160 Rzeszow Wroclaw 120 Rzeszow Krakow 50 Krakow Lodz 100 Krakow Wroclaw 40 Lodz Poznan 50 Lodz Warszawa 100 następnie tworzymy listę taka że : miasto_startowe: miasto_docelowe czas_lotu, miasto_docelowe czas_lotu... (czyli tak zwaną listę sąsiedztwa). Kod zamieszczony niżej spełnia wyżej wymienione warunki. Ostatnim krokiem którego za chiny nie mogę napisać jest przeszukanie tej listy metodą DFS i znalezienie najdłuższego "łańcucha". Mógłby ktoś podpowiedzieć, dać jakieś wskazówki, w jaki sposób wykonać to przeszukiwanie DFS na tych listach ? #include <iostream> #include <fstream> #include <stack> #include <vector> using namespace std;
const int MAX_N = 100;
struct sasiedzi{ string miasto; int czas; struct sasiedzi *nast; }; struct graf{ string poczatek; struct sasiedzi *polaczenie; struct graf *nast; };
int jest(struct graf *st,string m) { struct graf *pom=st; int ok=0; while(pom!=NULL) { if(pom->poczatek==m) { ok=1; break; } pom=pom->nast; } return ok; }
struct graf *dodaj_miasto(struct graf *st,string m) { struct graf *nowy=new struct graf(); nowy->poczatek=m; nowy->polaczenie=NULL; nowy->nast=st; return nowy; }
void pisz_liste_miast(struct graf *st) { struct graf *pom=st; struct sasiedzi *pom1; while(pom!=NULL) { cout<<pom->poczatek<<":"; pom1=pom->polaczenie; while(pom1!=NULL) { cout<<pom1->miasto<<" "<<pom1->czas<<", "; pom1=pom1->nast; } cout<<endl; pom=pom->nast; } }
void dodaj_polaczenie(struct graf *st,string m1,string m2,int w) { struct graf *pom=st; struct sasiedzi *nowy= new struct sasiedzi(); while(pom->poczatek!=m1)pom=pom->nast; nowy->miasto=m2; nowy->czas=w; nowy->nast=pom->polaczenie; pom->polaczenie=nowy; }
struct graf *czytaj(char *plik) { struct graf *rozklad=NULL; fstream wejscie; string miasto1,miasto2; int czas_pol; wejscie.open(plik); while(!wejscie.eof()) { wejscie>>miasto1; wejscie>>miasto2; wejscie>>czas_pol; if(!jest(rozklad,miasto1))rozklad=dodaj_miasto(rozklad,miasto1); dodaj_polaczenie(rozklad,miasto1,miasto2,czas_pol);
} pisz_liste_miast(rozklad); wejscie.close(); }
int main() {
czytaj("cwiczenie.txt");
return 0; } |
|
« 1 » |