Cod sursa(job #1222797)

Utilizator cojocarugabiReality cojocarugabi Data 24 august 2014 13:58:00
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
# include <fstream>
# include <iostream>
# include <cstring>
# include <queue>
using namespace std;
ifstream fi("dijkstra.in");
ofstream fo("djikstra.out");
typedef struct node
{
    int x,y;
    node *next;
} *nod;
const int nmax=50005;
const int infi=1<<30;
nod S[nmax];
queue <int> Q;
int D[nmax];
int read()
{
    char c[30];
    fi>>c;
    int p=0,k=strlen(c);
    for (int i=0;i<k;++i) p=p*10+c[i]-'0';
    return (p);
}
int main(void)
{
    int n=read(),m=read(),x,y,z;
    for (int i=1;i<=m;++i)
    {
        x=read();y=read();z=read();
        nod p=new node;
        p->x=y;p->y=z;p->next=S[x];S[x]=p;
    }
    for (int i=1;i<=n;++i) D[i]=infi;
    int N=1;
    Q.push(1);
    D[1]=0;
    while (!Q.empty())
    {
        int q=Q.front();Q.pop();
        for (nod p=S[q];p;p=p->next)
             if (D[p->x]>D[q]+p->y)
                D[p->x]=D[q]+p->y,Q.push(p->x);
    }
    for (int i=2;i<=n;++i)
        fo<<(D[i]==infi ? 0:D[i])<<" ";
    fo<<"\n";
    fo.close();
    return 0;
}