Cod sursa(job #655959)

Utilizator 1994Barbulescu Daniel 1994 Data 3 ianuarie 2012 17:36:52
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#define N 50005
using namespace std;

struct nod{
    int y,d;
};

vector <nod> G[N];
int n,m;
int viz[N],dist[N];

void read()
{
    int x;
    nod t;
    scanf("%d %d",&n,&m);
    for (int i=1;i<=m;i++)
    {
        scanf("%d %d %d",&x,&t.y,&t.d);
        G[x].push_back(t);
    }
}

void init()
{
    for (int i=2;i<=n;i++)
        dist[i]=1010;
}

void dijkstra(int nod)
{
    if (nod>n)
        return;
    for (int i=0;i<G[nod].size();i++)
        if (!viz[G[nod][i].y])
            dist[G[nod][i].y]=min(dist[G[nod][i].y],dist[nod]+G[nod][i].d);
    viz[nod]=1;
    dijkstra(nod+1);
}

void print()
{
    for (int i=2;i<=n;i++)
        if (dist[i]!=1010)
            printf("%d ",dist[i]);
        else
            printf("0 ");
}

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    read();
    init();
    dijkstra(1);
    print();
    return 0;
}