Pagini recente » Cod sursa (job #985515) | Cod sursa (job #727317) | Cod sursa (job #3310394) | Cod sursa (job #710937) | Cod sursa (job #3336472)
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#define inf 0x3f3f3f3f
#define MAXN 105
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct nod
{
int vecin, cost;
bool operator < (const nod &other) const
{
if(cost!=other.cost)
return cost<other.cost;
return vecin<other.vecin;
}
};
vector <nod> G[MAXN];
int n,m;
int viz[MAXN], dmin[MAXN];
set<nod> S;
void dijkstra(int start)
{
for(int i=1;i<=n;i++)
dmin[i]=inf;
dmin[start]=0;
S.insert({start,0});
while(!S.empty())
{
int nd=S.begin()->vecin;
S.erase(S.begin());
for(auto x:G[nd])
{
int cost_posibil=dmin[nd]+x.cost;
if(cost_posibil<dmin[x.vecin])
{
if(dmin[x.vecin]!=inf)
S.erase({x.vecin, dmin[x.vecin]});
dmin[x.vecin]=cost_posibil;
S.insert({x.vecin,dmin[x.vecin]});
}
}
}
}
void afisare()
{
for(int i=2;i<=n;i++)
fout<<((dmin[i]==inf)?-1:dmin[i])<<" ";
}
void citire()
{
fin>>n>>m;
int x,y,c;
while(fin>>x>>y>>c)
G[x].push_back({y, c});
dijkstra(1);
afisare();
}
int main()
{
citire();
return 0;
}