Este problema no es sobre mi es sobre otro usuario que ahora mismo no puede postear (Idontknow)
El problema es sobre un trabajo que tengo que entregar mañana y se basa en que a mi me dan unos archivos llamados inicios.txt laberinto.txt salida.txt estos estan puestos en los argumentos del netbeans. Descargar archivos junto con la explicación concreta de la practica que estoy haciendo Con estos archivos tengo unos casos de inicio, unos laberintos que hay que resolver con un codigo que me dan en pseudocodigo. Este pseudocodigo hace bactraking para encontrar el camino hacia el final.
Como podeis ver en el codigo no se cuantos casos tengo dentro de el arxivo inicios ni las dimensiones del laberinto.
Ahora el problema que tengo:
Tengo echas las funciones de leer los inicios y el laberinto. Ahora viene el problema que no consigo guardar la array de 2 dimensiones que he creado dentro de estas funciones en una array local. Igual me pasa en la array del laberinto.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
*
*/
typedef struct{
int x;
int y;
} posicio;
typedef struct{
posicio in;
posicio fi;
} pos_in;
int buscaCamino(char **camp, int posX, int posY);
pos_in leeIni(pos_in *dade, char** argv);
char leeLab(char **camp, char** argv);
int main(int argc, char** argv) {
int i;
int n_cas=5;
int posX, posY;
pos_in dade;
char **camp;
leeIni(&dade,argv);
for(i=0;i<n_cas;i++){//compruebo si he guardado en la estructura del main (dade)
printf("%d,%d;%d,%dn",(dade[i]).in.x,(dade[i]).in.y,(dade[i]).fi.x,(dade[i]).fi.y);
}
camp=leeLab(camp,argv);
buscaCamino(camp,posX,posY);
return (EXIT_SUCCESS);
}
int buscaCamino(char **camp, int posX, int posY) // esta es la funcion del pseudocodigo no le hagais caso
{
int dir;
int encontrado;
switch(camp[posX][posY]) {
case 'F' :
encontrado = 1;
break;
case '#' :
encontrado = 0;
break;
case 'x' :
encontrado = 0;
break;
case ' ' :
camp[posX][posY]='X';
encontrado = 0;
dir = 1;
while ((encontrado ==0) && (dir<4)) {
switch (dir){
case 1 :
encontrado = buscaCamino(camp, posX-1, posY);
dir = 2;
break;
case 2 :
encontrado = buscaCamino(camp, posX, posY+1);
dir = 3;
break;
case 3 :
encontrado = buscaCamino(camp, posX+1, posY);
dir = 4;
break;
case 4 :
encontrado = buscaCamino(camp, posX, posY-1);
dir = 1;
break;
}
break;
}
if (encontrado == 0)camp[posX][posY]='X'; // Miradas todas las direcciones sin eÌ?xit
}
return encontrado;
}
// esta funcion lee los casos y los guardo en una array dinamica
pos_in leeIni(pos_in *dade, char** argv){
int i,n_cas=0;
char pos;
char **camp;
FILE *d;//dades
d = fopen(argv[1],"r");
while ((pos=fgetc(d))!= EOF)//miramos cuantos casos tiene el archivo
if ( pos == 'n') {
n_cas++;
}
fseek(d,0,SEEK_SET);
dade=(pos_in*)malloc(n_cas*sizeof(pos_in));//creo una lista para guardar los casos
for(i=0;i<n_cas;i++){
fscanf(d,"%d,%d;%d,%d",&(dade[i]).in.x,&(dade[i]).in.y,&(dade[i]).fi.x,&(dade[i]).fi.y);//leo caso por caso
}
fclose(d);
return *dade;
}
/* Esta lee el laberinto y lo guarda en una array dinamica 2D*/
char leeLab(char **camp, char** argv){
int colu=0,fil=0,f=0, c=0,i=0,j=0;
char pos;
FILE* fla;
fla = fopen(argv[2],"r"); //obro l'arxiu de laberints
while ((pos=fgetc(fla))!= EOF)//miro cuantas filas y columnas tiene el laberinto
if (pos == 'n') {
f++;
colu = c;
c=0;
}
else c++;
colu++;
fil = f;
rewind(fla);
printf("fil %d, col %dn",fil,colu);
camp=(char**)malloc(fil*sizeof(char*));//creo la array dinamica 2D per a guardar el laberint //mientras voy rellendando la array pasando punto por punto por el archivo
for(i=0;i<fil;i++){
camp[i]=(char*)malloc(colu*sizeof(char));
for(j=0;j<colu;j++){
camp[i][j]=fgetc(fla);
}
}
fclose(fla);
return **camp;
}