Cod sursa(job #1427051)

Utilizator bogdanciurezubogdan ciurezu bogdanciurezu Data 1 mai 2015 13:58:35
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define nmax 80000

using namespace std;


ifstream f("dijkstra.in");
ofstream g("dijkstra.out");


int N, M, costuri[250000];
bool seen[nmax];

vector <pair <int,int>> graf[nmax];


int main()
{int i, a, cost, b, vizibile, minime, nrMin, j;

    f>>N>>M;

    vizibile = 1;
    for(i = 2; i <= N; ++i)
        costuri[i] = 1100;
    costuri[1] = 0;


    for(i = 1; i <= M; ++i){
        f>>a>>b>>cost;
        graf[a].push_back(make_pair(b, cost));
        graf[b].push_back(make_pair(a, cost));
    }

    bool update = 1;
    while(vizibile < N && update){
        minime = 10000;
        update = false;

        for(i = 1; i <= N; ++i)
            if(!seen[i] && costuri[i] < minime){
                minime = costuri[i];
                nrMin = i;
            }

        seen[nrMin] = true;

        for(j = 0; j < graf[nrMin].size(); ++j){
                if(costuri[nrMin] + graf[nrMin][j].second < costuri[graf[nrMin][j].first]){
                    costuri[graf[nrMin][j].first] = costuri[nrMin] + graf[nrMin][j].second;
                    update = true;
                    ++vizibile;
                }
        }
    }

    for(i = 2; i <= N; ++i){
        if(costuri[i] != 1100)
            g<<costuri[i]<<' ';
        else g<<0<<' ';
    }
    g<<'\n';

    return 0;
}