Pagini recente » Cod sursa (job #2549459) | Cod sursa (job #1623310) | Cod sursa (job #340669) | Cod sursa (job #2707470) | Cod sursa (job #2499363)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#define pinf 20000000
#define NM 100005
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n , m , p , d[NM] , v[NM];
struct arc
{
int a , c;
};
vector <arc> G[NM];
bool compar(int x , int y)
{
return (d[x] > d[y]);
}
priority_queue < int , vector <int> , bool (*)(int , int) > q(compar);
void citire()
{
fin >> n >> m;
int x , y;
arc aux;
for(int i = 1 ; i <= m ; i ++)
{
fin >> x >> y >> aux.c;
aux.a = x;
G[y].push_back(aux);
aux.a = y;
G[x].push_back(aux);
}
}
void dijkstra()
{
int k , lg;
for(int i = 1 ; i <= n ; i ++)
d[i] = pinf;
d[1] = 0;
v[1] = 1;
q.push(1);
while(!q.empty())
{
k = q.top();
q.pop();
v[k] = 0;
for(int i = 0 ; i < G[k].size() ; i ++)
{
int r = G[k][i].a;
int cost = G[k][i].c;
lg = cost + d[k];
if(d[r] > lg)
{
d[r] = lg;
if(v[r] == 0)
{
v[r] = 1;
q.push(r);
}
}
}
}
}
void afisare()
{
for(int i = 2 ; i <= n ; i ++)
fout << d[i] << ' ';
}
int main()
{
citire();
dijkstra();
afisare();
return 0;
}