Navigation
C

Programación en C: ejercicio sobre laberintos de espejos representados en una matriz

Compártelo:

ENUNCIADO:

Una matriz de MxN representa un laberinto de espejos. Cada posición de la matriz puede contener un 0, indicando que no hay espejo en dicha posición; un 1, indicando que existe un espejo situado a 45 grados respecto de la horizontal; o un -1, indicando que existe un espejo situado a 135 grados respecto de la horizontal. Los espejos reflejan la luz por las dos caras, de modo que un rayo incidente girará 90 grados cada vez que se encuentre un espejo. Se introduce un rayo de luz verticalmente hacia abajo por una de las columnas (c) de la fila superior de la matriz. Realizar un algoritmo que, partiendo de la columna por la que se lanza el rayo y la matriz que contiene la información de los espejos, devuelva las coordenadas (fila y columna) de la casilla por la que saldrá el rayo emergente.

Ejemplo de rayo emergente entrando por la primera columna en la matriz {{0,1,-1},{-1,1,0},{1,0,1},{-1,1,0}};


SOLUCIÓN:

 #include<stdio.h>  
 #define N 4  
 #define M 3  
 int main()  
 {  
   int n,abajo,arriba,izquierda,derecha,rf;  
   printf ("EL RAYO SE LANZA POR LA COLUMNA:");  
   scanf ("%d",&n);  
   int matriz[N][M]= {{0,1,-1},{-1,1,0},{1,0,1},{-1,1,0}};  
   abajo=1;  
   arriba=0;  
   izquierda=0;  
   derecha=0;  
   rf=0;  
   while (n!=-1 && n!=M && rf!=-1 && rf!=N)  
   {  
       if (abajo==1)  
       {  
         if (matriz[rf][n]==0)  
         {  
           rf=rf+1;  
         }  
         else if (matriz[rf][n]==1)  
         {  
           izquierda=1;  
           abajo=0;  
           n=n-1;  
         }  
         else if (matriz[rf][n]==-1)  
         {  
           derecha=1;  
           abajo=0;  
           n=n+1;  
         }  
       }  
       else if (arriba==1)  
       {  
         if (matriz[rf][n]==0)  
         {  
           rf=rf-1;  
         }  
         else if (matriz[rf][n]==1)  
         {  
           derecha=1;  
           arriba=0;  
           n=n+1;  
         }  
         else if (matriz[rf][n]==-1)  
         {  
           izquierda=1;  
           arriba=0;  
           n=n-1;  
         }  
       }  
       else if (derecha==1)  
       {  
         if (matriz[rf][n]==0)  
         {  
           n=n+1;  
         }  
         else if (matriz[rf][n]==1)  
         {  
           arriba=1;  
           derecha=0;  
           rf=rf-1;  
         }  
         else if (matriz[rf][n]==-1)  
         {  
           abajo=1;  
           derecha=0;  
           rf=rf+1;  
         }  
       }  
       else if (izquierda==1)  
       {  
         if (matriz[rf][n]==0)  
         {  
           n=n-1;  
         }  
         else if (matriz[rf][n]==1)  
         {  
           abajo=1;  
           izquierda=0;  
           rf=rf+1;  
         }  
         else if (matriz[rf][n]==-1)  
         {  
           arriba=1;  
           izquierda=0;  
           rf=rf-1;  
         }  
       }  
   }  
   if (n==-1)  
     n=0;  
   else if (n==M)  
     n=M-1;  
   else if (rf==-1)  
     rf=0;  
   else if (rf==N)  
     rf=N-1;  
   printf("ABAJO: %d, ARRIBA: %d, DERECHA: %d, IZQUIERDA: %d\n",abajo,arriba,derecha,izquierda);  
   printf("POSICION EXACTA: (%d,%d)",rf,n);  
 }  
Compártelo:

C

Post A Comment:

0 comments: