Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/10/2008, 19:39
mhatter
 
Fecha de Ingreso: septiembre-2007
Mensajes: 52
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: Ayuda matrics - Alfil

Cita:
Iniciado por zare Ver Mensaje
hola a todos! me dejaron hacer el movimiento de un alfil en un tablero de 9 por 9 representado con una matriz de ceros .........
(..)
por fa alguna idea y yo lo implemento!!
Hola.

Pueden haber muchas formas de solucionar este problema, pero te voy a dar la primera sugerencia que se me ocurre.

Digamos que tienes un tablero en una variable como int tablero[9][9] y las variables m y n que indican la fila y columna dentro de la matriz en donde se ubica el alfil. Entonces podrías comenzar por considerar por ejemplo cuáles son las posiciones que representen las casillas del tablero por las que pasa el alfil si empieza a moverse en diagonal hacia la derecha y abajo.

Por ejemplo, digamos que m=3 y n=5. Entonces, si el alfil empieza a moverse hacia la derecha y abajo, las posiciones por las que va a pasar son:

3, 5
4, 6
5, 7
6, 8

En (6,8) debe detenerse ya que ese es el borde del tablero (las columnas de la matriz van desde 0 hasta 8).

Entonces, en relación a las variables m y n, el movimiento del alfil en esta diagonal, sería así:

m, n
m + 1, n + 1
m + 2, n + 2
m + 3, n + 3

Eso es todo, ahí está el corazón del asunto y es lo que tiene que quedarte claro para poder implementar la solución ya en C. Si entiendes bien esto, entonces puedes pasar a analizar cómo sería el desplazamiento si el alfil se mueve en otras direcciones (a la derecha y arriba, a la izquierda y arriba, y a la izquierda y abajo).

Para darte una mano, te voy a mostrar un pedacito de lo que podría ser una implementación de esta idea que describí arriba:

Código C:
Ver original
  1. /*
  2.  * Recibe una matriz de enteros, presumiblemente llena de ceros,
  3.  * que representa un tablero de ajedrez de 9*9, y dos valores m y n, que
  4.  * indican la fila y columna donde se ubica un alfil.
  5.  *
  6.  * Esta funcion asigna 1 a las posiciones de la matriz que correspondan a
  7.  * posibles posiciones hacia donde se puede desplazar el alfil.
  8.  */
  9. void llenar_posiciones_alfil (int tablero[9][9], int m, int n)
  10. {
  11.     int i;
  12.  
  13.     /* Movimientos hacia la derecha y abajo */
  14.     for (i = 0; m + i < 9 && n + i < 9; i++)
  15.         tablero[m + i][n + i] = 1;
  16.  
  17.     /* Movimientos hacia la derecha y arriba */
  18.     for (i = 0; m - i >= 0 && n + i < 9; i++)
  19.         tablero[m - i][n + i] = 1;
  20.  
  21.     /* Movimientos hacia la izquierda y arriba */
  22.  
  23.     /* Movimientos hacia la izquierda y abajo*/
  24. }

Los últimos dos ciclos no los escribí para que tengas la oportunidad de pensarlos y escribirlos tú mismo :). Espero que te sea de ayuda.