Skip to content

Метод решения судоку Forcing Chains

В методе Forcing Chains из Предположения по нескольким цепочкам приводящих к Следствию, можно сделать вывод.

Предположение -(по цепочкам)-> Следствие => Вывод


Определение и описание одной Цепочки / Chain


Варианты Forcing Chains:

  1. (Предположение - Единственное значение) => Ошибка. Это значит, что Предположение - неверно.
  2. (Предположение - Полное множество, включающее правильный ответ) => Единственное значение (Решение). Это значит, что Предположение - верно.
  3. (Предположение - Полное множество, включающее правильный ответ) => Несколько Решений, исключающие другие варианты. Это значит, что другие варианты являются неправильными.

Единственное предположение

  1. NodeTruth (Узел-Истинности): NodeTrue (Узел-Истина) или NodeFalse (Узел-Ложь)

Предположение: Полное множество

  1. Node (Узел) - Полное множество: NodeTrue, NodeFalse
  2. Cell (Ячейка) - Полное множество: NodeTrue для всех кандидатов в Ячейке
  3. Sector (Сектор) - Полное множество: NodeTrue для всех кандидатов одной цифры в Сектое

Предположения

Предположения - Источники цепочек.

Варианты:

  1. Единственный источник - Узел-Истинности (Ложь или Истина)
  2. Полное множество значений, включающее в себя правильное.

Варианты полных множеств:

  1. Узел: Узел-Ложь, Узел-Истина
  2. Ячейка: Узлы-Истины для каждого кандидата
  3. Сектор: Узлы-Истины для каждого кандидата одной любой цифры

Предположение 1. Узел-Истинности / NodeTruth

fc-source-nodestruth-010x100Рис. 1. Forcing chains: Предположение Узел-Ложь или Узел-Истина

Источником цепочек может быть Узел-Истинности (Узел-кандидат в конкретном значении Истина или Ложь)

Предположение 2. Узел / Node (NodeTrue и NodeFalse)

fc-source-node-010x50Рис. 2. Forcing chains: Предположение Узел

Источником цепочек может быть Узел-кандидат во всех возможных значениях, т.е. Истина и Ложь

Предположение 3. Кандидат в Секторе

fc-source-nodestrue-sector-010-x300Рис. 3. Forcing chains: Предположение Узлы-Истина одной цифры в секторе

Источником цепочек могут быть все возможные Узлы-кандидаты одной цифры в значении Истина. Это множество обязательно будет включать правильный узел.

Заключения

Возможные варианты окончания цепочек, на основе которых можно сделать вывод о предположении.

Заключение 1. Узел-Истинности.

fc-source-nodestruth-010x100Рис. 4. Forcing chains: Заключение Узел-Истинности (Ложь или Истина)

Если все возможные варианты, включающие правильны ответ приводят к одному Узлу-истинности.

Заключение 2. Несколько Узлов-Истин во множестве возможных

fc-desc-some-nodestrue-sector-010-x300Рис. 5. Forcing chains: Заключение Несколько Узлов-Истина одной цифры в секторе

Несколько Узлов-Истин в Секторе для одной цифры или в Ячейке для разных цифр

Заключение 3. Все Узлы-Ложь во множестве возможных

fc-desc-nodesfalse-sector-010-x300Рис. 6. Forcing chains: Заключение Все Узлы-Ложь одной цифры в секторе

Ошибочное заключение. Если какое-нибудь предположение приводит к таком Ошибочному заключению, то предположение неверно.

Заключение 4. Deadly Pattern

Если Узел-Истинности приводит к Узлам-Истины, образующие Deadly Pattern, то такой Узел-Истинности неверный.

Forcing chains: NodeTruth-Node

Первый пример из Узла-Истина

Две цепочки из Узла-Истины ко всем возможным Состояниям Узла (Истина и Ложь)

  1. {1}@E2-{!1}@E1;
  2. {1}@E2-{!1}@E4={1}@H4-{!1}@H1={1}@E1

fc-nodetrue-node-010-x300Рис. 7. Forcing chains: NodeTrue-Node

Forcing chains:NodeTruth-Node {1}@E2-{!1}@E1; {1}@E2-{!1}@E4={1}@H4-{!1}@H1={1}@E1 remove: {1}@E2


Второй пример из Узла-Ложь

Две цепочки из Узла-Ложь ко всем возможным Состояниям Узла (Истина и Ложь)

  1. {!6}@A5={6}@A7;
  2. {!6}@A5={6}@K5={!5}@K5={5}@K3={!3}@K3={3}@D3-{!3}@D7={3}@A7-{!6}@A7

fc-nodefalse-node-010-x300Рис. 8. Forcing chains: NodeFalse-Node

Forcing chains:NodeTruth-Node {!6}@A5={6}@A7; {!6}@A5={6}@K5={!5}@K5={5}@K3={!3}@K3={3}@D3-{!3}@D7={3}@A7-{!6}@A7 digits: {6}@A5

Forcing chains: NodeTruth-NodesFalseInCell

fc-nodetruth-nodesfalseincell-010-x300Рис. 9. Forcing chains: NodeTruth-NodesFalseInCell

