Pagini recente » Cod sursa (job #2250512) | Cod sursa (job #2588728) | Cod sursa (job #2356425) | Cod sursa (job #167121) | Cod sursa (job #2723463)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int oo = (1 << 30);
int n,m;
const int Nmax = 5005;
int d[Nmax];
bool inCoada[Nmax];
vector<pair<int,int>> graf[Nmax];
struct compara{
bool operator()(int x,int y)
{
return (d[x] > d[y]);
}
};
priority_queue<int,vector<int>,compara> coada;
void citire()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int a,b,c;
fin>>a>>b>>c;
graf[a].push_back(make_pair(b,c));
}
}
void dijkstra(int nodStart)
{
for(int i=1;i<=n;i++)
d[i] = oo;
d[nodStart] = 0;
coada.push(nodStart);
inCoada[nodStart] = true;
while(!coada.empty())
{
int nodCurent = coada.top();
coada.pop();
inCoada[nodCurent] = false;
for(unsigned int i=0;i<graf[nodCurent].size();i++)
{
int vecin = graf[nodCurent][i].first;
int cost = graf[nodCurent][i].second;
if(d[nodCurent]+cost < d[vecin])
{
d[vecin] = d[nodCurent] + cost;
if(!inCoada[vecin])
{
coada.push(vecin);
inCoada[vecin] = true;
}
}
}
}
}
void afisare()
{
for(int i=2;i<=n;i++)
{
if(d[i]==oo)
d[i]=0;
fout<<d[i]<<" ";
}
}
int main()
{
citire();
dijkstra(1);
afisare();
return 0;
}