Pagini recente » Cod sursa (job #2898294) | Cod sursa (job #708248) | Cod sursa (job #2138277) | Cod sursa (job #2647180) | Cod sursa (job #1267681)
#include <cstdio>
#include <vector>
#define NMAX 50005
#define MMAX 250005
#define INF 1000000000
using namespace std;
FILE*fin=fopen("dijkstra.in","r");
FILE*fout=fopen("dijkstra.out","w");
struct vecin
{
int vf;
short int c;
};
vector <vecin> G[NMAX];
int cmin[NMAX],prec[NMAX];
bool z[NMAX];
int n,m,x0=1;
void citire()
{
int i,x,y,cost;
vecin aux;
fscanf(fin,"%d %d",&n,&m);
for (i=1;i<=m;i++)
{
fscanf(fin,"%d %d %d",&x,&y,&cost);
aux.vf=y; aux.c=cost;
G[x].push_back(aux);
}
}
void init()
{
int i;
z[x0]=1;
for (i=1;i<=n;i++)
{
prec[i]=x0;
cmin[i]=INF;
}
prec[x0]=0; cmin[x0]=0;
for (i=0;i<G[x0].size();i++)
cmin[ G[x0][i].vf ]=G[x0][i].c;
}
void dijkstra()
{
int i,minim,vfmin,j;
for (i=1;i<=n-1;i++)
{
minim=INF; vfmin=INF;
///determin un varf neselectat de cost minim
for (j=1;j<=n;j++)
if (minim>cmin[j] && z[j]==0 ) minim=cmin[j],vfmin=j;
if (vfmin==INF) break;
z[vfmin]=1;
for (j=0;j<G[vfmin].size();j++)
if (z[ G[vfmin][j].vf ]==0 && cmin[G[vfmin][j].vf]>cmin[vfmin]+G[vfmin][ /*G[vfmin][j].vf*/j ].c)
{
cmin[G[vfmin][j].vf]=cmin[vfmin]+G[vfmin][ j/*G[vfmin][j].vf*/ ].c;
prec[G[vfmin][j].vf]=vfmin;
}
}
}
void afisare()
{
int i,poz,lg;
for (i=1;i<=n;i++)
if (i!=x0)
{if (cmin[i]!=INF)
fprintf(fout,"%d ",cmin[i]);
else
fprintf(fout,"0 ");
}
fprintf(fout,"\n");
}
int main()
{
citire();
init();
dijkstra();
afisare();
return 0;
}