C/Visual C - Ayuda con un programa

   
Vista:

Ayuda con un programa

Publicado por Vanessa (1 intervención) el 26/05/2013 16:45:28
Buenas tardes,

Tengo que hacer un "programita" que resuelva un laberinto y estoy bastante perdida. La verdad es que ya estaba perdida, asi que busque inspiración en http://www2.ing.puc.cl/~iic11021/materia/ejemplos/maze.htm. Lo que ocurre es que exactamente no es eso lo que me han pedido, así que modifique el programa para intentar adaptarlo a mi ejercicio....... pues bien.... no me funciona (que raro). Alguien prodria echarme una mano???

Desde YA os doy las gracias.

#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;

#define FILAS 10
#define COLUMNAS 10

#define L 219
#define E ' '
#define MARCA '*'

#define TRUE 1
#define FALSE 0


int lab[FILAS][COLUMNAS] =
{ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 1, 1, 1, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0 }
};



int valida(int f, int c) {
int resultado = TRUE; /* Se supone inicialmente valida */
/* Controla si la posicion esta fuera del laberinto */
if ((f<0) || (f>=FILAS) || (c<0) || (c>=COLUMNAS))
resultado = FALSE;
/* Controla si la posicion ya fue visitada o es muro */
if (lab[f][c] == MARCA || lab[f][c] == 0)
resultado = FALSE;
return(resultado);
}

int recorrer(int fil, int col) {
printf("\n entra \n");
int listo = FALSE; /* Indica si se ha encontrado la salida */
/* Se marca la casilla como visitada */
lab[fil][col] = MARCA;

if (lab[fil][col] = 2) /* " SALIDA " */
return(TRUE);

if (!listo && valida(fil,col-1)) /* Intento a la izquierda */
listo = recorrer(fil,col-1);
if (!listo && valida(fil,col+1)) /* Intento a la derecha */
listo = recorrer(fil,col+1);
if (!listo && valida(fil-1,col)) /* Intento hacia arriba */
listo = recorrer(fil-1,col);
if (!listo && valida(fil+1,col)) /* Intento hacia abajo */
listo = recorrer(fil+1,col);
/* Si no se logro resolver el laberinto desde esta posicion, se */
/* desmarca la casilla pues no sera parte de la solucion. En este */
/* caso se retornara falso lo que provocara que se retroceda. */
if (!listo)
lab[fil][col] = E;
/* Se retorna TRUE/FALSE dependiendo de si se encontro solucion */
return(listo);
}


void desplegar() {
int i, j;
printf("\n");
for (i=0; i<FILAS; i++) {
for (j=0; j<COLUMNAS; j++) {
printf("%c", lab[i][j]);
}
printf("\n");
}
return;
}

void Solucion() {
int i, j;
printf("\n");
for (i=0; i<FILAS; i++) {
for (j=0; j<COLUMNAS; j++) {
if (lab[i][j] = MARCA) {
printf(" Posicion %i %j");
}
}
printf("\n");
}
return;
}

main() {
int ok;
int fil, col;
desplegar(); /* Despliega el laberinto sin resolver */
/* Resuelve el laberinto desde la entrada: (x0,y0) */
ok = recorrer(fil,col);
if (!ok) /* Si no se pudo resolver se envia un mensaje */
printf("\n Sin solucion \n");

Solucion();

}
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