Cod sursa(job #1771023)

Utilizator popabogdanPopa Bogdan Ioan popabogdan Data 5 octombrie 2016 09:46:01
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
#define inf (int)1e9
#define nmax 101
#define pb push_back
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct arc
{
    int v,c;
};
int i,j,c,p;
int n;
int d[nmax],v[nmax];
vector<arc>g[nmax];
void dijkstra(int p)
{
    int i;
    for(i=0;i<g[p].size();i++)
        d[g[p][i].v]=g[p][i].c;
    v[p]=0;
    int ok=0,mi=inf,vf;
    while(!ok)
    {
        mi=inf;
        ok=1;
        for(i=1;i<=n;i++)
            if(!v[i])
                if(mi>d[i])
                    mi=d[i],vf=i;
        v[vf]=1;
        if(mi!=inf)
        {
            ok=0;
            for(i=0;i<g[vf].size();i++)
            if(!v[g[vf][i].v])
                d[g[vf][i].v]=min(d[g[vf][i].v],d[vf]+g[vf][i].c);
        }
    }
}
int main()
{
    fin>>n>>p;
    while(fin>>i>>j>>c)
        g[i].pb({j,c});
    for(i=1;i<=n;i++)d[i]=inf;
    d[1]=0;
    dijkstra(1);
    for(i=2;i<=n;i++)
        fout<<(d[i]==inf ? 0 : d[i])<<" ";
    return 0;
}