Um Solver Sudoku em C

Um Solver Sudoku em C é um programa Linux baseado em console, escrito na linguagem C, que resolve os quebra-cabeças su doku usando lógica dedutiva.
Baixe Agora

Um Solver Sudoku em C Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • GPL
  • Preço:
  • FREE
  • Nome do editor:
  • Bill DuPree
  • Site do editor:
  • http://www.techfinesse.com/sshutout/sshutout.html

Um Solver Sudoku em C Tag


Um Solver Sudoku em C Descrição

Um solucionador de Sudoku em C é um programa Linux baseado em console, escrito na linguagem C, que resolve os quebra-cabeças su doku usando lógica dedutiva. Um solucionador de Sudoku em C é um programa Linux baseado em console, escrito na linguagem C, que resolve os quebra-cabeças su doku usando lógica dedutiva. Ele só irá recorrer a abordagens de julgamento e erro e backtracking ao esgotamento de seus movimentos dedutivos.Puzzles deve ser da variedade padrão 9x9 usando os caracteres (ASCII) 1 a 9 para os símbolos do quebra-cabeça. Os quebra-cabeças devem ser submetidos como 81 caracteres de caracteres que, quando lidos à esquerda para a direita preencherão uma grade de sudoku 9x9 da esquerda para a direita e de cima para baixo. Na especificação do quebra-cabeça, os caracteres 1 - 9 representam os givens ou pistas de quebra-cabeças. Qualquer outro caractere não branco representa uma célula não resolvida. O algoritmo de resolução de quebra-cabeças é cultivado em casa. Eu não pedi emprestado nenhuma das técnicas habituais da literatura, e. "Links dançantes" de Donald Knuth. Em vez disso, revirei o meu próprio zero como um desafio pessoal. Como tal, seu desempenho só pode ser culpado no seu verdadeiramente. Ainda assim, sinto que é muito rápido. Em uma caixa de 333 MHz Pentium II Linux, resolve enigmas típicos de força média em aproximadamente 800 microssegundos ou cerca de 1.200 puzzles por segundo, dar ou tomar. Em um Athlon XP 3000, resolve cerca de 6.600 puzzles por segundo. (Resolução de tempo depende do grau de dificuldade, portanto, YMMV.) Descrição do algoritmo: O algoritmo de quebra-cabeças assume inicialmente que cada célula não resolvida pode assumir todos os valores possíveis. Em seguida, usa a colocação dos givens para refinar as opções disponíveis para cada célula. Eu chamo isso da fase de marcação. A marcação completa, o algoritmo então procura por células Singleton com valores que, devido a restrições impostas pela região de linha, coluna ou 3x3, podem assumir apenas um valor possível. Uma vez que essas células recebam valores atribuídos, o algoritmo retorna à fase de marcação para aplicar essas alterações nas soluções candidatas restantes. As fases de Markup / Singleton alternam até que não ocorram mais mudanças, ou o quebra-cabeça é resolvido. Eu chamo o loop de eliminação de Markup / Singleton o simples solucionador, porque em uma grande porcentagem de casos resolve o quebra-cabeça. Se a simples parte do solucionador do algoritmo não produzir uma solução, as regras dedutivas mais avançadas são aplicadas. Eu implementei duas regras adicionais como parte do solucionador de quebra-cabeça dedutivo. A primeira é a eliminação do subconjunto em que uma linha / coluna / região é digitalizada para X número de células com X número de soluções candidatas correspondentes. Se esses subceses (ou tuplas) forem encontrados na linha, coluna ou região, os valores dos candidatos do subconjunto podem ser eliminados de todas as outras células não resolvidas dentro da linha, coluna ou região, respectivamente. A próxima regra dedutiva examina cada Região à procura de valores candidatos que se alinhem exclusivamente ao longo de uma única linha ou coluna, ou seja, um vetor. Se tais valores candidatos forem encontrados, eles podem ser eliminados das células fora da região que fazem parte da linha ou coluna alinhada. Nem que cada uma das regras dedutivas avançadas chama todas as regras precedentes, em ordem, se essa regra avançada tiver Efetuado uma mudança no quebra-cabeças. Finalmente, se nenhuma solução for encontrada após aplicar iterativamente todas as regras dedutivas, começamos a testar e-erros usando a recursão para o backtracking. Uma cópia de trabalho é criada a partir do nosso quebra-cabeça e usando essa cópia, a primeira célula com o menor número de soluções candidatas é escolhida. Um dos valores de soluções é atribuído a essa célula, e o algoritmo solisver é chamado usando essa cópia de trabalho como ponto de partida. Eventualmente, uma solução, ou um impasse é atingido. Se alcançarmos um impasse, a recursão descontrair e a próxima solução de teste é tentada. Se uma solução for encontrada (em qualquer ponto), os valores para a solução forem adicionados a uma lista. Mais uma vez, desde que estejamos examinando todas as possibilidades, a recursão descontraia para que o próximo julgamento possa ser tentado. É dessa maneira que enumeramos quebra-cabeças com várias soluções. Não é certamente possível adicionar à lista de regras dedutivas aplicadas. As técnicas conhecidas como "x-wing" e "espadarte" vêm à mente. Por outro lado, adicionar essas regras adicionais, com toda a probabilidade, retardar o solucionador adicionando ao fardo computacional, produzindo poucos resultados. Eu vi a lei dos retornos decrescentes, mesmo em algumas das regras existentes, e. Na eliminação do subceset eu só olho para dois e três subconjuntos valiosos porque a levando mais além daquele desempenho degradado. O que é novo nesta versão: · As regras de marcação e avaliação foram reformuladas para a meticulosidade e a eficiência. · O motor solver foi embalado como um módulo de objeto reutilizável. · O sistema de pontuação do quebra-cabeça foi melhorado, e um bug que causou a bifurcação precoce foi corrigido.


Um Solver Sudoku em C Software Relacionado

Mekhangar.

Mekhangar é uma coleção de ferramentas para criar, editar e gerenciar unidades para Battletech, um sci-fi shabewame para 2 jogadores. ...

182

Download

Xbomb.

Xbomb Project é um jogo de minesweeper com grades triangulares, quadradas e hexagonais. ...

315

Download