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