Laberinto que se resuelve solo
/*
Bienvenidos a todos de nuevo a un nuevo programa. Hoy os presento un programa que genera un
laberinto que se resuelve solo. Os explico. Es programa generara una matriz, que dibujara como
un laberinto aleatorio cada vez que ejecuteis el programa. Este debera buscar el camino para
determinar si existe una salida o no la hay. Para ello, se utilizara la regla de la mano derecha, que
consiste en "imaginariamente" poner la mano derecha en la pared del laberinto, y no despegarla en
nigun momento hasta encontrar la salida. Se dice, por si no lo sabiais, que cuando se entra en un
laberinto, si apoyas la mano derecha (o izquierda, pero se suele decir derecha) en la pared del
laberinto, y empiezas a recorrerlo sin separar la mano en ningun momento de la pared, por regla
general, deberas llegar a la salida, pues de esta forma, recorres todos los pasillos del laberinto y
no hay mas remedio que en algun momento, acabes en la salida (o llegues desde donde empezaste
en el caso de que no exista salida). El programa se basara en eso. El programa ira recorriendo
los pasillos del laberinto con esa regla, y si en algun momento llega hasta el punto donde empezo
significara que el laberinto no tiene salida, o que si la tiene pero no puede acceder a ella. Espero que
os guste muchisimo. Lo proximo, que puedas ser tu el que lo resuelva. Pero eso sera ya proximamente.
*/
#include <stdio.h>
#include <stdlib.h>
#define DIM 30
#define N 0
#define S 1
#define E 2
#define O 3
int main()
{
char laberintox[DIM][DIM];
int direcc;
int movimiento=0;
int x=0;
int y=0;
srand(time(NULL));
for(y=0;y<DIM;y++)
{
for(x=0;x<DIM;x++)
{
if((( y>0 && y<(DIM-1) && x>0 && x<(DIM-1) ) && (rand()%5<3)) || (x==(DIM-2)&&y==(DIM-1)))
{
laberintox[y][x]=' ';
}
else
{
laberintox[y][x]='Û';
}
}
}
x=0;
y=0;
for(y=0;y<DIM;y++)
{
for(x=0;x<DIM;x++)printf("%c", laberintox[y][x]);
{
printf("\n");
}
}
x=1;
y=1;
direcc=1;
laberintox[1][1]='Ï';
for(movimiento=0;(!(x==(DIM-2)&&y==(DIM-1)))&&movimiento<=((DIM-1)*(DIM-1))&&x<DIM&&y<DIM;movimiento++)
{
switch(direcc)
{
case 0:
{
if(laberintox[y][x+1]==' '||laberintox[y][x+1]=='Ï')
{
x=x+1;//ESTE
direcc=E;
laberintox[y][x]='Ï';
break;
}
else if(laberintox[y-1][x]==' '||laberintox[y-1][x]=='Ï')
{
y=y-1;//NORTE
direcc=N;
laberintox[y][x]='Ï';
break;
}
else if(laberintox[y][x-1]==' '||laberintox[y][x-1]=='Ï')
{
x=x-1;//OESTE
direcc=O;
laberintox[y][x]='Ï';
break;
}
else if(laberintox[y+1][x]==' '||laberintox[y+1][x]=='Ï')
{
y=y+1;//SUR
direcc=S;
laberintox[y][x]='Ï';
break;
}
}
case 1:
{
if(laberintox[y][x-1]==' '||laberintox[y][x-1]=='Ï')
{
x=x-1;//OESTE
direcc=O;
laberintox[y][x]='Ï';
break;
}
else if(laberintox[y+1][x]==' '||laberintox[y+1][x]=='Ï')
{
y=y+1;//SUR
direcc=S;
laberintox[y][x]='Ï';
break;
}
else if(laberintox[y][x+1]==' '||laberintox[y][x+1]=='Ï')
{
x=x+1;//ESTE
direcc=E;
laberintox[y][x]='Ï';
break;
}
else if(laberintox[y-1][x]==' '||laberintox[y-1][x]=='Ï')
{
y=y-1;//NORTE
direcc=N;
laberintox[y][x]='Ï';
break;
}
}
case 2:
{
if(laberintox[y+1][x]==' '||laberintox[y+1][x]=='Ï')
{
y=y+1;//SUR
direcc=S;
laberintox[y][x]='Ï';
break;
}
else if(laberintox[y][x+1]==' '||laberintox[y][x+1]=='Ï')
{
x=x+1;//ESTE
direcc=E;
laberintox[y][x]='Ï';
break;
}
else if(laberintox[y-1][x]==' '||laberintox[y-1][x]=='Ï')
{
y=y-1;//NORTE
direcc=N;
laberintox[y][x]='Ï';
break;
}
else if(laberintox[y][x-1]==' '||laberintox[y][x-1]=='Ï')
{
x=x-1;//OESTE
direcc=O;
laberintox[y][x]='Ï';
break;
}
}
case 3:
{
if(laberintox[y-1][x]==' '||laberintox[y-1][x]=='Ï')
{
y=y-1;//NORTE
direcc=N;
laberintox[y][x]='Ï';
break;
}
else if(laberintox[y][x-1]==' '||laberintox[y][x-1]=='Ï')
{
x=x-1;//OESTE
direcc=O;
laberintox[y][x]='Ï';
break;
}
else if(laberintox[y+1][x]==' '||laberintox[y+1][x]=='Ï')
{
y=y+1;//SUR
direcc=S;
laberintox[y][x]='Ï';
break;
}
else if(laberintox[y][x+1]==' '||laberintox[y][x+1]=='Ï')
{
x=x+1;//ESTE
direcc=E;
laberintox[y][x]='Ï';
break;
}
}
}
}
if (!(x==(DIM-2)&&y==(DIM-1)))
{
printf("\n\n\n No tiene salida :c");
}
else
{
printf("\n\n\n Encontre la salida!!");
}
printf("\n\n");
for(y=0;y<DIM;y++)
{
for(x=0;x<DIM;x++)
{
printf("%c", laberintox[y][x]);
}
printf("\n");
}
return 0;
}