Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przeszukiwanie DFS listy sąsiedztwa

Ostatnio zmodyfikowano 2014-04-22 21:10
Autor Wiadomość
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;
}
P-108531
« 1 »
  Strona 1 z 1