Pagini recente » Cod sursa (job #1424336) | Cod sursa (job #937328) | Cod sursa (job #1183377) | Cod sursa (job #229630) | Cod sursa (job #1267699)
#include <cstdio>
#include <vector>
#define NMAX 50004
#define INF 1000000000
using namespace std;
FILE*fin=fopen("dijkstra.in", "r");
FILE*fout=fopen("dijkstra.out", "w");
int n, m, x0;
struct vecin
{
int varf;
int cost;
};
vector <vecin> G[NMAX];
int cmin[NMAX], prec[NMAX];
bool Z[NMAX];
void citire();
void dijkstra();
void initializare();
void afisare();
int main()
{
citire();
dijkstra();
afisare();
return 0;
}
void citire()
{
int i, x, y, c;
vecin v;
fscanf(fin, "%d %d\n", &n, &m);
for(i=1;i<=m;i++)
{
fscanf(fin, "%d %d %d\n", &x, &y, &c);
v.varf=y; v.cost=c;
G[x].push_back(v);
}
x0=1;
initializare();
}
void initializare()
{
int i;
for(i=1;i<=n;i++)
{
cmin[i]=INF;
prec[i]=x0;
}
cmin[x0]=0;
prec[x0]=0;
Z[x0]=1;
for(i=0;i<G[x0].size();i++)
cmin[G[x0][i].varf]=G[x0][i].cost;
}
void dijkstra()
{
int i, j, lg;
int minim;
cmin[0]=INF;
for(i=2;i<=n;i++)
{
minim=0;
for(j=1;j<=n;j++)
if(!Z[j] && cmin[j]<cmin[minim])
minim=j;
if(!minim)
return;
Z[minim]=1;
lg=G[minim].size();
for(j=0;j<lg;j++)
if(!Z[G[minim][j].varf] && cmin[G[minim][j].varf]>cmin[minim]+G[minim][j].cost)
{
cmin[G[minim][j].varf]=cmin[minim]+G[minim][j].cost;
prec[G[minim][j].varf]=minim;
}
}
}
void afisare()
{
int i;
for(i=1;i<x0;i++)
if(cmin[i]==INF) fprintf(fout, "0 ");
else fprintf(fout, "%d ", cmin[i]);
for(i=x0+1;i<=n;i++)
if(cmin[i]==INF) fprintf(fout, "0 ");
else fprintf(fout, "%d ", cmin[i]);
fprintf(fout, "\n");
}