Pagini recente » Cod sursa (job #659895) | Cod sursa (job #966142) | Cod sursa (job #1478829) | Cod sursa (job #2853756) | Cod sursa (job #2853762)
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>
#include <iostream>
using namespace std;
#define lim 50010
#define inf 2e9
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] = false;
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;
cin>>N>>M;
for (int i = 1; i <= M; i++) {
cin>>source>>destination>>cost;
G[source].push_back({destination, cost});
}
for (int i = 1; i <= N; i++)
rezultat[i] = inf;
dijkstra();
for(int i = 2 ; i <= N ; i++)
{
if(rezultat[i] == inf)
cout<<0<<' ';
else
cout<<rezultat[i]<<' ';
}
fin.close();
fout.close();
return 0;
}