Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: dark_headhunter en 10 Junio 2011, 07:22 am



Título: recorrido de una matriz de forma recursiva
Publicado por: dark_headhunter en 10 Junio 2011, 07:22 am
Hola amigos, estoy quemándome con un ejercicio que no consigo sacar:

Dada un punto cualquiera de una matriz (no importa la dimensión), por simplicidad pongamos 10x10, pues desde ese punto hacer un recorrido de forma recursiva, como si tirásemos una piedra a un lago por ejemplo , en el caso de sumar uno a cada nivel quedaría algo así:

              212
              101
              212

cada vez que aumenta x o y, suma uno, ¿Alguien puede ayudarme?


Título: Re: recorrido de una matriz de forma recursiva
Publicado por: Khronos14 en 10 Junio 2011, 14:49 pm
No dices en que lenguaje así que te lo pongo en Pascal:

Código
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.  SysUtils;
  7.  
  8. var
  9. x, y: integer;
  10. Matriz: array [0..9, 0..9] of integer;
  11. begin
  12.  
  13. for x := 0 to 9 do
  14.  for y := 0 to 9 do
  15.    begin
  16.      if Matriz[x, y] = 14 then
  17.        //Hacemos algo...
  18.    end;
  19. end.
  20.  

Es un bucle dentro de otro, así que recorrería todos los elementos de la matriz..

Saludos.


Título: Re: recorrido de una matriz de forma recursiva
Publicado por: Valkyr en 10 Junio 2011, 16:18 pm
No se si te he entendido bien lo que quieres decir, pero si lo que pretendes es sumar en una unidad el resto de elementos que rodean a uno dada su posición X e Y sería sencillo. Si no es eso, y lo que quieres hacer es dada una posición X e Y recorrer el resto de la matriz sumando uno pero tomando como valor inicial el de la posición X e Y ya sería algo más complicado, pero se puede realizar, aclaralo un poco y te ayudaremos en lo posible.

Si la solución que buscas es la que ha propuesto Khronos14 entonces resuelto xD.

Saludos.


Título: Re: recorrido de una matriz de forma recursiva
Publicado por: dark_headhunter en 10 Junio 2011, 19:17 pm
No me he explicado bien: Tiene que ser recursiva, si utilizáis algún lenguaje y podéis, C o alguno de sus deribados mejor.

No tiene por qué empezar en (0,0)

Os pongo mi código, que no me consigue funcionar, a ver si me lleváis hacia la Luz (es C#, Visual Studio 2010), pero para el caso, que es entender el algoritmo, es igual:

Código:
public void recursiva(int x, int y,int reg)
        {
            if (Matriz[x, y].color != Color.Black || Matriz[x, y].marcado == true)
            {
               
                Matriz[x, y].marcado = true;
                Matriz[x, y].region = reg;
                //acotamos para no salirnos fuera de rango

                if ((x > 0 || (x + 1 < formPrincipal.Cuadro.Image.Width)) &&(y > 0 || (y + 1 < formPrincipal.Cuadro.Image.Height)))
                {
                    recursiva(x + 1, y, reg);
                    recursiva(x - 1, y, reg);
           
                    recursiva(x, y + 1, reg);
                    recursiva(x, y + 1, reg);
                }
               
            }

        }


Título: Re: recorrido de una matriz de forma recursiva
Publicado por: Khronos14 en 10 Junio 2011, 23:39 pm
Código
  1. private void Recursiva(ref int [,] matriz, int x, int y)
  2.        {
  3.            if (x >= 0 && x < matriz.GetLength(0) && y >= 0 && y < matriz.GetLength(1))
  4.            {
  5.                matriz[x, y]++;
  6.  
  7.                if (x == matriz.GetLength(0) - 1)
  8.                {
  9.                    x = 0;
  10.                    y++;
  11.                }
  12.                else
  13.                    x++;
  14.  
  15.                Recursiva(ref matriz, x, y);
  16.            }
  17.        }
  18.  

Me parece una función recursiva bastante simple.

Saludos.