Pagini recente » Cod sursa (job #973040) | Cod sursa (job #941351) | Cod sursa (job #2840432) | Cod sursa (job #2904262) | Cod sursa (job #2860876)
#include <bits/stdc++.h>
#define NMAX 50004
#define INF 1e9
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct varf
{
int x,c;
};
int n,m,x0=1;
vector <varf> G[NMAX];
bool uz[NMAX];
int cmin[NMAX]= {0,100,10,-10,1,23,2};
void citire();
void dij();
void afisare();
class Compar
{
public:
bool operator() (int a,int b)
{
return cmin[a]>cmin[b];
}
};
priority_queue<int, vector <int>, Compar> H;
int main()
{
citire();
dij();
afisare();
return 0;
}
void citire()
{
int i,j,c,k;
varf aux;
fin>>n>>m;
for(k=1; k<=m; k++)
{
fin>>i>>j>>c;
aux.x=j;
aux.c=c;
G[i].push_back(aux);
}
for(i=1; i<=n; i++)
cmin[i]=INF;
cmin[x0]=0;
}
void dij()
{
int vfmin=-1,minim,i,j;
H.push(x0);
for(i=1; i<=n; i++)
{
while(!H.empty())
{
vfmin=H.top();
H.pop();
if(!uz[vfmin]) break;
}
if(vfmin==-1)
break;
uz[vfmin]=1;
minim=cmin[vfmin];
for(j=0; j<G[vfmin].size(); j++)
{
if(!uz[G[vfmin][j].x] && cmin[G[vfmin][j].x]> minim+G[vfmin][j].c)
{
cmin[G[vfmin][j].x]=minim+G[vfmin][j].c ;
H.push(G[vfmin][j].x);
}
}
}
}
void afisare()
{
for(int i=2; i<=n; i++)
{
if(cmin[i]!=INF)
fout<<cmin[i]<<" ";
else
fout<<0<<" ";
}
}