Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Hurricane

preciso de ajuda.. sudoku!

Recommended Posts

Hurricane

tenho k escrever um programa resolva o puzzle sudoku a partir de uma situaçao inicial guardada num ficheiro.. se alguem tiver alguma ideia ou sugestao k compartilhe fikaria agradecido :D

Share this post


Link to post
Share on other sites
vbmaster

faz um search por sudoku e talvez encontres algumas dicas nalguns threads existentes.

Fica bem :D ;):D

Share this post


Link to post
Share on other sites
deathseeker25

A comunidade Portugal-a-Programar dá as boas vindas ao membro Hurricane.

Então és mais um dos que quer fazer um programa com o sudoku...óptimo. Deves ter consciencia que já deves ter alguma experiencia na programação em C, porque o jogo do Sudoku não é assim tão fácil de programar.

Aconselho-te vivamente a leitura desta página do Wikipedia. Certamente vais solucionar muitas duvidas através a leitura da mesma...

Depois é fazer tal como o vbmaster disse: pesquisar um pouquinho que nós aqui no forum já temos alguma informação acerca desse assunto.

Cumps

Share this post


Link to post
Share on other sites
jarsantos

Qual é o formatado da informação que recebes no ficheiro? como é que ele esta escrito?

Share this post


Link to post
Share on other sites
Dabubble

Se quiseres posso-te arranjar um gerador e um resolverdos feitos em c, mas acho que era mais util implementares tu um algoritmo.

O metodo e relativamente simples eu fiz um ha pouco tempo:

Controis um array tri-dimensional de inteiros de 9x9x9 casas:

As primeiras 9x9 sao as casa do sudoku e as ultimas sao os 9 sao os 9 numeros que cada casa pode ter.

Entra a situacao inicial. Precorres os array e nas casas correnspondentes aquelas preenchidas na situacao inicial so deixas os numeros que la estao. A partir daqui e um ciclo que so acaba ate teres o puzzle resolvido.

1º Passo - Encontras o primeiro numero que esteja sozinho e percorres todas as casas e eliminas os numeros incompativeis por estarem na mesma linha coluna ou quadrado que esse.

2º Passo procuras um novo numero e xecutas de novo o primeiro passo

quando chegares a casa 9x9 voltas ao inicio

Convem manter uma mapa (que pode ser outro array bidimensional mas desta vez de booleans) das casas que ja foram testadas pois se tiveres de testar a mesma casa duas vezes o puzzle nao tem solucao (pelo menos foi o que aconteceu nos meus casos mas nao tenho a prova matematica :D ).

Share this post


Link to post
Share on other sites
jarsantos

depois de ler este topico fiz o jogo. Nao vou estar aqui a meter o programa pk assim nao irias aprender nada, mas tambem nao colocaste nenhuma questao por isso em nada te posso esclarecer.

coloca aqui as tuas duvidas para o pessoal te ajudar, acho que é injusto estar-te a fazer o programa e colocar aqui para apenas teres que faze copy paste.

Share this post


Link to post
Share on other sites
MaskX

Eu por acaso tb tenho a msma duvida. e já vi k há aki pessoal k sabe fazer. Eu tb não digo k ponham aki o codigo td. Não é necessario. No enanto gostava de ver como é k o programa coloca os numeros nos espaços vazios. kal é a logica usada para por um numero e não outro kk? Era isto k eu gostava d ver, se possivel com uma pekena explicação, pois o k me interessa é tirar ideias para fazer o meu proprio programa e não um copy-paste.

Agradecia que me ajudassem :D

Share this post


Link to post
Share on other sites
jarsantos

Podes começar pela lógica mais simples:

Percorre o tabuleiro todo, sempre que encontra um espaço vazio vai percorrer a linha/coluna e quadrado a que essa posição pertence. Sempre que encontra um numero retira esse numero das hipoteses para essa posiçao, quando ficar apenas com 1 numero como hipotese é esse o número que devem colocar nessa posiçao.

Um exemplo

0 4 0 0 1 3 0 0 6

0 5 7

2 0 0

8

0

2

0

0

0

Queremos descobrir o numero que se deve colocar no lugar que esta a bold:

1º as possibilidades iniciais sao 1 2 3 4 5 6 7 8 9

2º percorres as posiçoes na horizontal e no final tens apenas as seguintes possibilidades: 2 5 7 8 9

3º percorres na vertical. hipoteses: 7 9

4º analisas o quadrado. hipoteses 9

para a posiçao (1,1) o número é o 9

Depois de fazer o programa desta maneira se quiseres que ele realmente resolva todos os sudoku's vais ter que fazer um programa que analise também os espaços em branco mas isso ja é mais complicado de explicar.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.