数独の平凡な解法(C言語) 投稿日時: 2011年7月10日 投稿者: inquisitor 数独の解き方をいくつか紹介したことがあります。 Mathematicaなら10行 一般的な探索手法の適用(Mathematica) 一般的な探索手法の適用(C++) SQLなら1行 困ったことに、「どれも変態でわかりにくい、ふざけんな」という批判を受けたので、みんな大好きC言語で、平凡に書いてみました(実行結果)。 数独の平凡な解法(Mathematica) Related posts: プログラマの道具箱(深さ優先探索と幅優先探索) C++編 プログラマの道具箱(深さ優先探索と幅優先探索) Mathematica編 数独で見るRuby(とMathematica)のパワーと表現力 SQLによる数独の解法 #deim2010
数独プログラムの作成を楽しんでいます。C言語での解法プログラムをJavaで試してみました。シンプルで美しいプログラムですね。驚きです。解のない、あるいは解が複数ありの問題はいずれも数独の問題としては不適切ですが、解がない場合は表示なし。解が複数ありの場合は、そのうちの一つを表示する仕様ですね。 48行目のboard[newPos]=0が要点です。参考になりました。ありがとうございます。
コメントありがとうございます。まだ試していませんが、複数の解答がある場合は仮に置く数字の順序で検出できると考えています。たとえば、順に数字を置いた場合と逆順に置いた場合、答えが一致しなければ、複数解答があることになります。 いずれにしてもプログラムのシンプルさが魅力です。 48行目の補足 最初、この行は46行目で数字を上書きするので不要かと思いました。 その前の45行目でboardを使用しており、このために必要ですね。
数独プログラムの作成を楽しんでいます。C言語での解法プログラムをJavaで試してみました。シンプルで美しいプログラムですね。驚きです。解のない、あるいは解が複数ありの問題はいずれも数独の問題としては不適切ですが、解がない場合は表示なし。解が複数ありの場合は、そのうちの一つを表示する仕様ですね。
48行目のboard[newPos]=0が要点です。参考になりました。ありがとうございます。
owakiさん
そうですね、数独の問題として不適切な場合に対応するためには、もう少しコードが必要ですね。
コメントありがとうございます。まだ試していませんが、複数の解答がある場合は仮に置く数字の順序で検出できると考えています。たとえば、順に数字を置いた場合と逆順に置いた場合、答えが一致しなければ、複数解答があることになります。
いずれにしてもプログラムのシンプルさが魅力です。
48行目の補足
最初、この行は46行目で数字を上書きするので不要かと思いました。
その前の45行目でboardを使用しており、このために必要ですね。