2009年8月17日月曜日

(36) Ver.18 で大改造する。

 SUDOKU_Ver18 でプログラムの構成方法とマクロの組み立てを大幅に改変した。大きくは、探索方法の種類が増えたこと、その役割が何となくはっきりしてきたからである。

まず、 part_search_table を廃止して、 candy_table のみとする。流れとしては、(A) candy_table の後、P, M, S, Q, V, などのサーチをする。 (B) refine_candy_table の後の P, S, Mサーチ(PR,MRなど) (C) two_candidate_search (A サーチ ) といった流れとなる。

 数独の解法の過程を考えてみると、空白セルの数字を決定するのは、あくまでも基本サーチだけである。その他のサーチでは、「候補になる可能性がない」ことにより候補から外されるだけで、結果として、その影響により、他のセルの候補の数字が single candidate になり、基本サーチにより数字が決定される。つまり、基本サーチ以外の探索法では、candy_table を書き換えて、 refine_candy_table を作るだけのことである。このことは、マクロの書き方にも関係してくることである。今のやり方では、これまでに決定された数字を含めた A画面より candy_table が作られる。もし、refine_candy_table のあとの基本サーチでA 画面が変わらなければ、折角のサーチが無駄になってしまうのだ。

 もう一つの大きな改変は、candy_table を作るとき、各blockのなかで、空白セルの数字の数(anum) を探すやり方で candidate をさがしていた。新しいやり方では、数字(numb)を1から9まで回して candidate を決定する方法である。この方法の採用により、計算時間は大幅に短縮された。

0 件のコメント:

コメントを投稿