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
Pero esque la idea esque no repitas caminos xD.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
#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 ' '.