Pagini recente » Cod sursa (job #1262809) | Cod sursa (job #2153274) | Cod sursa (job #2671696) | Cod sursa (job #332576) | Cod sursa (job #893383)
Cod sursa(job #893383)
#include <fstream>
#include <iostream>
#include <cstring>
#include <list>
using namespace std;
#define IN "dijkstra.in"
#define OUT "dijkstra.out"
#define INF 10000000
fstream f(IN, ios::in), g(OUT, ios::out);
long long n, m, s, done[50001], cost[50001], prov[50001], cos, i, j, x, y;
list < pair < long long, long long > > graf[50001];
list < pair < long long, long long > >::iterator it;
long long visit_all(long long start)
{
long long minim=INF, care=0;
for(it=graf[start].begin(); it!=graf[start].end(); it++)
{
if(cost[(*it).first]>cost[start]+(*it).second)
{
cost[(*it).first]=cost[start]+(*it).second;
prov[(*it).first]=start;
}
}
for(i=1; i<=n; i++)
{
for(it=graf[i].begin(); it!=graf[i].end(); it++)
{
if(cost[(*it).first]<minim && done[(*it).first]==0)
{
minim=cost[(*it).first];
care=(*it).first;
}
}
}
done[care]=1;
return care;
}
void DIJ(long long S)
{
long long X, i;
X=S;
done[X]=1;
cost[X]=0;
prov[X]=1;
for(i=1; i<=n; i++)
X=visit_all(X);
}
int main()
{
f>>n>>m;
s=1;
for(i=1; i<=n; i++)
{
cost[i]=INF;
done[i]=0;
prov[i]=0;
}
for(i=1; i<=m; i++)
{
f>>x>>y>>cos;
// cout<<x<<" "<<y<<" "<<cos<<"\n";
graf[x].push_back(make_pair(y,cos));
}
DIJ(s);
for(i=2; i<=n; i++)
{
if(cost[i]==INF)
g<<"0 ";
else
g<<cost[i]<<" ";
}
}