Pascal/Turbo Pascal - Backtracking

 
Vista:

Backtracking

Publicado por Milton (14 intervenciones) el 09/01/2003 20:37:33
Hola feliz año a todos : )
Si hago esta practica http://www.csi.ull.es/~mtp1/practicas/pr11.pdf que es la Última apruebo. Bueno el tio nos facilito un fichero txt lleno de "ceros","unos" y varios "dos" que es el laberinto. ¿como puedo cargar ese fichero en mi programa y poder utilizarlo?, si teneis un codigo fuente por ahi por donde pueda guiarme seria cojonudo. Por favor aconsejadme de como lo harias ustedes.
Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Backtracking

Publicado por César Augusto Navarro Gómez (182 intervenciones) el 09/01/2003 22:24:12
es muy fácil,
1.- Crea una tabla en la que cargarás el archivo, trata de que no sea demasiado grande para que no tengas un desbordamiento.
2.- Una vez que has hecho eso carga la tabla
3.- Pregunta la posición inicial
4.- Verifica que esa posición sea un 0 de lo contrario estás en una posición valida.
5.- Haz un llamado a una función con el siguiente prototipo:

función inteligente(x,y:integer):boolean;
var
aux:boolean;
begin
aux:=false;
tabla[x,y]=3;
if tabla[x,y]=2 then
begin
inc(pasos) {[lo inicializas con 0 al inicio del programa]}
solucion[pasos].x:=x;
solucion[pasos].y:=y;
aux:=true;
end
else if tabla[x,y]=0 then
begin
if tabla[x-1,y]=0 then
if inteligente(x-1,y) then
begin
inc(pasos);
solucion[pasos].x=x;
solucion[pasos].y:=y;
aux:=true;
end;
if tabla[x+1,y]=0 then
if inteligente(x+1,y) then
begin
inc(pasos);
solucion[pasos].x=x;
solucion[pasos].y:=y;
aux:=true;
end;
if tabla[x,y+1]=0 then
if inteligente(x,y+1) then
begin
inc(pasos);
solucion[pasos].x=x;
solucion[pasos].y:=y;
aux:=true%
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Backtracking

Publicado por Milton (14 intervenciones) el 10/01/2003 13:56:48
En primer lugar mil gracias por las molestias y la rapidez de tu mensaje en la que aun : ) tengo varias dudas son las siguientes:
-Vamos a ver el profesor nos facilito un fichero .txt con el laberinto ya hecho que esta en la direccion que deje en el mensaje anterior,¿ como cargo yo eso en pascal y poder trabajar con ella? dices que cargandolo en una tabla( yo entiendo como tabla un array bidimensional no sé si creo bien), es decir, ¿crear un array bidimensional y darle manualmente los mismos valores que los que estan en el fichero .txt?. No sé si es asi asi que sin eso no puedo empezar a desarrollar el resto de codigo.
Ahhh aux:=true% el % realmente es ; nooo????, fue simplemente un error supongo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Backtracking

Publicado por César augusto Navarro Gómez (182 intervenciones) el 10/01/2003 18:57:53
Es cierto el cargarlo sería en una tabla para poder hacer paso hacia arriba, abajo, etc. para cargar sería asi:

procedure cargarArchivo(nom:string);
var
f:text;
linea:integer
procedure cargarCadena(c:string;l:integer);
var
i:integer;
begin
for i:=1 to length(c) do
begin
case c[i] of
'0': tabla[i,l]:=0;
'1':tabla[i,l]:=1;
'2':tabla[i,l]:=2
else
begin
write(^g,'Error en el archivo'); {^g hace que pite}
halt;
end; {end del else}
end; {end del case}
end; {end del for}
end;
begin
assign(f,nom);
reset(f);
linea:=0;
while not eof(f) do
begin
readln(f,cadena);
inc(linea);
cargarCadena(cadena,linea);
end;
close(f);
end;

la definicion de la table te toca hacerla supongo algo como tabla:array[1..100,1..50] es la misma que en el otro código
El % es un error de truncamiento del mensaje sorry cuestión de la página
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nueva repsuesta!!!!!!

Publicado por Milton (14 intervenciones) el 10/01/2003 20:43:16
Cesar tu nivel de programacion es muy superior al que yo tengo asi que me cuesta mucho asimilar los procedimientos si no sé cuando se les llama y que valores se les pasa. Por eso si tienes el codigo completo me seria mas facil comprenderlo siempre y cuando utilize la recursividad y backtracking, no te digo esto para que me des la practica y llegue el lunes y aprobao de eso nada tengo que explicarle el programa sin tener la mas minima duda, si no, lo siento chaval hasta el año que viene, comprendes lo que quiero decir, hasta ahora me has ayudado bastante pero soy incapaz de ver con claridad los subprogramas sin conocer perfectamente cada variable, cada valor,etc...
Lo siento pero es que soy algo torpe.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nueva repsuesta!!!!!!

Publicado por César Augusto Navarro Gómez (182 intervenciones) el 10/01/2003 20:50:21
Déjame juntar los códigos y ver si tengo tiempo, no es por otra cosa pero me meto aquí en mis ratos de ocio del trabajo, de cualquier manera haré lo posible.

: )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nueva repsuesta!!!!!!

Publicado por César Augusto Navarro Gómez (182 intervenciones) el 10/01/2003 21:09:28
Si me puedes enviar a mi correo el Turbo.exe y el turbo.tpl para probarlos sino te lo mando como este.
: )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nueva repsuesta!!!!!!

Publicado por Milton (14 intervenciones) el 10/01/2003 21:30:11
Cesar ya te he enviado el correo con lo que me pedias lo mas rapido que he podido. Gracias por todo.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Backtracking Parte 2

Publicado por César Augusto Navarro Gómez (182 intervenciones) el 09/01/2003 22:26:17

end;
if tabla[x-1,y+1]=0 then
if inteligente(x-1,y+1) then
begin
inc(pasos);
solucion[pasos].x=x;
solucion[pasos].y:=y;
aux:=true;
end;
inteligente:=true;
end;

y creo que está bien pero si no rompete un poquito tu el coco, jejeje no es cierto pero estoy en la chamba y no tengo demasiado tiempo, al final del algoritmo despliegas el arreglo "solucion" inverso para tener la salida, este arreglo es un registro

paso=record
x,y:integer;
end;

en donde se almacena la solucion si resulta que "pasos=0" entonces no hubo solucion pero si pasos fue igual con algo más entonces tiene el númerod e pasos, ojo si hay multiples soluciones debes de ponerle parches al algotirmo
Suerte
: )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar