Cod sursa(job #1443687)

Utilizator RaileanuCristian Raileanu Raileanu Data 28 mai 2015 14:44:05
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <vector>
#include <set>
using namespace std;
ifstream f1("dijkstra.in");
ofstream f2("dijkstra.out");
#define NMAX 50101
#define INF 1000000006

int n, m, d[NMAX];
vector<int> Graf[NMAX], Cost[NMAX];
set< pair<int,int> > S;

void solve()
{
    int i,  val, x;

    for (i=2; i<=n; i++ )
        d[i]= INF;

    S.insert( make_pair(0,1) );

    while ( S.size() > 0 )
    {
        val= (*S.begin()).first;
        x= (*S.begin()).second;

        S.erase(*S.begin());

        for (i=0; i< Graf[x].size(); i++ )
            if ( d[ Graf[x][i] ] > val + Cost[x][i] )
            {
                d[ Graf[x][i] ]= val + Cost[x][i];
                S.insert( make_pair( d[Graf[x][i] ], Graf[x][i] ) );
            }
    }

}

int main()
{
    int i, x, y, c;

    f1>>n>>m;

    for (i=1; i<=m; i++)
    {
        f1>>x>>y>>c;
        Graf[x].push_back(y);
        Cost[x].push_back(c);
    }

    solve();

    for (i=2; i<=n; i++)
        if ( d[i] == INF )
            f2<<"0 ";
        else
            f2<<d[i]<<" ";

    return 0;
}