-
Notifications
You must be signed in to change notification settings - Fork 0
/
questao1_sudoku.c
75 lines (67 loc) · 2.26 KB
/
questao1_sudoku.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <stdio.h>
#include <stdbool.h>
#define SOMA_1_9 45
//Verifica se a soma de cada linha é diferente do valor limite individualmente.
bool verifica_linhas_sudoku(int tabela[9][9]){
int aux_somas_linhas[9] = {0};
for(int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
aux_somas_linhas[i] += tabela[j][i];
}
if ((aux_somas_linhas[i] != SOMA_1_9)){
printf("Problema na Linha %d!", i);
return false;
}
}
return true;
}
//Verifica se a soma de cada coluna é diferente do valor limite individualmente.
bool verifica_colunas_sudoku(int tabela[9][9]){
int aux_somas_colunas[9] = {0};
for(int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
aux_somas_colunas[i] += tabela[i][j];
}
if ((aux_somas_colunas[i] != SOMA_1_9)){
printf("Problema na Coluna %d!", i);
return false;
}
}
return true;
}
//Verifica se em cada sub-bloco da tabela sudoku, a soma dos valores é igual ao valor limite
bool verifica_sub_blocos_sudoku(int i, int j, int tabela[9][9]){
int aux_soma_bloco = 0;
for (int k = 0; k < 3; k++) {
for (int l = 0; l < 3; l++) {
aux_soma_bloco += tabela[i * 3 + k][j * 3 + l];
}
}
if (aux_soma_bloco != SOMA_1_9) {
printf("%d", aux_soma_bloco);
printf("Problema no bloco %d,%d!", i, j);
return false;
}
return true;
}
//Verifica todos os blocos...
bool verifica_blocos_sudoku(int tabela[9][9]){
for(int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (verifica_sub_blocos_sudoku(i, j, tabela) != true) {
printf("Problema no bloco %d,%d!", i, j);
return false;
}
}
}
return true;
}
//Se as linhas, as colunas e cada sub-bloco tiver a soma 45, que é o somatório de 1 até 9, então a tabela está OK
//Do contrário existe problema ou nas linhas, ou colunas ou sub-blocos, sendo que caso haja erro ele aparecerá
//em uma das três funções de verificação.
bool verifica_tabela_sudoku(int tabela[9][9]){
if (verifica_linhas_sudoku(tabela) && verifica_colunas_sudoku(tabela) && verifica_blocos_sudoku(tabela)){
return true;
}
return false;
}