Cod sursa(job #520763)

Utilizator andu04Popa Andi andu04 Data 10 ianuarie 2011 12:00:21
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <stdio.h>

#define NMAX 50001
# define INF 0x3f3f3f3f
using namespace std;

struct nod{
    int inf,cost;
    nod *urm;
};

nod *g[NMAX];

int n,m;
struct vec{
    int dist,pred;
};
vec v[NMAX];

void add(int x,int y,int z)
{
    nod *aux=new nod;
    aux->inf=y;
    aux->cost=z;
    aux->urm=g[x];
    g[x]=aux;
}

void citire()
{
    freopen ("dijkstra.in","r",stdin);
    scanf ("%d%d",&n,&m);
    int x,y,z;
    for (int i=1;i<=m;i++)
    {
        scanf ("%d%d%d",&x,&y,&z);
        add(x,y,z);
    }
    v[1].dist=0;
    v[1].pred=0;
    for (int i=2;i<=n;i++)
        v[i].dist=INF,v[i].pred=0;
    for (int i=1;i<=n-1;i++)
        for (nod *p=g[i];p;p=p->urm)
        {
            int u=i;
            int t=p->inf;
            if (v[u].dist+p->cost<v[t].dist)
            {
                v[t].dist=v[u].dist+p->cost;
                v[t].pred=u;
            }
        }
    freopen ("dijkstra.out","w",stdout);
    for (int i=2;i<=n;i++)
        printf("%d ",v[i].dist);
}

int main()
{
    citire();
    return 0;
}