Pagini recente » Cod sursa (job #2458725) | Cod sursa (job #1940947) | Cod sursa (job #1194614) | Cod sursa (job #1930296) | Cod sursa (job #464712)
Cod sursa(job #464712)
#include<stdio.h>
#define dim 10000
#define inf 5000
using namespace std;
char marc[dim];
int *d,*pre,(*cost)[dim],sum,x,y,i,n,m,j,vf,min;
int main()
{
FILE *f=fopen("dijkstra.in","r"), *g=fopen("dijkstra.out","w");
fscanf(f,"%d%d",&n,&m);
cost=new int[dim][dim];
d=new int[dim];
pre=new int[dim];
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
cost[i][j]=cost[j][i]=inf;
for(i=1;i<=m;i++)
{fscanf(f,"%d%d%d",&x,&y,&sum);
cost[x][y]=sum;
}
for(i=1;i<=n;i++)
{d[i]=cost[1][i]; pre[i]=1;}
marc[1]=1; pre[1]=0;
for(i=1;i<=n;i++)
{
min=inf;
for(j=1;j<=n;j++)
if(!marc[j] && min>d[j])
{min=d[j];
vf=j;}
marc[vf]=1;
for(j=1;j<=n;j++)
if(!marc[j] && d[j]>min+cost[vf][j])
{pre[j]=vf;
d[j]=min+cost[vf][j];}
}
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;
}