Pagini recente » Cod sursa (job #2179892) | Cod sursa (job #3178546) | Cod sursa (job #651432) | Cod sursa (job #2616879) | Cod sursa (job #701530)
Cod sursa(job #701530)
#include<fstream>
using namespace std;
#define IN "dijkstra.in"
#define OUT "dijkstra.out"
#define INF 1000000
#define MaxN 10001
FILE *f, *g;
int i, j, x, y, cost, a[MaxN][MaxN], d[MaxN], t[MaxN], viz[MaxN], n, m;
void DIJ(int start)
{
int i, j, w, minim=INF;
for(i=1; i<=n; i++)
{
if(i!=start)
d[i]=a[i][start];
if(d[i]!=0 && d[i]!=INF)
t[i]=start;
}
d[start]=0;
viz[start]=1;
t[start]=0;
for(j=1; j<=n; j++)
{
minim=INF;
for(i=1; i<=n; i++)
{
if(viz[i]==0)
if(d[i]<minim)
{
minim=d[i];
w=i;
}
}
viz[w]=1;
for(i=1; i<=n; i++)
{
if(d[i]>minim+a[i][w])
{
d[i]=minim+a[i][w];
t[i]=w;
}
}
}
}
int main()
{
f=fopen(IN, "r"); g=fopen(OUT, "w");
fscanf(f, "%d %d", &n, &m);
for(i=1; i<=n; i++)
{
for(j=i+1; j<=n; j++)
a[i][j]=a[j][i]=INF;
}
for(i=1; i<=m; i++)
{
fscanf(f, "%d %d %d", &x, &y, &cost);
a[x][y]=a[y][x]=cost;
}
DIJ(1);
for(i=2; i<=n; i++)
{
if(d[i]!=INF)
fprintf(g, "%d ", d[i]);
else
fprintf(g, "0 ");
}
fprintf(g, "\n");
fclose(f);
fclose(g);
return 0;
}