Cod sursa(job #679284)

Utilizator GaborGabrielFMI - GabrielG GaborGabriel Data 12 februarie 2012 23:31:20
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

int i,j,n,m,col[50005],pi[50005],coada[50005],in=1,sf=0,acum,k,q;

struct nod{
    int x,cost;
    nod*urm;
}*Z[100],*p;

int main()
{
    int a,b,c;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>a>>b>>c;
        p = new nod;
        p->x = a;
        p->cost = c;
        p->urm = Z[b];
        Z[b] = p;

        p=new nod;
        p->x = b;
        p->cost = c;
        p->urm = Z[a];
        Z[a] = p;
    }
    p = Z[1];
    pi[1]=0;
    col[1]=2;
    while(p)
    {
        k = p->x;
        pi[p->x] = p->cost;
        coada[++sf] = p->x;
        col[p->x]=1;
        p=p->urm;
    }
    while(in<=sf)
    {
        acum = coada[in];
        p = Z[acum];
        while(p)
        {
            q=p->x;
            if(col[p->x]==0)
            {
                coada[++sf] = p->x;
                pi[p->x] = pi[acum] + p->cost;
                col[p->x]=1;
            }
            else
                if(col[p->x]==1 && pi[p->x] > pi[acum] + p->cost)
                    pi[p->x] = pi[acum] + p->cost;
            p=p->urm;
        }
        col[acum]=2;
        in++;
    }
    for(i=2;i<=n;i++)
        g<<pi[i]<<' ';
    f.close();
    g.close();
    return 0;
}