grid_on

Sudoku Clean

技巧文檔 / 西尾強制鏈

西尾強制鏈

> 前置知識:[鏈的基礎](learning://chains)

高階

西尾強制鏈

前置知識:鏈的基礎

描述

西尾強制鏈(Nishio Forcing Chain)是一種“反證刪數”的技巧。

當你看到某個候選看起來“很可疑”,但又沒法用普通技巧直接刪掉它時,可以這樣做:

  1. 選定一個要檢驗的候選(紅色)
  2. 先假設它為真
  3. 用一連串“必須如此”的推理,把真假一路傳下去(藍色=被迫為真,黃色=被迫為假)
  4. 如果最終推到矛盾(比如某一行裏某個數字完全沒有位置可填)
    ⇒ 説明最開始的假設不成立
    ⇒ 這個候選就可以刪除

詳解

西尾強制鏈(詳解)

先看上圖:紅色要刪除的是 r1c3 中的候選數字 5
我們先做反證:假設 r1c3 = 5 為真。

接下來沿着鏈推理:

  • 藍色候選:在這個假設下,被迫為真
  • 黃色候選:在這個假設下,被迫為假

你不需要一開始就把每一步都算清楚,只要抓住最終的矛盾點即可:

在上圖中,推理最後會把 第 1 行裏所有的候選數字 7 都排除掉,也就是“第 1 行沒有 7 可以填”。
但數獨裏每一行都必須出現 1~9,因此這就是矛盾。

所以,最開始的假設 r1c3 = 5 不可能成立:
r1c3 中的候選數字 5 可以刪除


例子

下面兩張圖是其它西尾強制鏈的例子,你可以先按這個順序觀察: 紅色起點(假設為真)→ 藍黃推導(真/假傳導)→ 最終矛盾 → 回頭刪紅色候選

西尾強制鏈(例子 A)

西尾強制鏈(例子 B)


如何尋找西尾強制鏈?

一句話:當你卡住時,挑一個關鍵候選做“反證”,看它會不會迅速推到矛盾。

在遊戲裏你可以按這個順序嘗試:

  1. 優先挑“牽一髮而動全身”的候選:雙值格、共軛對附近的候選
  2. 假設它為真,然後只做確定性推理(能確定真/假就繼續)
  3. 一旦出現矛盾(某格無候選 / 某行列宮某數字無處可放)
    ⇒ 這個起點候選就可以刪掉