Cod sursa(job #976389)

Utilizator marinMari n marin Data 23 iulie 2013 10:13:15
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <set>
#define DIMN 50010
#define INF 1000000000

using namespace std;

vector<pair<int,int> > L[DIMN];
//vector<pair<int,int> >::iterator itl;
set<pair<int,int> > S;
//set<pair<int,int> >::iterator it;
int D[DIMN];
int V[DIMN];
int n,m,x,y,c,i,nod,val,nodvecin,valvecin;
pair<int,int> p;

int main() {
/*
    S.insert(make_pair(0,1));
    S.insert(make_pair(0,2));

    for (it = S.begin();it!=S.end();it++) {
        cout<<it->first<<" "<<it->second<<"\n";

    }
*/


    ifstream fin("dijkstra.in");
    ofstream fout("dijkstra.out");

    fin>>n>>m;

    for (i=1;i<=m;i++) {
        fin>>x>>y>>c;
        L[x].push_back(make_pair(c,y));
    }

    for (i=2;i<=n;i++)
        D[i] = INF;

    S.insert(make_pair(0,1));
    while (!S.empty()) {
        nod = S.begin()->second;
        val = S.begin()->first;
        S.erase(S.begin());
//        if (V[nod] == 1)
//            continue;
//        V[nod] = 1;
        for (i = 0;i<L[nod].size();i++) {
            nodvecin = L[nod][i].second;
            valvecin = L[nod][i].first;
            if (D[nodvecin] > D[nod] + valvecin) {
                D[nodvecin] = D[nod] + valvecin;
                S.insert(make_pair(D[nodvecin],nodvecin));
            }
        }
    }
    for (i=2;i<=n;i++)
        if (D[i] == INF)
            fout<<"0 ";
        else
            fout<<D[i]<<" ";

    return 0;
}