Cod sursa(job #2408259)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 17 aprilie 2019 19:14:41
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

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

const int inf = 1<<30;

struct graf{
    int nod,cost;
    graf *next;
};
int n,m;
graf *s[50005];
int val[50005];
int fost[50005];

void add(int a,int b,int costul){
    graf *q = new graf;
    q->cost = costul;
    q->nod = b;
    q->next = s[a];
    s[a] = q;
}

int main()
{
    int i,a,b,c,minim,pmin,j;
    fin>>n>>m;
    for(i = 1; i <= m; i++){
        fin>>a>>b>>c;
        add(a,b,c);
    }
    for(i = 2; i <= n; i++){
        val[i] = inf;
    }
    for(i = 1; i <= n; i++){
        minim = inf;
        for(j = 1; j <= n; j++){
            if(val[j] < minim && fost[j] != 1){
                minim = val[j];
                pmin = j;
            }
        }
        fost[pmin] = 1;
        graf *t = s[pmin];
        while(t){
            if(val[t->nod] > val[pmin] + t->cost){
                val[t->nod] = val[pmin] + t->cost;
            }
            t = t->next;
        }
    }
    for(i = 2; i <= n; i++){
        if(val[i] != inf)
        fout<<val[i]<<" ";
        else
        fout<<"0"<<endl;
    }
    return 0;
}