Цепочки из Узла-Истина ко всем возможным Узлам-Ложь в Ячейке. Т.е. в ячейке ничего не остается, это ошибочная ситуация, поэтому предположение неверное.

  1. {3}@B6-{!3}@F6;
  2. {3}@B6-{!3}@G6={1}@G6={!1}@F6;
  3. {3}@B6-{!3}@B3={3}@C2={!3}@F2={6}@F2-{!6}@F6

Forcing chains:NodeTruth-NodesFalseInCell {3}@B6-{!3}@F6; {3}@B6-{!3}@G6={1}@G6={!1}@F6; {3}@B6-{!3}@B3={3}@C2={!3}@F2={6}@F2-{!6}@F6 remove: {3}@B6

fc-nodetruth-nodesfalseincell-020-x300Рис. 10. Forcing chains: NodeTruth-NodesFalseInCell

Цепочки из Узла-Истина ко всем возможным Узлам-Ложь в Ячейке. Т.е. в ячейке ничего не остается, это ошибочная ситуация, поэтому предположение неверное.

  1. {4}@F7-{!4}@F4;
  2. {4}@F7-{!4}@F6={9}@F6-{!9}@F4;
  3. {4}@F7-{!4}@DE9={4}@G9-{!3}@G9={3}@G4-{!3}@F4

Forcing chains:NodeTruth-NodesFalseInCell {4}@F7-{!4}@F4; {4}@F7-{!4}@F6={9}@F6-{!9}@F4; {4}@F7-{!4}@DE9={4}@G9-{!3}@G9={3}@G4-{!3}@F4 remove: {4}@F7

Forcing chains: NodeTrue-All NodesFalse

fc-nodetrue-all-nodesfalse-010-x300Рис. 11. Forcing chains: Узел-Истина -> Все Узлы-Ложь одной цифры в секторе

Если цепочки из одного Node-True приводят ко всем всевозможным Узлам-False, то такое предположение неверно.

Forcing chains: NodeTrue-Some NodesTrue

fc-nodetrue-some-nodestrue-010-x300Рис. 12. Forcing chains: Узел-Истина -> Несколько взаимоисключающихся Узлов-Истина

Если цепочки из одного Node-True приводят к нескольким взаимоисключающим Узлам-True, то такое предположение неверно.

Forcing chains: Node-NodeTruth

Если цепочки из всех значений (Истина/Ложь) Узла (Node) приводят к одному Узлу-Истинности, то этот Узел-истинности - правильное решение.

Forcing chains: Cell-NodeTruth

Если от каждого Узла-Истины в Ячейке есть цепочка, указывающая на один Узел-Истинности, то это Состояние для Узла можно принимать за правильное.

forcing-chains-cell-digit-010-x300Рис. 13. Forcing chains: Cell-Digit

Forcing chains: Cell-Digit

  • {2}@K6={!2}@K1={9}@K1-{!9}@K3;
  • {4}@K6-{!4}@C6={9}@C6-{!9}@B5={9}@B3-{!9}@K3;
  • {9}@K6-{!9}@K3 remove: {9}@K3

Рассмотрим приведенный выше пример. В ячейке K6 есть три узла {246}@K6. Для каждого из этих Узлов-Истины есть цепочка, которая приводит к одному Узлу-Ложь. Так как цепочки рассматривают все возможные варианты в ячейке K6, значит {9}@K3 будет Ложь. Убираем этого кандидата.

Forcing chains: Sector-NodeTruth

Если от каждого Узла-Истины одного кандидата в Секторе есть цепочка, указывающая на один Узел-Истинности, то это Состояние для Узла можно принимать за правильное.

forcing-chains-sector-digit-010-x300Рис. 14. Forcing chains: Sector-Digit

Forcing chains: Sector-Digit from: RowF

  • {3}@F3-{!3}@D1={3}@H1-{!3}@H8;
  • {3}@F6={!3}@DE4={3}@H4-{!3}@H8;
  • {3}@F8-{!3}@H8 remove: {3}@H8

Рассмотрим приведенный выше пример. В Строке F есть 3 Узла для кандидата 3. Для каждого Узла-Истины есть цепочка, которая приводит к одному Узлу-Ложь. Так как цепочки рассматривают все возможные варианты 3 в Строке F, значит {3}@H8 будет Ложь. Убираем этого кандидата.

Forcing chains: Sector-Cell

fc-sector-cell-010-x300Рис. 15. Forcing chains: Sector-Cell

От всех Узлов 3 в Столбце 4 идут цепочки к нескольким Узлам-Истины в ячейке E8:

  1. {3}@A4-{!3}@A8={3}@E8;
  2. {3}@C4-{!5}@C4={5}@C5-{!5}@E5={5}@E8;
  3. {3}@F4-{!3}@E6={3}@E8

Forcing chains:Sector-Cell {3}@A4-{!3}@A8={3}@E8; {3}@C4-{!5}@C4={5}@C5-{!5}@E5={5}@E8; {3}@F4-{!3}@E6={3}@E8 from: Col4 remove: {6}@E8,{8}@E8

Forcing chains: Cell-Cell

Forcing chains: Sector-Sector