SUDOKU alguem me pode ajudar!!

brokss

Membro
Eu preciso elaborar um programa em pascal que consiste no jogo do sudoku e tens as seguintes caractristicas;:

-tem k ser composto uma grelha quadrada com 81 celulas(9 colunas e 9 linhas)
-tem que se preencher um numero pre-definido de celulas, com valores inteiros entre 1 e 9.
-tem que se obter uma listagem, onde para cada uma das celulas, conste o valor atribuido ou, caso a mesma nao tenha sido preenchida, os valores que poderaõ ser atribuidos

o preenchimento destas celulas deve respeitar as regras do sudoku, ou seja,
-inexistência de valores repetidos na mesma linha e ou coluna.
-inexistência de valores repetidos em cada sub-celula(3 por 3).

se alguem me pudesse ajudar agradecia imenso!
 
para o primeiro ponto , crias um array de 9*9.

Depois tens que criar o algoritmo que preencha a grelha toda e fique guardada em memoria.

Mostras so x valores na grelha quando tiver preenchida comparas com a tua 1 a ver se está certo.

assim por alto acho que está +\-

[]'s
 
Mesmo em pascal é muito fácil, e também a implementação das regras.

Crias uma matrix bidimensional (x,y) para a matriz de 9x9

Para a regra das linhas, podes efectuar a regra da soma, ou seja, tendo a linha toda os número de 1 a 9, a soma total TEM DE SER 45. Logo, se o número for inferior ou superior, a linha tem de ter numeros repetidos. Mas isto só pode gerar erro se a linha estiver completa. E o mesmo podes utilizar para as colunas. Basta utilizares um ciclo FOR e IF

Utilizas uma função de RANDOM para preencheres alguns números. Perguntas quantas casas queres preenchidas (em 81) e depois, com IF para a função principal e RANDOMS para a linha x e coluna Y (X e Y não se podem repetir) consegues preencher aleatoriamente os quadrados do Sudoku

Espero que ajude! Utiliza a imaginação
 
Última edição:
Não se pode preencher pela soma, porque pode tar 45 e repetirem-se numeros.. exemplo:

9
9
6
6
5
4
3
2
1

Não é uma coluna válida, mas a soma é 45
 
E acho que também não é assim tão fácil para preencher as casas que dás ao início. Tens de garantir que, com o número de casas dadas, é possível resolver o problema (sinceramente não sei como fazer isso).
 
Tens de criar uma classe mais ou menos parecida com a seguinte, depois de fazeres a implementação crias um array de de objectos deste tipo, e já está.

class CCasa{
public:
bool ocupada;
int valor;
bool possivel;
int possibilidades[9];
//construtor inicializa a casa a zero
CCasa();
void ver_casa(CCasa *casa);
int contagem(CCasa *casa);
};
 
Existem casos que esse programa nao resolve... Ou melhor, existem casos que ele resolve, uma vez que ele só trata os casos básicos.
Nem pares resolve..
 
Back
Topo