Pagini recente » Cod sursa (job #165635) | Cod sursa (job #2571889) | Cod sursa (job #3000845) | Cod sursa (job #2569543) | Cod sursa (job #1373288)
#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) << ' ';
}