Ayuda con función recursiva.

Iniciado por Javi.24, 15 Junio 2012, 12:32 PM

0 Miembros y 1 Visitante están viendo este tema.

Javi.24

Buenas!

Tengo que hacer un trabajo de programación en C y teniendo un dibujo como este (tratándolo como una matriz) tengo que hacer que el usuario ponga una coordenada, y que en el punto donde ha seleccionado, se tiene que llenar de asteriscos(*) hasta encontrar frontera con otros asteriscos. Vamos como la función del paint de rellear una región con un color.

El dibujo es este: http://i.imgur.com/PMesd.png

Así que si el punto que el usuario ha seleccionado está dentro de una de las ventanas de la casa, esa ventana debería llenarse de asteriscos.

He estado probando algunas ideas pero lo máximo que puedo hacer es esto:
Donde q[a][.b] es la matriz, y "a" es el número de filas y "b" columnas.
(Pongo el punto antes de la "b" porque sino lo pone en negrita XD)

void rellenar(int a, int b, char **q){

if(q[a][.b]=='*'){
return;
}
if(q[a][.b]!='*'){
q[a][.b]='*';

   if(q[a][b+1]!='*'){
   q[a][b+1]='*';
   }
       if(q[a][b-1]!='*'){
       q[a][b-1]='*';
       }
           if(q[a-1][.b]!='*'){
           q[a-1][.b]='*';
           }
               if(q[a+1][.b]!='*'){
               q[a+1][.b]='*';
               }
                   if(q[a+1][b+1]!='*'){
                   return rellenar(a+1,b+1,q);
                   }
}
}


Tengo que entregar el trabajo el lunes y estoy desesperado.
Agradecería cualquier ayuda, gracias!

GuzmanG

Hola como andas?

Por lo que yo veo, con la solución que planteas no estarías cubriendo todos los casos que podrían presentarse.

Quizás puedas encararlo por el lado de solamente preguntar si hay * o no en la celda que te llega como parámetro (en este caso a y b) y despues tratar de ver como podes llegar a hacerlo recursivo para las celdas circundantes (las 8 celdas a sus lados).

Yo tuve que hacer algo similar para la solución de un Buscaminas (cuando descubris una celda vacía) y creo que con algo del estilo pude resolverlo.


Intentá sacarlo por este lado si queres y y cualquier consulta avisa.
Saludos,