Cod sursa(job #1021945)

Utilizator Johny_Depp22Johnny Depp Johny_Depp22 Data 4 noiembrie 2013 15:06:02
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#define inf 999999999
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

struct muchie {int x, y, c;} a[250005];
int N, M, start=1, D[50005];

inline void read()
{
    f>>N>>M;
    for (int i=1; i<=N; ++i) D[i]=inf;
    for (int i=1; i<=M; ++i)
    {
        f>>a[i].x>>a[i].y>>a[i].c;
        if (a[i].x==start) D[a[i].y]=a[i].c;
        //pt grafuri neorientate
        //if (a[i].y==start) D[a[i].x]=a[i].c;
    }
}

inline void dijkstra()
{
    bool ok=1;
    while (ok)
    {
        ok=0;
        for (int i=1; i<=M; ++i)
            if (D[a[i].y]>D[a[i].x]+a[i].c)
            {
                D[a[i].y]=D[a[i].x]+a[i].c;
                ok=1;
            }
            /*pt grafuri neorientate
            else if (D[a[i].x]>D[a[i].y]+a[i].c)
            {
                ok=1;
                D[a[i].x]=D[a[i].y]+a[i].c;
            }*/
    }
}

int main()
{
    read();
    dijkstra();

    for (int i=1; i<=N; ++i)
        if (i!=start)
        {
            if (D[i]>=inf) g<<0<<' ';
                else g<<D[i]<<' ';
        }

    return 0;
}