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;
}



© Todos los derechos de cada programa publicado en la web son reservados
Imágenes creadas en Canva
Creado con Webnode Cookies
¡Crea tu página web gratis! Esta página web fue creada con Webnode. Crea tu propia web gratis hoy mismo! Comenzar