Pagini recente » Cod sursa (job #2909643) | Cod sursa (job #1598653) | Cod sursa (job #1940734) | Cod sursa (job #1429401) | Cod sursa (job #2722933)
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>
#define N 50005
#define INF 1000000
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
struct nodGraf{
int x, cost;
};
int costNoduri[N];
struct comp{
bool operator()(int &a, int &b){
return costNoduri[a] > costNoduri[b];
}
};
int n, m;
bool vizitat[N];
vector<vector<nodGraf> > graf(N);
priority_queue<int, vector<int>, comp> coada;
void dijkstra(int nodStart){
memset(costNoduri, INF, sizeof costNoduri);
coada.push(nodStart);
vizitat[nodStart] = 1;
costNoduri[nodStart] = 0;
while(!coada.empty()){
int nod = coada.top();
coada.pop();
vizitat[nod] = 0;
for(size_t i = 0; i < graf[nod].size(); ++i){
int vecin = graf[nod][i].x;
int cost = graf[nod][i].cost;
if(costNoduri[nod] + cost < costNoduri[vecin]){
costNoduri[vecin] = costNoduri[nod] + cost;
if(vizitat[vecin] == 0) coada.push(vecin), vizitat[vecin] = 1;
}
}
}
}
int main()
{
in>>n>>m;
for(int i = 1; i <= m; ++i){
int y; nodGraf nod;
in>>y>>nod.x>>nod.cost;
graf[y].push_back(nod);
}
dijkstra(1);
for(int i = 2; i<= n; ++i)
if(costNoduri[i] != INF) out<<costNoduri[i]<<" ";
else out<<"0 ";
in.close();
out.close();
return 0;
}