Cod sursa(job #222391)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 22 noiembrie 2008 10:12:27
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include<stdio.h>
#define NMaxVf 50
#define Inf 32000;

int n,x0;
int C[NMaxVf][NMaxVf];
int M[NMaxVf],pre[NMaxVf];
int d[NMaxVf];

void Citire();
void Afisare();

int main(){
    int i,VfMin,j;
    double dMin;
    Citire();
    for (j=1;j<n;j++)
	{dMin=Inf;
	for (i=1;i<=n;i++)
	    if (!M[i] && dMin>d[i]){
	       dMin=d[i];
	       VfMin=i;
	    }
	M[VfMin]=1;
	for (i=1;i<=n;i++)
	    if (!M[i]&& d[i]>dMin+C[VfMin][i])
	       {pre[i]=VfMin;
		d[i]=dMin+C[VfMin][i];}
    }
    Afisare();
    return 0;
}

void Citire(){
     int i,j,m,x,y;
     int c;
     freopen("dijkstra.in","r",stdin);
     scanf("%d %d",&n,&m);
     for (i=1;i<=n;i++)
	 for (j=i+1;j<=n;j++)
	     C[i][j]=C[j][i]=Inf;
     for (i=1;i<=m;i++){
         scanf("%d %d %d",&x,&y,&c);
         C[x][y]=c;
     } 
     for (i=1;i<=n;i++){ d[i]=C[1][i];pre[i]=1; }
     M[1]=1;pre[1]=0;
}

void Afisare(){
int i,j, lg, dr[NMaxVf];
     freopen("dijkstra.out","w",stdout);
     for (i=2;i<=n;i++){
         printf("costul este:%d \n",d[i]);
         dr[0]=i;lg=0;
         while (pre[dr[lg]]){
               lg++;dr[lg]=pre[dr[lg-1]];
         }
         for (j=lg;j>=0;j--) printf("%d",dr[j]);
         printf("\n");
     }
}