grid_on

Sudoku Clean

技巧文檔 / 起重機

起重機

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

高階

起重機

前置知識:鏈的基礎

描述

起重機是一種“刪候選”的單數短鏈技巧:只盯住一個數字 d

它和雙線風箏很像,區別在於:
雙線風箏是“宮裏那段是弱鏈”,而起重機是“宮裏那段是強鏈”。


詳解

起重機示例

先看上圖:目標數字是 6。鏈路是 r3c7 → r2c8 → r8c8 → r8c3,紅色是要刪除的 r3c3 中的候選 6,兩端用藍色標出。

為什麼能刪?看一個很短的反證就夠了:

  • 假設紅色候選 r3c3 = 6 為真
  • 同一行不能有兩個 6,所以 r3c7 ≠ 6
  • 在同一宮裏,6 只剩 r3c7r2c8 兩個位置:既然 r3c7 不是 6,那麼 r2c8 必須是 6(宮內強鏈)
  • 因為 r2c8 是 6,所以同一列裏的 r8c8 ≠ 6(弱鏈)
  • 在第 8 行裏,6 只剩 r8c8r8c3 兩個位置:既然 r8c8 不是 6,那麼 r8c3 必須是 6(行強鏈)
  • 可 r8c3 和 r3c3 在同一列,不可能同時為 6 → 矛盾

所以 r3c3 不可能是 6,紅色候選 6 可以刪除。


例子

下面兩張圖是更多起重機例子,你可以直接對照結構參考:

起重機示例 A

起重機示例 B


如何尋找起重機?

一句話:宮內強鏈 + 行/列強鏈,用一條同行/同列的弱鏈接成 L 形 → 刪兩端共視點

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

  1. 先選一個數字 d
  2. 找到一個宮:d 在宮裏只剩 2 個候選位置(宮內強鏈)
  3. 再找到一條行或列:d 在這條行/列裏也只剩 2 個候選位置(行/列強鏈)
  4. 看看這兩條強鏈是否能通過“同一行”或“同一列”連成 L 形(中間那段就是弱鏈)
  5. 剩下的兩個端點就是兩端:能同時看見兩端的位置,就是可刪的候選 d