Cod sursa(job #1002960)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 29 septembrie 2013 13:58:39
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<fstream>
#include<vector>
#define oo (1<<30)
#define NMAX 50010
using namespace std;
ifstream in ("dijkstra.in");
ofstream out("dijkstra.out");
int N,M,d[NMAX];
vector <pair <int,int> > v[NMAX];
bool vizitat[NMAX];

void citire () {

    int i,c,x,y;
    in>>N>>M;

    for(i=1;i<=M;i++) {

        in>>x>>y>>c;
        v[x].push_back(make_pair(y,c));

        }

    in.close();

}

void solve() {

    int i,j,k,nod,min;

    for(i=2;i<=N;i++)
        d[i]=oo;

    for(j=1;j<=N;j++) {

        min=oo;

        for(k=1;k<=N;k++){

            if(d[k]<min && vizitat [k]==0){
                min=d[k];
                nod=k;
                }

            }

        vizitat[nod]=1;

        for(i=0;i<v[nod].size();i++)
            if(d[v[nod][i].first]>d[nod]+v[nod][i].second)
                d[v[nod][i].first]=d[nod]+v[nod][i].second;

        }

}

void afisare() {
    int i;
    for(i=2;i<=N;i++)
        if(d[i]==oo)
            out<<0<<" ";
        else
            out<<d[i]<<" ";
    out<<'\n';
    out.close();

}
int main () {
    citire();
    solve();
    afisare();

    return 0;
}