Cita de: erest0r en 28 Marzo 2014, 20:24 PMPero esque la idea esque no repitas caminos xD.
Si pero es que un algoritmo que busque aleatoriamente podria tardar una eternidad en recorrer todo el laberinto, redundando en caminos que ya hubiese pasado anteriormente
De todas formas si solo buscas una salida, no necesitas que sea aleatorio. Te abasta con hacerte alguna estructura que permita recursión (lista o pilas), le pones un while ya debería ir.
Función que determina si dos puntos A y B están conectados:
Código (cpp) [Seleccionar]
#include <stack>
bool explora(char mat[][20],Cord inicio,Cord Destino,int TAMX,int TAMY)
{
stack<Cord> Pila;
Pila.push(inicio);
while (Pila.size() != 0)
{
//cout<<Pila.top().x<<" , "<<Pila.top().y<<endl;
// izquierda
if (Pila.top().x > 0)
{
if (Pila.top().x-1 == Destino.x && Pila.top().y == Destino.y) return true;
if (mat[Pila.top().x-1][Pila.top().y] == 0)
{
mat[Pila.top().x-1][Pila.top().y] = 1;
Pila.push(Cord(Pila.top().x-1,Pila.top().y));
continue;
}
}
// derecha
if (Pila.top().x < TAMX-1)
{
if (Pila.top().x+1 == Destino.x && Pila.top().y == Destino.y) return true;
if (mat[Pila.top().x+1][Pila.top().y] == 0)
{
mat[Pila.top().x+1][Pila.top().y] = 1;
Pila.push(Cord(Pila.top().x+1,Pila.top().y));
continue;
}
}
// arriba
if (Pila.top().y > 0)
{
if (Pila.top().y-1 == Destino.y && Pila.top().x == Destino.x) return true;
if (mat[Pila.top().x][Pila.top().y-1] == 0)
{
mat[Pila.top().x][Pila.top().y-1] = 1;
Pila.push(Cord(Pila.top().x,Pila.top().y-1));
continue;
}
}
// abajo
if (Pila.top().y < TAMY-1)
{
if (Pila.top().y+1 == Destino.y && Pila.top().x == Destino.x) return true;
if (mat[Pila.top().x][Pila.top().y+1] == 0)
{
mat[Pila.top().x][Pila.top().y+1] = 1;
Pila.push(Cord(Pila.top().x,Pila.top().y+1));
continue;
}
}
// mat[Pila.top().y][Pila.top().x] = 0;
Pila.pop();
}
return false;
}
NOTA: Uso ceros en vez de ' '.