Cpp/JuegoSudoku_FernandoMéndez/TableroSudoku.h

34 lines
2.8 KiB
C
Raw Normal View History

2019-06-20 12:06:27 +02:00
//Sudoku - Fernando M<>ndez Torrubiano
#ifndef H_TABLEROSODOKU_H
#define H_TABLEROSODOKU_H
#pragma once
#include <iostream>
#include <string>
#include <fstream>
#include "CasillaSudoku.h"
//Constantes:
const int MAXDIM = 9;
//Tipos:
typedef struct tCoor {
int fila, col;
};
typedef struct tTableroSudoku {
tCasillaSudoku casilla[MAXDIM][MAXDIM];
int numVacias;
};
//Funciones:
bool cargar(tTableroSudoku& tablero, std::string nombreFichero); //carga<67>la<6C>informaci<63>n<EFBFBD>almacenada<64>en<65>el<65>archivo<76>de<64>nombre<72>nombreFichero<72>que<75> contiene<6E>el<65>tablero<72>del<65>sudoku<6B>a<EFBFBD>jugar, contando<64>las<61>casillas, y<>devuelve<76>un<75> booleano<6E>que<75>indica<63>si<73>la<6C>carga<67>se<73>ha<68>podido<64>realizar.Los<6F>valores<65>posibles<65>de<64> las<61>casillas<61>deber<65>n<EFBFBD>quedar<61>convenientemente<74>actualizados.
void mostrar(const tTableroSudoku& tablero); //Muestra<72>por<6F>pantalla<6C>el<65>tablero<72>dado.
bool actualizar(tTableroSudoku& tablero, tCoor cor, int num); //Coloca<63>el<65>n<EFBFBD><6E>num<75>en<65>la<6C>casilla<6C>de<64>coordenadas<61>cor = (fila, col)<29>(ambas<61>en<65>el<65> intervalo<6C>[0, 8])<29>del<65>tablero<72>tablero;<3B>el<65>booleano<6E>que<75>devuelve<76>indica<63>si<73>la<6C> acci<63>n<EFBFBD>ha<68>sido<64>posible<6C>(para<72>ello<6C>la<6C>casilla<6C>debe<62>ser<65>vac<61>a<EFBFBD>y<EFBFBD>num<75>debe<62>ser<65>uno<6E>de<64> los<6F>valores<65>posibles<65>de<64>la<6C>misma).Si<53>es<65>posible<6C>colocar<61>el<65>n<EFBFBD>mero<72>dado<64>en<65>la<6C> casilla<6C>indicada<64>deber<65>n<EFBFBD>actualizarse<73>convenientemente<74>los<6F>valores<65>candidatos<6F> de<64>las<61>casillas<61>que<75>puedan<61>verse<73>afectadas<61>(las<61>de<64>la<6C>misma<6D>fila, columna<6E>y submatriz<69> que<75> la<6C> casilla<6C> dada).Tambi<62>n<EFBFBD> se<73> debe<62> actualizar<61> el<65> n<>mero<72> de<64> casillas<61>vac<61>as.
bool borrar(tTableroSudoku& tablero, tCoor cor); //Borra<72>el<65>n<EFBFBD>mero<72> de<64>la<6C>casilla<6C>de<64>coordenadas<61>cor = (fila, col)<29><>(ambas<61>en<65>el<65>intervalo<6C>[0, 8])<29>del<65> tablero<72>tablero<72>y<EFBFBD>la<6C>casilla<6C>volver<65><72>a<EFBFBD>estar<61>en<65>estado<64>vac<61>o;<3B>el<65>booleano<6E>que<75> devuelve<76>indica<63>si<73>la<6C>acci<63>n<EFBFBD>ha<68>sido<64>posible<6C>(debe<62>ser<65>una<6E>casilla<6C>que<75>haya<79>sido<64> previamente<74>rellenada).Si<53>es<65>posible<6C>borrar<61>el<65>n<EFBFBD>mero<72>de<64>la<6C>casilla<6C>indicada<64> deber<65>n<EFBFBD>actualizarse<73>convenientemente<74>los<6F>valores<65>candidatos<6F>de<64>las<61>casillas<61> que<75>puedan<61>verse<73>afectadas<61>(las<61>de<64>la<6C>misma<6D>fila, columna<6E>y<EFBFBD>submatriz<69>que<75>la<6C> casilla<6C>dada).Tambi<62>n<EFBFBD>se<73>debe<62>actualizar<61>el<65>n<EFBFBD>mero<72>de<64>casillas<61>vac<61>as.
void mostrarCandidatos(const tTableroSudoku& tablero, tCoor cor); //Muestra<72>los<6F>valores<65>posibles<65>de<64>la<6C>casilla, del<65>tablero<72>dado, que<75>tiene<6E><65> coordenadas<61>cor = (fila, col)<29>(ambas<61>en<65>el<65>intervalo<6C>[0, 8]).
void completarSimples(tTableroSudoku& tablero); //En<45>cada<64>casilla<6C>que<75> tiene<6E> un<75> <20>nico<63> valor<6F> posible<6C> se<73> pone<6E> dicho<68> valor<6F> y<> se<73> actualizan<61> convenientemente<74> los<6F> valores<65> posibles<65> de<64> las<61> casillas<61> que<75> puedan<61> verse<73> afectadas.Tambi<62>n<EFBFBD>se<73>debe<62>actualizar<61>el<65>n<EFBFBD>mero<72>de<64>casillas<61>vac<61>as.
int numVacias(const tTableroSudoku& tablero); //Devuelve<76>el<65>n<EFBFBD>mero<72> de<64>casillas<61>vac<61>as<61>del<65>tablero<72>dado.
void cargarCandidatos(tTableroSudoku& tablero, tCoor cor); //Recibe el tablero y unas coordenadas, lee para dichas coordenadas los posibles valores candidatos.
#endif