1
« en: Miércoles 18 de Mayo de 2011, 04:06 »
Hola a todos, les escribo para ver si me pueden ayudar con un problema que tengo.
Me mandaron una asignacion de usar un dijkstra ( o CMP) para hallar el camino mas corto de un grafo que me dan por entrada de archivos, pero leyendo por internet no encontre ninguna implementacion de dijkstra que dev-c++ compilara! Si pueden ayudarme estaria muy agradecido D:
int main ()
{
FILE* A = fopen("entrada.txt", "r"); //cambiar por entrada.in
char *line = (char *) calloc(1000, sizeof(char));
char *lineaux;
int C=0,nodos=0,actividad=0,i=0,j=0;
if (A==NULL)printf("Error abriendo el archivon");
else{
fscanf(A, "%[^n]", line);
fgetc(A);
C=atoi(line);//comprobar que pasa si C=0
for(i=0;i<C;i++){
int z=0;
fscanf(A, "%[^n]", line);
fgetc(A);
lineaux=strtok(line," ,.-");
nodos=atoi(lineaux);
lineaux=strtok(NULL," ,.-");
actividad=atoi(lineaux);
int entrada[actividad-1][2];
int incidencia[nodos-1][nodos-1];
int peso[nodos-1][nodos-1];
for(j=0;j<nodos;j++){for(z=0;z<nodos;z++){incidencia[z][j]=0;peso[z][j]=0;}}//inicializo la matriz de incidencia en 0.
for(j=0;j<actividad;j++){
fscanf(A, "%[^n]", line);
fgetc(A);
lineaux=strtok(line," ,.-");
entrada[j][0]=atoi(lineaux);
lineaux=strtok(NULL," ,.-");
entrada[j][1]=atoi(lineaux);
lineaux=strtok(NULL," ,.-");
entrada[j][2]=atoi(lineaux);
incidencia[entrada[j][0]][entrada[j][1]]=1;
peso[entrada[j][0]][entrada[j][1]]=entrada[j][2]; //lleno la matriz de incidencia
}
}
}
system("Pause");
return 0;
}
La matriz incidencia[][] esta conformada de puros 0s y 1s señalando los nodos que tienen enlaces (Es un grafo dirigido), mientras que la de peso posee la duracion del recorrido de un nodo a otro.