Hola buen dia, les comento estoy haciendo un programa con backtracking donde se me pasa las dimensiones de una matriz por teclado y luego ingreso de igual manera los datos por teclado me explico
3 3
...
.*I
...
el programa tiene que arrojarme cada vez que encuentre una I en la matriz un parentesis asi ( y si alrededor de la i hay un * un parentesis para el otro lado ejemplo salida.
...
.)(
...
pero tengo un problema la salida se me repite muchas veces creo tener algo mal en el un ciclo la idea es que salga una sola vez Ayuda plis!! les dejo el codigo
Código C++:
Ver original#include <cstdlib>
#include <iostream>
using namespace std;
void mostrar(char **t, int r,int c)
{
for(int i=0 ; i< r; i++)
{
for(int j= 0; j < c ; j++)
{
cout<<t[i][j];
}
cout<<endl;
}
}
void llenar(char **s,int x, int y)
{
s[0][0] = x +1;
s[0][1] = y;
s[1][0] = x -1;
s[1][1] = y;
s[2][0] = x;
s[2][1] = y +1;
s[3][0] = x;
s[3][1] = y -1;
s[4][0] = x+1;
s[4][1] = y-1;
s[5][0] = x-1;
s[5][0] = y+1;
}
void relojero(char **t,int r, int c, int p, int x, int y)
{
int i,j;
char q;
//encontrar Ies
i=0;
if(p==0){
while(i<r){
j=0;
while(j<c){
// comilla simple para igualar puntero
if(t[i][j]=='I'){
relojero(t,r,c,p+1,i,j);
}
j++;
}
i++;
}
}
else {
//condicion de termino, que no hayan mas movimientos
if(p==r*c+1)
{
mostrar(t,r,c);
}else
{
char **s;
s = new char*[6];
for(int i = 0; i<6;i++)
{
s[i] = new char[6];
}
llenar(s,x,y);
for(int i = 0; i < 6; i++)
{
int nx = s[i][0];
int ny = s[i][1];
if( (nx >= 0 && nx <c) && ( ny >=0 && ny <r) )
{
if(t[nx][ny]=='I')
{
t[nx][ny] = '(';
relojero(t,r,c,p+1,nx,ny);
t[nx][ny] = 'I';
}
else if (t[nx][ny]=='*')
{
t[nx][ny] = ')';
relojero(t,r,c,p+1,nx,ny);
t[nx][ny] = '*';
}
else if (t[nx][ny]=='.')
{
t[nx][ny] = '-';
relojero(t,r,c,p+1,nx,ny);
t[nx][ny] = '.';
}
}
}
for(int i = 0; i< r; i++)
{
delete [] s[i];
}
delete [] s;
}
}
}
int main(int argc, char *argv[])
{
int R, C;
cin>>R;
cin>>C;
int i,j;
while(R != 0 && C != 0)
{//crear matriz general
char **m;
m = new char*[R];
i=0;
while(i<R)
{
m[i] = new char[C];
i++;
}//crear matriz de engranes principales
char *e;//asigno valores
i=0;
while(R!=i)
{
j=0;
while(C!=j)
{
cin >> m[i][j];
j++;
}
i++;
}
relojero(m,R,C,0,-1,-1);
cin>>R;
cin>>C;
for(int i = 0; i< R; i++)
{
delete [] m[i];
}
delete [] m;
}
return 0;
}