Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/07/2015, 00:58
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 3 meses
Puntos: 204
Respuesta: Duda sobre matriz y función

Buenos días.

Lo primero, el código acostúmbrate a decorarlo usando la opción que corresponda en el desplegable "Highlight". Con esto consigues dos cosas:

* Cumplir las normas del foro
* Que el código sea legible

Cita:
Iniciado por luchon78 Ver Mensaje
Pero ahora cuando lo ejecuto me da solución invalida muchas veces y no una como quisiera
A ver, si lo que estabas intentando ahí era comprobar filas y columnas... eso son dos bucles independientes, no dos anidados... además, cada bucle tiene que cubrir el rango (0,9]. Como además tienes que evitar comparar una celda consigo misma, cada bucle tendrá que incluir un if... algo tal que:


Código C++:
Ver original
  1. bool ver=true;
  2. for(int i=0; i<9 && ver; ++i )
  3. {
  4.   if( i != filaAct)
  5.     ver = mat[filaAct][colAct] != mat[i][colAct];
  6. }
  7.  
  8. for(int j=0; j<9 && ver; ++j )
  9. {
  10.   if( j != colAct)
  11.     ver = mat[filaAct][colAct] != mat[filaAct][j];
  12. }
  13.  
  14. if( ver )
  15.   cout << "Solución correcta" << endl;
  16. else
  17.   cout << "Solución incorrecta" << endl;

Al código anterior le faltan algunos detalles:
  • Hay que ejecutar los bucles para cada celda del sudoku... si te fijas hay dos variables filaAct y colAct que no están declaradas en ninguna parte
  • Hay que comprobar que no se repite ningún número dentro de un mismo cuadrante
  • El algoritmo debe dar una solución incorrecta si se encuentra con alguna celda que esté vacía, sin número asignado

La función verificarDigito ha de funcionar prácticamente igual que la función VerificarTablero... la única diferencia es que VerificarTablero tiene que chequear todas las celdas del sudoku mientras que verificarDigito únicamente debe preocuparse por chequear una celda... fíjate que si eres capaz de aislar el código que permite chequear una celda en una función independiente que reciba dos argumentos (la fila y la columna), la función VerificarTablero la construyes con dos bucles anidados (para recorrer el sudoku) y una llamada a esta nueva función.

Un saludo