Cod sursa(job #487951)

Utilizator LuffyBanu Lavinia Luffy Data 27 septembrie 2010 08:36:46
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>
#define dim 10000
#define inf 90000
using namespace std;

char marc[dim];
int d[dim],pre[dim],cost[dim][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);

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;
}