recorrido de una matriz de forma recursiva

Iniciado por dark_headhunter, 10 Junio 2011, 07:22 AM

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

dark_headhunter

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?
La informacion es nuestra arma, el anonimato nuestra armadura

Khronos14

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.

Valkyr

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.

dark_headhunter

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

        }
La informacion es nuestra arma, el anonimato nuestra armadura

Khronos14

#4
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.