Pagini recente » Cod sursa (job #1215717) | Cod sursa (job #3256063) | Cod sursa (job #427384) | Cod sursa (job #1067111) | Cod sursa (job #3259263)
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 50005
#define INF 1000000007
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct varf{int x, c;};
int n,m;
int cmin[NMAX],pre[NMAX],M[NMAX];
vector<varf> G[NMAX];
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>>H;
void initializare(int start);
void dijkstra(int start);
void afisare();
int main()
{
int i,x,y,c;
varf vf;
fin>>n>>m;
for(i=1; i<=m; i++)
{
fin>>x>>y>>c;
vf.x=y; vf.c=c;
G[x].push_back(vf);
}
dijkstra(1);
afisare();
return 0;
}
void initializare(int start)
{
int i;
pair<int,int> p;
for(i=1; i<=n; i++)
{cmin[i]=INF; pre[i]=start;}
pre[start]=cmin[start]=0; M[start]=1;
for(i=0; i<G[start].size(); i++)
{
cmin[G[start][i].x]=G[start][i].c;
p.first=cmin[G[start][i].x];
p.second=G[start][i].x;
H.push(p);
}
}
void dijkstra(int start)
{
int i,j,cost,vfmin;
pair<int,int> p;
initializare(1);
for(j=1; j<n && !H.empty();)
{
p=H.top(); H.pop();
cost=p.first;
vfmin=p.second;
if(M[vfmin]==0)
{
M[vfmin]=1; j++;
for(i=0; i<G[vfmin].size(); i++)
if(cmin[G[vfmin][i].x]>G[vfmin][i].c+cost)
{
cmin[G[vfmin][i].x]=G[vfmin][i].c+cost;
pre[G[vfmin][i].x]=vfmin;
p.first=cmin[G[vfmin][i].x];
p.second=G[vfmin][i].x;
H.push(p);
}
}
}
}
void afisare()
{
int i;
for(i=2; i<=n; i++)
if(cmin[i]==INF)
fout<<0;
else fout<<cmin[i]<<' ';
}