Cod sursa(job #1373288)

Utilizator mvcl3Marian Iacob mvcl3 Data 4 martie 2015 17:51:48
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <set>
#include <vector>
#include <cstring>

#define Max_Size 50009
#define oo 100000

using namespace std;

typedef pair < int, int > NOD;

const char iname[] = "dijkstra.in";
const char oname[] = "dijkstra.out";

int N, M, D[Max_Size];

vector < NOD > V[Max_Size];

multiset < NOD > my_Heap;

void Djikstra()
{
    my_Heap.insert( {0, 1} );

    while( !my_Heap.empty() )   {
        NOD nod = *my_Heap.begin();
        my_Heap.erase( *my_Heap.begin() );

        for(vector < NOD > :: iterator it = V[nod.second].begin(); it != V[nod.second].end(); ++it)
            if(D[ it->first ] > nod.first + it->second) {
                my_Heap.erase( {D[ it->first ], it->first} );

                D[it->first] = nod.first + it->second;

                my_Heap.insert( {D[ it->first], it->first} );
            }
    }
}

int main()
{
    ifstream in( iname );

    in >> N >> M;
    for(int x, y, cost, i = 1; i <= M; ++i) {
        in >> x >> y >> cost;

        V[x].push_back( {y, cost} );
        V[y].push_back( {x, cost} );
    }

    for(int i = 1; i <= N; ++i) D[i] = oo;

    D[1] = 0;
    Djikstra();

    ofstream out( oname );

    for(int i = 2; i <= N; ++i)
        out << (D[i] != oo ? D[i] : 0) << ' ';
}