WebブラウザとJavaScriptで数独を解く

Posted by
ぴろり
Posted at
2006/04/12 21:21
Trackbacks
関連記事 (0)
Comments
コメント (2)
Post Comment
コメントできます
Category
電算室
 数独とは、 3×3 のブロックに区切られた 9×9 の正方形の枠内に、それぞれ縦・横・ブロックで同じ数字が被らないように、 1〜9 までの数字を入れるの一つです。 "アメリカでがんばりましょう"で、 数独を解く C プログラムが紹介されていましたが、今回、これを で動作するよう で作ってみました。
この記事をはてなブックマークに追加する この記事のはてなブックマーク数 | この記事をlivedoorクリップに追加する この記事のlivedoorクリップ数 | この記事をYahooブックマークに追加する この記事のYahoo!ブックマーク数 | この記事をdel.icio.usに追加する

、Netscape、Opera をお使いの場合、解決の過程が見えて幸せになれます。 IE をお使いの場合、プログラムを開始すると解決するまで途中経過が見えません。

プログラムの仕組み

 コンピュータパワーに任せて総当り というのもアリかも知れませんが、できるだけ人間が解く手順と同じようにプログラム化してみました。

上のは総当り方式ですが、普通に遅いです(^^;

 処理の最適化などはほとんど考えていないので、無駄な走査が多々あると思います。 見通しはそれほど悪くないと思うので、興味のある方は改造してみてください。
solve_init
空いているマスに数字候補として (1)〜(9) を入れます(setCandidate)
solve_step1
行・列・ブロックを見て、確定している数字があった場合、それを数字候補から除きます(clearCandidate)
solve_step2
行・列・ブロックを見て、数字候補が一つしかない場合、そのマスの数字が確定されます
solve_step3
ある数字候補が、注目したブロックの一つの行あるいは列にだけ存在する場合、 他ブロックのそれと同じ行あるいは列にあるその数字候補を除きます
solve_step4
あるマスに数字候補を仮定しながら再帰的に処理を進めます。 最終的に全てのマスが埋まっても矛盾があった場合、手数を戻って次々と数字候補を使って処理を進めます。 深さ優先の再帰処理を行います。

いろいろ

更新履歴

  • 1.10 step4 をちょっぴり賢く
  • 1.00 初版公開

この記事を読んだ人はこんな記事も読んでいます ?

その他の関連する記事


関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事のトラックバック URL

寄せられたコメント (最新 5 件を表示しています)

Posted by
ぴろり
at
2006/04/14 12:18
ID
ldhcyOq.

ver.1.10 に置き換え(=゚ω゚)ノ
組み合わせ爆発してなかなか解けないケースが減った…ハズ

Posted by
ぴろり
at
2006/04/13 10:35
ID
HgFhHtss

solve_step4 で、何も考えずに x,y の小さいところの未確定マスから総当りを開始しているけれど、数字候補の数が最も少ないところを探して、そこから総当りを始める方が解決するのは早いね。

コメントを投稿する

 (必須/公開)
 (必須/非公開)
 

コメントスパム防止のため投稿前に ランダムな数字 ? を入力してから投稿してください。 お手数ですがご協力のほど宜しくお願いいたします。(必須)