Cod sursa(job #1967515)

Utilizator mihailarminia1234Arminia Mihail mihailarminia1234 Data 16 aprilie 2017 19:07:44
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>

#define INF (1<<29)
#define MAXN 50001

using namespace std;

struct Nod
{
    int info, cost;
    Nod *next;
};

Nod *L[MAXN], *p;
int n, m, x, y, cost, d[MAXN];
bool viz[MAXN];

void Add(int x, int y, int c)
{
    p=new Nod;
    p->info=y;
    p->cost=c;
    if(L[x]==NULL)
    {
        p->next=NULL;
        L[x]=p;
    }
    else
    {
        p->next=L[x];
        L[x]=p;
    }
}

void Dijsktra(int nod)
{
    int minim, k;
    for(int i=2;i<=n;++i) d[i]=INF;
    for(int i=1;i<=n;++i)
    {
        minim=INF;
        for(int j=1;j<=n;++j)
            if(!viz[j] && d[j]<minim)
            {
                minim=d[j];
                k=j;
            }
        viz[k]=true;
        for(Nod *p=L[k];p!=NULL;p=p->next)
            if(d[k]+p->cost<d[p->info]) d[p->info]=d[k]+p->cost;
    }
}

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d %d", &n, &m);
    for(int i=1;i<=m;++i)
    {
        scanf("%d %d %d", &x, &y, &cost);
        Add(x,y,cost);
    }
    Dijsktra(1);
    for(int i=2;i<=n;i++)
        if(d[i]==INF) printf("0 ");
        else printf("%d ",d[i]);
    return 0;
}