Cod sursa(job #311804)

Utilizator DraStiKDragos Oprica DraStiK Data 4 mai 2009 11:29:49
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <stdio.h>
#define DIM 50005
#define INF 1<<31-1
struct nod
{
    int x,ct;
    nod *urm;
} *lst[DIM];
int cost[DIM],viz[DIM];
int n,m;
void add (int a,int b,int c)
{
    nod *p=new nod;
    p->x=b;
    p->ct=c;
    p->urm=lst[a];
    lst[a]=p;
}
void read ()
{
    int i,x,y,cs;
    scanf ("%d%d",&n,&m);
    for (i=1; i<=m; ++i)
    {
        scanf ("%d%d%d",&x,&y,&cs);
        add (x,y,cs);
    }
}
void init ()
{
    int i;
	for (i=2; i<=n; ++i)
        cost[i]=INF;
}
void solve ()
{
    nod *p;
    int i,j,min,imin;
    for (i=1; i<=n; ++i)
    {
        min=INF;
        for (j=1; j<=n; ++j)
			if (cost[j]<min && !viz[j])
            {
                min=cost[j];
                imin=j;
            }
        viz[imin]=1;
        for (p=lst[imin]; p; p=p->urm)
            if (cost[imin]+p->ct<cost[p->x])
                cost[p->x]=cost[imin]+p->ct;
    }
}
void print ()
{
    int i;
    for (i=2; i<=n; ++i)
        if (cost[i]!=INF)
            printf ("%d ",cost[i]);
        else
            printf ("0 ");
}
int main ()
{
    freopen ("dijkstra.in","r",stdin);
    freopen ("dijkstra.out","w",stdout);
    read ();
    init ();
    solve ();
    print ();
    return 0;
}