From a3b244cb98c455c2c88ee17b8424fa6fa8cf805d Mon Sep 17 00:00:00 2001 From: InigoGutierrez Date: Wed, 25 Dec 2019 20:18:48 +0100 Subject: Resuelto 345 en c++: Sudokus correctos. --- c/345_sudokusCorrectos.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 c/345_sudokusCorrectos.cpp diff --git a/c/345_sudokusCorrectos.cpp b/c/345_sudokusCorrectos.cpp new file mode 100644 index 0000000..37b078c --- /dev/null +++ b/c/345_sudokusCorrectos.cpp @@ -0,0 +1,77 @@ +#include + +int sudoku[9][9]; +int casos; +int row, col; +int checker[9]; + +void cleanChecker() { + int i; + for (i = 0; i < 9; i++) { + checker[i] = 0; + } +} + +int touchChecker(int row, int col) { + if (checker[sudoku[row][col]-1]) + return 1; + checker[sudoku[row][col]-1] = 1; + return 0; +} + +// Devuelve 1 si encuentra error, 0 si no +int region(int startRow, int startCol) { + int row, col; + cleanChecker(); + for (row = startRow; row < startRow + 3; row++) { + for (col = startCol; col < startCol + 3; col++) { + if (touchChecker(row, col)) + return 1; + } + } + return 0; +} + +std::string computeCase() { + // Leer caso + for (row = 0; row < 9; row++) { + for (col = 0; col < 9; col++) { + std::cin >> sudoku[row][col]; + } + } + + // Computar caso + // Filas + for (row = 0; row < 9; row++) { + cleanChecker(); + for (col = 0; col < 9; col++) { + if (touchChecker(row, col)) { + return "NO"; + } + } + } + // Columnas + for (col = 0; col < 9; col++) { + cleanChecker(); + for (row = 0; row < 9; row++) { + if (touchChecker(row, col)) { + return "NO"; + } + } + } + // Celdas 3x3 + for (row = 0; row < 9; row+=3) { + for (col = 0; col < 9; col+=3) { + if (region(row, col)) { + return "NO"; + } + } + } + return "SI"; +} + +int main(void) { + for (std::cin >> casos; casos > 0; casos--) { + std::cout << computeCase() << std::endl; + } +} -- cgit v1.2.1