Ok teraz potrzebuje konkretnej porady, ponieważ stanąłem w martwym punkcie. Mam wczytane dane z plików do vectorów (przystanki i linie), na podstawie tych danych tworze sobie vector vectorów typu int który stanowi macierz sąsiedztwa (mam zatem graf otrzymany z wczytanych linii, vector vectorów jest typu int ponieważ przystanki są numerowane). Z macierzy sąsiedztwa wyszukuję sobie połączenie z punktu a do b na podstawie algorytmu dijkstry.
I pytanie: Jak zrobić aby algorytm djikstry "zwracał też uwagę" na trasy danych linii, ponieważ obecnie wyszukując trasę z punktu a do b wyznacza mi tę odległość w taki sposób jakby graf był tworzony przez jedną linię ( a chciałbym zrobić tak aby algorytm sugerował przesiadki itp.)
II pytanie: jak mam zmodyfikować implementację algorytmu dijkstry aby szukał zarówno z punktu a do b oraz z b do a?
#define ilosc_wierzcholkow 10
static void wyszukajLinie(vector <vector <int> > &macierz_sasiedztwa, int skad, int dokad)
{
int odleglosci[ilosc_wierzcholkow];
bool QS[ilosc_wierzcholkow];
for (int i = 0; i < ilosc_wierzcholkow; i++)
{
odleglosci[i] = INT_MAX,
QS[i] = false;
}
odleglosci[skad] = 0; // odleglosc od zrodla do zrodla =0
for (int i= 0; i <ilosc_wierzcholkow; i++)
{
int u = minOdleglosc(odleglosci,QS);
QS[u] = true;
for (int j=0;j<ilosc_wierzcholkow;j++)
{
if (!QS[j] && macierz_sasiedztwa[u][j] && odleglosci[u]!= INT_MAX&& odleglosci[u]+macierz_sasiedztwa[u][j] < odleglosci[j])
{
odleglosci[j] = odleglosci[u] + macierz_sasiedztwa[u][j];
}
}
}
drukujWyszukanePolaczenie(odleglosci,skad,dokad);
}
};
main.cpp
vector <Przystanek> przystanki;
vector <Linia> linie;
Plik::wczytajPrzystanki("mapa.txt",przystanki);
Plik::wczytajLinie("l.txt",linie,nazwy_plikow);
Linia::tworzMacierzSasiedztwa(linie,macierz_sasiedztwa,przystanki);
Linia::wyszukajLinie(macierz_sasiedztwa,4,0);