Comparando os comandos de input
em 14 de Julho de 2014
Peço desculpas por ter ficado tanto tempo sem continuar nossa saga pela resolução do sudoku. Andei muito ocupado.
Uma imagem vale mais do que mil palavras:
Vamos começar falando como representaremos um sudoku no computador. Nós vamos usar um arquivo de texto com 9 linhas e 9 colunas, cada uma representando uma das 81 posições de um sudoku.
Há duas possibilidades para cada posição: ser um número de 1 a 9 ou ser um 0. Se ela for 0, nós temos que preencher aquela posião para resolver o jogo. Caso contrário, se o número não for 0, aquela posição é dada e nós não vamos mexer nela.
Por exemplo, neste link, temos um sudoku que eu achei no google. A representação dele no nosso arquivo de texto "sudoku.txt" é a seguinte:
4 0 6 0 0 9 8 0 3
0 2 0 0 0 6 0 0 5
9 0 5 0 1 0 0 0 0
0 7 1 0 3 5 0 0 0
2 9 0 0 0 0 0 1 8
0 0 0 1 9 0 6 3 0
0 0 0 0 5 0 9 0 2
8 0 0 4 0 0 0 5 0
1 0 2 9 0 0 4 0 6
Bem simples, certo? Eu só coloquei zeros nos lugares vazios!
Um sudoku é, se você lembra da escola, uma matriz! Matriz é um nome chique para tabela (OK, uma matriz é mais que uma tabela, mas para nós é uma tabela). Logo, nós só precisamos fazer uma matriz, err, tabela.
Em C++, é muito simples fazer uma tabela que guarda números:
int tabela[lin][col];
Isso faz a variável sudoku ser uma tabela com "lin" linhas e "col" colunas. Um sudoku clássico sempre tem 9 linhas e 9 colunas, logo:
int sudoku[9][9];
Fácil, certo? Então, vamos ao que interessa!
Ler um arquivo em C++ é fácil. Não acho que os detalhes sejam relevantes para resolver o sudoku, então só vou colocar o pedaço do programa que faz isso aqui:
1 2 3 4 5 6 7 8 |
|
Essa função vai ler na matriz sudoku o jogo representado no arquivo chamado nome. Agora já sabemos ler um sudoku!
Mas calma, seria bom também conserguirmos ver nosso sudoku resolvido depois de todo esse esforço!
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 |
|
As duas funções fazem basicamente a mesma coisa: elas andam por cada elemento da tabela da seguinte forma: para cada linha, nós olhamos todas as colunas. Se for a função de ler, nós lemos os elementos na tabela. Se for a de imprimir, nós imprimimos o elemento. O único detalhe é que a função de imprimir tem os detalhes para a impressão ficar bonitinha. :)
Como eu disse, ando muito ocupado, então por hoje é só.
Da próxima vez, nós vamos terminar, pelo menos!
Por enquanto, você pode copiar e colar o código que lê e imprime e brincar com ele! O código está aqui.
Até!