Cod sursa(job #2049719)

Utilizator marcudanfDaniel Marcu marcudanf Data 27 octombrie 2017 16:23:29
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define nmax 50005
#define oo 2000000000

using namespace std;

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

int d[nmax],s[nmax];
int n,m;

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

void dijkstra(){
    for(int i=2;i<=n;i++)
        d[i]=oo;
    for(int k=1;k<n;k++){
        int Min=oo,nod;
        for(int j=1;j<=n;j++){
            if(d[j]<Min&&s[j]==0){
                Min=d[j];
                nod=j;
            }
        }
        s[nod]=1;
        for(int i=0;i<G[nod].size();i++){
            int vecin=G[nod][i].first;
            int cost=G[nod][i].second;
            d[vecin]=min(d[vecin],d[nod]+cost);
        }
    }
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y,c;
        fin>>x>>y>>c;
        G[x].push_back(make_pair(y,c));
    }
    dijkstra();
    for(int i=2;i<=n;i++){
        if(d[i]==oo)
            d[i]=0;
        fout<<d[i]<<' ';
    }
    return 0;
}