GNPX v5- の リンクの表記、クラス、アルゴリズムなどの概要(ヒント)を示します。正確な理解は、GNPX のコードを読み解くことが必要です。
なお、整理途上であり、一貫性が完成していません。

 eNetwork

 (1) ULogical_Node

eNetworkにおける基本要素のクラスです。セルおよびセル群の"位置・数字・状態(肯定または否定)"の属性を持ちます。

 (2) eNetwork_Node

 (3) eNetwork_Link

-

 (4) GNPX v6- の ノード、リンクの実装

数独の1局面の解析中は、ノードは属性値を動的に管理します
確定したノードにリンクが接続すると、終端側ノードの状態属性値が確定し(+/-)、ノードをリスト(peNetwork_NodeList)に登録します。
ネットワークの探索で、複数経路でノードの状態属性値(+/-)が決まるとき、属性値が同じならその先の探索は省略できます。 不一致の場合は矛盾であり、前提となる命題は偽(false)です。
複数経路を処理するために、リンクの両端のノードは状態属性を持たず、ネットワークのノードの状態属性を別途管理する方法を 採用しました。 (これはGNPXの実装方法です。別の方法もあります。)

 (5) ネットワーク探索

起点となるノードの状態属性が定まると、これに接続するリンクを延長して、さらに延長して、... ネットワークができます。 このネットワークによって Locked が形成されることがあります。すなわち、数独解析アルゴリズムです。
ネットワーク探索には、放射型とループ型の2つのタイプがあります。

    放射型ネットワーク探索アルゴリズム:
  1. 起点となるノードに接続する全てのリンクについて、終端側のノードの状態属性を求める。
  2. ノードが未登録なら、ノードと状態属性に登録する。また、次探索Queueに登録する。
  3. ノードが登録済みで、状態属性が一致するなら、何もしない。
  4. ノードが登録済みで、状態属性が不一致なら、"矛盾" 発見で終了する。
  5. 目標とするノードに達したら、あるいはQueueが空なら、終了する。
    そうでないなら、Queueからノードを取り出し 1 から繰り返す。
ループ型ネットワーク探索は、探索開始時の処理を、”全リンク”から ”1リンク” に変更します。 ループ形成のための空きを作っておきます。2リンク目以降は、ノードに接続する全リンクを探索します。

Radial Search Loop Search



Top