Novejsi varianta dle http://cs.wikipedia.org/wiki/Dijkstr%C5%AFv_algoritmus

 
#include "stdafx.h"
#include <iostream>
#include <string>
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;
}
 
vzdalenosti.txt · Last modified: 2018/04/11 18:40 by 147.32.8.110
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki