Cod sursa(job #519386)

Utilizator nahsucpasat cristian nahsuc Data 5 ianuarie 2011 11:39:56
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
/*
d= distanta (costu)
t= printele
s= vizitat sau nu
*/
#include<stdio.h>
int cost[10],a[10][10],t[10],min=10000,n,d[10],co,poz,s[10],start,end,i,j;
FILE *in;
void drum(int i)
{
 if(t[i])
  drum(t[i]);
 printf("%d ",i);
}
int main()
{
 in=fopen("dijkstra.in","rt");
 printf("\n\n\n\n\n\n\n\n");
 fscanf(in,"%d  ",&n);
 
 

 
 start=1;
 s[start]=1;
 for(i=1;i<=n;i++)
  for(j=1;j<=n;j++)
 //  if(i!=start)
    a[i][j]=min;
 
 while(!feof(in))
 {
  fscanf(in,"%d %d %d ",&i,&j,&co);
  a[i][j]=co;
 }


 for(i=1;i<=n;i++)
 {
  d[i]=a[start][i];
  if(i!=start)
   if(d[i]<min)
    t[i]=start;
 }

 
 for(i=1;i<n;i++)
 {
  min=10000;
  for(j=1;j<=n;j++)
   if(s[j]==0)
    if(d[j]<min)
    {
     min=d[j];
     poz=j;
    }
 s[poz]=1;
 for(j=1;j<=n;j++)
  if(s[j]==0)
   if(d[j]>d[poz]+a[poz][j])
   {
    d[j]=d[poz]+a[poz][j];
    t[j]=poz;
   }
 }


 for(i=2;i<=n;i++)
	 printf("%d ",d[i]);


return 0;
}