Algorytm Dijkstry
#include <vector> #include <set> using namespace std; const int NIES = 2147483647; enum KOLOR { BIALY, SZARY, CZARNY }; vector<vector<pair<int, int> > > graf; vector<KOLOR> kolor; vector<int> odleglosc; vector<int> poprzednik; struct comp { bool operator () (const int a, const int b) const { return odleglosc[a] == odleglosc[b] ? a < b : odleglosc[a] < odleglosc[b]; } }; set<int, comp> kopiec; void dijkstra (int s) { kopiec.clear(); kolor.assign(graf.size(), BIALY); odleglosc.assign(graf.size(), NIES); poprzednik.assign(graf.size(), NIES); kolor[s] = SZARY; odleglosc[s] = 0; kopiec.insert(s); while (!kopiec.empty()) { int v = *(kopiec.begin()); kopiec.erase(kopiec.begin()); for (vector<pair<int, int> >::const_iterator i = graf[v].begin() ; i != graf[v].end() ; ++i) { int u = i->first; int k = i->second; if (odleglosc[u] > odleglosc[v] + k) { poprzednik[u] = v; if (kolor[u] == BIALY) { kolor[u] = SZARY; odleglosc[u] = odleglosc[v] + k; kopiec.insert(u); } else if (kolor[u] == SZARY) { kopiec.erase(kopiec.find(u)); odleglosc[u] = odleglosc[v] + k; kopiec.insert(u); } } } kolor[v] = CZARNY; } }
Realizacja algorytmu dijkstry w c++
Plik spakowany do formatu zip: dijkstra
wersja strony: 7, ostatnia edycja: 27 Jan 2010 21:56