grid_on

Sudoku Clean

技巧文檔 / XY鏈

XY鏈

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

高階

XY鏈

前置知識:鏈的基礎


1. 描述

XY鏈(也常寫作 XY-Chain)是一種“只用雙值格”的鏈技巧。

它和 X鏈 不同點在於:

  • X鏈:只盯一個數字 d,鏈上的節點都是 “d 的候選”
  • XY鏈:只盯“雙值格”,鏈會在不同數字之間來回切換

直覺上你可以把它理解成一句話:

雙值格里兩數必有其一,再配合“同行/同列/同宮同數互斥”,就能把推理一路傳下去。

當鏈的兩端碰巧是同一個數字(例如都是候選 2),那麼任何一個能同時看見兩端的候選 2,都可以被刪除。


2. 詳解

XY鏈 詳解示例

先看上圖:藍色格子是鏈的兩端,目標數字是 2

  • 起點:r1c7 中的候選 2
  • 終點:r8c6 中的候選 2
  • 刪數點:r8c7 中的候選 2(紅色)

為什麼 r8c7 的 2 能刪?我們用一個很短的反證就夠了:

  1. 假設紅色候選 r8c7 = 2 為真
  2. 因為 r8c7 能同時看見兩端點:
    • 同一列衝突 ⇒ r1c7 不能是 2
    • 同一行衝突 ⇒ r8c6 不能是 2
  3. 但注意:這條鏈把 r1c7 的 2r8c6 的 2 連接起來了
    在“只由雙值格組成”的鏈裏,一端為假會把真假一路傳導,最終迫使另一端為真
    ⇒ 所以 r1c7 不是 2 會推出 r8c6 必須是 2
  4. 這就和第 2 步的結論“r8c6 不能是 2”直接衝突(矛盾)

所以假設不成立:r8c7 不可能是 2,候選數字 2 可以刪除。


3. 例子

下面兩張圖是其它 XY鏈 的例子。你可以先不急着逐段推理,先學會抓住三個關鍵點:

  • 藍色端點(鏈的兩端)
  • 一條由雙值格串起來的路徑
  • 紅色刪數點(通常能同時看見兩端點)

XY鏈 示例 A

XY鏈 示例 B


4. 如何尋找 XY鏈?

一句話:先找一串能首尾相接的雙值格,再看鏈的兩端是否落在同一個數字 d 上;若有某個候選 d 能同時看見兩端,就可以刪掉它。

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

  1. 先從一個雙值格開始(只有 2 個候選)
  2. 用“同數互斥”(同一行/列/宮)把鏈接到下一個雙值格
  3. 在每個雙值格里,用“二選一必有其一”(格內強關係)把推理繼續傳下去
  4. 如果最後能回到同一個數字 d,並出現一個候選 d 同時看見鏈兩端,那它就是常見的刪數點