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

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License