Test Foro de elhacker.net SMF 2.1

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 (delphi) [Seleccionar]

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
x, y: integer;
Matriz: array [0..9, 0..9] of integer;
begin

for x := 0 to 9 do
  for y := 0 to 9 do
    begin
      if Matriz[x, y] = 14 then
        //Hacemos algo...
    end;
end.


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:

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 (csharp) [Seleccionar]

private void Recursiva(ref int [,] matriz, int x, int y)
       {
           if (x >= 0 && x < matriz.GetLength(0) && y >= 0 && y < matriz.GetLength(1))
           {
               matriz[x, y]++;

               if (x == matriz.GetLength(0) - 1)
               {
                   x = 0;
                   y++;
               }
               else
                   x++;

               Recursiva(ref matriz, x, y);
           }
       }


Me parece una función recursiva bastante simple.

Saludos.