Pagini recente » Cod sursa (job #2712271) | Cod sursa (job #2496522) | Cod sursa (job #2499415) | Cod sursa (job #3350226) | Cod sursa (job #2853748)
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>
#include <iostream>
using namespace std;
#define lim 50100
struct node
{
int direction;
int cost;
};
vector<node> G[lim];
///node,cost
priority_queue<pair<int,int>> q;
int N,M;
int rezultat[lim];
bool vizitat[lim];
void dijkstra()
{
rezultat[1] = 0;
q.push({0, 1});
while (!q.empty())
{
/// use node as currentNode, direction being x not y in this case
pair<int,int> top = q.top();
q.pop();
if(!vizitat[top.second])
{
vizitat[top.second] = true;
for(auto nod : G[top.second])
{
if(rezultat[nod.direction] > rezultat[top.second] + nod.cost )
{
rezultat[nod.direction] = rezultat[top.second] + nod.cost;
q.push(make_pair(-rezultat[nod.direction],nod.direction));
}
}
}
}
}
int main() {
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int source, destination, cost;
fin>>N>> M;
for (int i = 1; i <= N; i++) {
fin >> source >> destination >> cost;
G[source].push_back({destination, cost});
}
for (int i = 1; i <= N; i++)
rezultat[i] = INT_FAST16_MAX;
dijkstra();
for(int i = 2 ; i <= N ; i++)
{
if(rezultat[i] == INT_FAST16_MAX)
fout<<0<<' ';
fout<<rezultat[i]<<' ';
}
fin.close();
fout.close();
return 0;
}