Cod sursa(job #374034)

Utilizator cristikIvan Cristian cristik Data 15 decembrie 2009 19:34:56
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#define max 50010
const int inf=1<<30;
struct lista
{
    int nod,cost;
    lista *next;
};
lista *g[max],*p;
int d[max],q[max*5],i,j,n,m,k,c,prim,ultim,u;
char inq[5*max];
void push(int i,int j,int c)
{
    lista *p=new lista;
    p->cost=c;
    p->nod=j;
    p->next=g[i];
    g[i]=p;
}
int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(k=1; k<=m; k++)
    {
        scanf("%d%d%d",&i,&j,&c);
        push(i,j,c);
    }
    for(i=1; i<=n; i++) d[i]=inf;
    d[1]=0;
    q[1]=prim=ultim=1; inq[1]=1;
    while(prim<=ultim)
    {
        u=q[prim++]; inq[u]=0;
        for(p=g[u]; p!=NULL; p=p->next)
         if(d[p->nod]>d[u]+p->cost)
         {
             if(!inq[p->nod])
             {
                 inq[p->nod]=1;
                 q[++ultim]=p->nod;
             }
             d[p->nod]=d[u]+p->cost;
         }
    }
    for(i=2; i<=n; i++)
     if(d[i]!=inf) printf("%d ",d[i]);
     else printf("0 ");
    return 0;
}