Novejsi varianta dle http://cs.wikipedia.org/wiki/Dijkstr%C5%AFv_algoritmus #include "stdafx.h" #include #include using namespace std; const int n = 3; // pocet vrcholu const int inf = 1000000; // nekonecna vzdalenost int dist[n][n]; // delka hran ... zadani int start = 0; // index vychoziho vrcholu bool S[n]; // mnozina navstivenych bodu int d[n]; // d[i] ... vzdalenost vychoziho vrcholu a vrcholu s indexem i int main() { for (int i = 0; i < n; i++) for (int k = 0; k < n; k++) dist[i][k] = inf; // nekonecne vzdalenosti, nevede cesta for (int i = 0; i < n; i++) dist[i][i] = 0; // vzdalenost z i do i, nulova vzdalenost // vlozime vlastni vzdalenosti dist[0][1] = 10; dist[1][2] = 20; // dist[0][2] = 15; // zde konci zadani for (int i = 0; i < n; i++) S[i] = false; // S je prazdna for (int i = 0; i < n; i++) d[i] = inf; // d obsahuje nekonecna d[start] = 0; // jen pro vychozi vrchol vlozime 0 bool finished = false; while (!finished) { // hledam nejmensi d[u], kde u neni z S int m = inf; // nejmensi hodnota int u = -1; // index nejmensi hodnoty for (int i = 0; i < n; i++) if (S[i] == false) if (d[i] < m) { m = d[i]; // hodnota u = i; // index } if (u != -1) { cout << "add " << u << endl; for (int v = 0; v < n; v++) // v ... okolni body { // porovname cestu start -> u -> v ... d[u] + dist[u][v] // a puvodni znamou cestu start->v ... d[v] if (d[u] + dist[u][v] < d[v]) { d[v] = d[u] + dist[u][v]; cout << "enter " << u << " -> " << v << endl; } } S[u] = true; // u pridam do S } else finished = true; } for (int i = 0; i < n; i++) cout << "d[" << i << "] = " << d[i] << endl; cout << "Konec programu" << endl; system ("pause"); return 0; }