#include <stdio.h>   /*mquintu*/
#include <string.h>
#define N 10
int i=0,j=0;
void pregunta (char LAB[N][N]);
void laberinto (char LAB[N][N]);
void muestralab(char LAB[N][N]);
void salida (char LAB[N][N]);
int bifurcacion(char LAB[N][N]);
void pregunta3(char LAB[N][N]);
void funcion(char LAB[N][N]);

main()
{
	int i,j;
	char LAB[N][N];
	for(i=0;i<N;i++)
        {
		for(j=0;j<N;j++)
			scanf("%c",&LAB[i][j]);
           getchar();
        }
        getchar();
	system("clear");
	laberinto(LAB);
	return 0;
}
void laberinto(char LAB[N][N])
{
	int f=0;
	if(i==0 && j==0)
	{
		f=0;
		f=bifurcacion(LAB);
		if(f==1)
			LAB[i][j]='I';
		if(f==2)
			LAB[i][j]='B';
		if(f==3)
			LAB[i][j]='W';
		muestralab(LAB);
		sleep(1);
		system("clear");
		pregunta(LAB);
		pregunta3(LAB);
	}
	if(i==(N-1) && j==(N-1))
		funcion(LAB);
	if(i==0 && j==(N-1))
		funcion(LAB);
	if((i==(N-1)) && j==0)
		funcion(LAB);
	if(i==0 && (j>0 && j<(N-1)))
		funcion(LAB);
	if((i>0 && i<(N-1)) && j==0)
		funcion(LAB);
	if((i==(N-1)) && (j>0 && j<(N-1)))
		funcion(LAB);
	if((i>0 && i<(N-1)) && (j==(N-1)))
		funcion(LAB);
	if((i>0 && i<(N-1)) && (j>0 && j<(N-1)))
		funcion(LAB);
}
void pregunta(char LAB[N][N])
{
	if(i!=(N-1))
	if((LAB[i+1][j])==' ')
	{
		i++;
		salida(LAB);
		laberinto(LAB);
	}
	if(j!=(N-1))
	if((LAB[i][j+1])==' ')
	{
		j++;
		salida(LAB);
		laberinto(LAB);
	}
	if(i!=0)
	if((LAB[i-1][j])==' ')
	{
		i--;
		salida(LAB);
		laberinto(LAB);
	}
	if(j!=0)
	if((LAB[i][j-1])==' ')
	{
		j--;
		salida(LAB);
		laberinto(LAB);
	}
}
void muestralab(char LAB[N][N])
{
   int i=0, j=0;
   for(i=0;i<N;i++)
   {
      for(j=0;j<N;j++)
         printf("%c",LAB[i][j]);
      printf("\n");
   }
}
void salida(char LAB[N][N])
{
	if(i!=(N-1))
	if((LAB[i+1][j])=='S')
	{
		LAB[i][j]='R';
		muestralab(LAB);
		printf("\nEl laberinto ha sido recorrido exitosamente!!\n");
		exit (0);
	}
	if(j!=(N-1))
	if((LAB[i][j+1])=='S')
	{
		LAB[i][j]='R';
		muestralab(LAB);
		printf("\nEl laberinto ha sido recorrido exitosamente!!\n");
		exit (0);
	}
	if(i!=0)
	if((LAB[i-1][j])=='S')
	{
		LAB[i][j]='R';
		muestralab(LAB);
		printf("\nEl laberinto ha sido recorrido exitosamente!!\n");
		exit(0);
	}
	if(j!=0)
	if((LAB[i][j-1])=='S')
	{
		LAB[i][j]='R';
		muestralab(LAB);
		printf("\nEl laberinto ha sido recorrido exitosamente!!\n");
		exit (0);
	}
}
int bifurcacion(char LAB[N][N])
{
	int cont=0;
	if(i!=(N-1))
	if((LAB[i+1][j])==' ')
		cont++;
	if(i!=0)
	if((LAB[i-1][j])==' ')
		cont++;
	if(j!=0)
	if((LAB[i][j-1])==' ')
		cont++;
	if(j!=(N-1))
	if((LAB[i][j+1])==' ')
		cont++;
	return (cont);
}
void pregunta3(char LAB[N][N])
{
	if(i!=(N-1))
        if((LAB[i+1][j])=='R')
	{
		do
		{
		LAB[i][j]='D';
		i++;
		}
		while((LAB[i][j])!='R');
		laberinto(LAB);
	}
	if(i!=0)
       	if((LAB[i-1][j])=='R')
	{
		do
		{
		LAB[i][j]='D';
		i--;
		}
		while((LAB[i][j])!='R');
		laberinto(LAB);
	}
	if(j!=0)
       	if((LAB[i][j-1])=='R')
	{
		do
		{
		LAB[i][j]='D';
		j--;
		}
		while((LAB[i][j])!='R');
		laberinto(LAB);
	}
	if(j!=(N-1))
       	if((LAB[i][j+1])=='R')
	{
		do
		{
		LAB[i][j]='D';
		j++;
		}
		while((LAB[i][j])!='R');
		laberinto(LAB);
	}
	if(i!=(N-1))
        if((LAB[i+1][j])=='B' || LAB[i+1][j]=='W')
	{
		LAB[i][j]='D';
		i++;
		laberinto(LAB);
	}
	if(i!=0)
       	if((LAB[i-1][j])=='B' || LAB[i-1][j]=='W')
	{
		LAB[i][j]='D';
		i--;
		laberinto(LAB);
	}
	if(j!=0)
       	if((LAB[i][j-1])=='B' || LAB[i][j-1]=='W')
	{
		LAB[i][j]='D';
		j--;
		laberinto(LAB);
	}
	if(j!=(N-1))
       	if((LAB[i][j+1])=='B' || LAB[i][j+1]=='W')
	{
		LAB[i][j]='D';
		j++;
		laberinto(LAB);
	}
}
void funcion(char LAB[N][N])
{
	int aux=0;	
	aux=bifurcacion(LAB);
	if(aux==1)
		LAB[i][j]='R';
	if(aux==2)
		LAB[i][j]='B';
	if(aux==3)
		LAB[i][j]='W';
	muestralab(LAB);
	sleep(1);
	system("clear");
	pregunta(LAB);
	pregunta3(LAB);
}
/*El codigo fuente de este programa fue realizado por Mauricio A. Quintullanca S.*/
