Cod sursa(job #2035620)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 9 octombrie 2017 18:13:07
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <cstdio>
#include <vector>
#define INF 2000000000

using namespace std;
int d[50001],f[50001];
vector <pair <int,int> > v[250001];

int main()
{
    FILE *fin=fopen ("dijkstra.in","r");
    FILE *fout=fopen ("dijkstra.out","w");
    int n,m,i,mini,nod,vecin,cost,x,y,z;
    fscanf (fin,"%d%d",&n,&m);
    for (i=1;i<=m;i++){
        fscanf (fin,"%d%d%d",&x,&y,&z);
        v[x].push_back (make_pair (y,z) );
    }
    for (i=2;i<=n;i++)
        d[i]=INF;
    for (;;){
        mini=INF;
        for (i=1;i<=n;i++){
            if (f[i]==0 && mini>d[i]){
                mini=d[i];
                nod=i;
            }
        }
        if (mini==INF)
            break;
        f[nod]=1;
        for (vector <pair <int,int> > :: iterator it=v[nod].begin() ; it!=v[nod].end() ; it++){
            vecin=it->first;
            cost=it->second;
            if (f[vecin]==0 && cost+d[nod]<d[vecin])
                d[vecin]=cost+d[nod];
        }
    }
    for (i=2;i<=n;i++){
        if (d[i]==INF)
            d[i]=0;
        fprintf (fout,"%d ",d[i]);
    }
    return 0;
}