Cod sursa(job #1540717)

Utilizator bulbulicaAlexandrescu Cristian bulbulica Data 3 decembrie 2015 09:28:23
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

struct data
{
    int dist,nod;
};
int n,m,minim[50001],viz[50001];
vector<data> ma[50001];
void citire()
{
    int i,x,y,c;
    data aux;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        aux.dist=c;
        aux.nod=y;
        ma[x].push_back(aux);
    }
    minim[1]=0;
    for(i=2;i<=n;i++)
        minim[i]=1001*n;
}
void rezolvare()
{
    int p,u,x,i,c[n+m];
    data y;
    p=0;
    u=1;
    c[u]=1;
    while(p<u)
    {
        p++;
        x=c[p];
        viz[x]=0;
        for(i=0;i<ma[x].size();i++)
        {
            y=ma[x][i];
            if(minim[y.nod]>minim[x]+y.dist)
            {
                minim[y.nod]=minim[x]+y.dist;
                if(viz[y.nod]==0)
                {
                    c[++u]=y.nod;
                    viz[y.nod]=1;
                }
            }
        }
    }
}
void afisare()
{
    int i;
    for(i=2;i<=n;i++)
        if(minim[i]!=1001*n)
            g<<minim[i]<<' ';
        else
            g<<0<<' ';
}
int main()
{
    citire();
    rezolvare();
    afisare();
    g.close();
    return 0;
}