Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/03/2011, 06:01
pj_soles
 
Fecha de Ingreso: septiembre-2010
Mensajes: 7
Antigüedad: 14 años, 3 meses
Puntos: 0
Ayuda con programa C++

Hola!

Tengo un problema que me esta volviendo loca con 2 variables que cambian de valor sin venir a cuento, y ya no sé cómo resolverlo.

Lo que estoy haciendo es un tablero que represento con la clase Board, que es una matriz 4x4 de estructuras. Las estructuras representan celdas de un tablero de ajedrez, que estan formadas por 2 booleanos, uno que es true cuando se supone q hay una ficha puesta, y otra que es true cuando no hay ninguna otra pieza que amenace esa casilla.

Tengo que ir probando recursivamente qué diferentes soluciones puede tener este problema (es el de las 8 reinas, pero con 4, no sé si os suena). Para eso ejecuto la siguiente funcion.


Código C++:
Ver original
  1. void Board::putNextQueen(int i, int j)
  2. {
  3.     for (int n = i; n < 4; n++)
  4.     {
  5.         for (int m = j; m < 4; m++)
  6.         {
  7.             cout << "n = " << n << ", m = " << m;
  8.  
  9.             if (this->squares[n][m].isSafe)
  10.             {
  11.                 cout << " is safe " << endl;
  12.  
  13.                 Board newBoard;
  14.  
  15.                 newBoard.copySquares(this->squares);
  16.                 newBoard.put(n, m);
  17.                 newBoard.putNextQueen(n,m);
  18.             }
  19.             else
  20.                 cout << "is NOT safe " << endl;
  21.         }
  22.     }
  23. }
El problema está en que n y m, que inicialmente valen 0 y 0 respectivamente, cambian inexplicablemente de valor a 187182783 (o algo parecido) al hacer
Código C++:
Ver original
  1. Board newBoard;

Os copio a continuación el constructor de la clase, que crea un board vacío.

Código C++:
Ver original
  1. Board::Board()
  2. {
  3.         Square square;
  4.         square.hasQueen = false;
  5.         square.isSafe = true;
  6.         for (int i = 0; i <= 4; i++)
  7.         {
  8.             for (int j = 0; j <= 4; j++)
  9.             {
  10.                 squares[i][j] = square;
  11.             }
  12.         }
  13. }
¿Qué estoy haciendo mal? Seguro que es algo más obvio de lo que creo, pero yo no encuentro el problema y no sé como esquivarlo!

Espero que me podáis ayudar. Muchas gracias por adelantado!

Última edición por pj_soles; 13/03/2011 a las 09:55