Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


Duda tonta con matrices en java...

Forte For Java, JavaBeens, JBuilder, JDK compiladores, Applets, Proyectos Web, interactividad con JDBC... entre mucho mas.
Moderador

Moderador: iuav

Duda tonta con matrices en java...

Notapor ihuesa el Lun Ene 22, 2007 3:57 pm

Buenas, estoy descubriendo como quien dice el website y la verdad es que me está siendo muy útil.

Pese a todo, me ha surgido una duda muy tonta en java, a ver si alguien puede ayudarme.

Resulta que tengo que tratar una matriz. Lo que tengo que hacer es comprobar, para cada elemento de la misma, cuantos "vecinos" distintos de 0 tiene.

Lógicamente, no es lo mismo si estoy en una esquina(que tendría tres vecinos) que si estoy en algún punto por el centro de la matriz(que tendría 8 vecinos).

Sólo se me ocurre resolver esto a lo bruto, es decir, poniendo un par de for para recorrer la matriz e ir comprobando cada elemento si es de una esquina, de una fila/columna del borde o si pertenece a los elementos centrales y ya calcular los vecinos una vez sepa esto.

Claro, queda demasiado espeso y poco elegante...seguro que hay algo mejor.

¿Alguna sugerencia?

Mil gracias por adelantado!!!
ihuesa
Novato
Novato
 
Mensajes: 2
Registrado: Lun Ene 22, 2007 3:48 pm

Re: Duda tonta con matrices en java...

Notapor latindeveloper el Lun Ene 22, 2007 5:11 pm

Puedes utilizar esta tecnica:

Código: Seleccionar todo
// Puntos adyacentes posibles.  (8 vecinos)
int dirs[8][2] =
{
    {1,-1},
    {1,0},
    {1,1},
    {0,1},
    {-1,1},
    {-1,0},
    {-1,-1},
    {0,-1},
};
#define Y  1
#define X  0


Ahora solo queda verificar cada punto adyacente con un codigo como este:

Código: Seleccionar todo
int VerificarVecinos(int i,int j)
{
  int count = 0;
  for(int k = 0 ; k < 8; k++)
  {
     if((((i + dirs[k][Y]) >= 0) && ((i + dirs[k][Y]) < n)) &&
     (((j + dirs[k][X]) >= 0) && ((j + dirs[k][X]) < m)))
     {
         if(matriz[i + dirs[k][Y]][j + dirs[k][X]] != 0)
         {
             count++;
         }
     }
  }
  return count;
}


n y m es el tamaño de la matriz.
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:30 pm
Ubicación: Peru

Notapor ihuesa el Lun Ene 22, 2007 5:18 pm

Muchas gracias!!

Rápido y eficiente, así da gusto.
ihuesa
Novato
Novato
 
Mensajes: 2
Registrado: Lun Ene 22, 2007 3:48 pm

Notapor Vicitor2006 el Sab Jun 09, 2007 8:49 pm

Si, eso me ha servido a mi tambien
Estoy aki para aprender
Imagen
Avatar de Usuario
Vicitor2006
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 127
Registrado: Mié May 23, 2007 11:38 am


Volver a Java

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados