Cell Forcing Chain Sudoku Technique
Updated
A cell forcing chain is a case split on one cell: try each of its candidates in turn, follow the singles each choice forces, and keep any placement or elimination that every branch reaches, because one of those candidates has to be the cell’s real value.
When a cell forcing chain applies
A Nishio forcing chain needs its assumption to fail, and many assumptions never do. A cell forcing chain asks for something different. A cell has to hold one of its candidates, so if every candidate leads to the same consequence, that consequence is guaranteed, and it does not matter which candidate is the true one.
The method is the same branch-following used by every forcing chain. Assume the first candidate and apply naked and hidden singles until nothing more follows. Do the same, starting from a clean board, for each of the other candidates. Then compare the branches. If one cell received the same digit in every branch, place it. If one candidate disappeared from a cell in every branch — because that cell was filled with something else, or because a peer took the digit — erase it.
Bivalue cells are the natural starting point, because two branches are much easier to keep track of than four. Suuudokuuu’s solver only reports a cell forcing chain when every branch stays consistent and the branches touch at least four cells.
Worked example
r1c3 holds only 3 and 4, so split on it. In the first branch r1c3 is 3. r1c5, which held 3 and 8, loses its 3 and becomes 8. The branch also forces r8c1 to 3, because with column 3 taken the bottom-left box has no other place for it. That placement plays no part in the conclusion, but the solver records every cell a branch fills, so r8c1 is highlighted too.
In the second branch r1c3 is 4. Row 2 can only take a 4 in r2c3 or r2c4, and r2c3 shares the top-left box with r1c3, so r2c4 must be 4. Now compare the two branches at r2c4. In the first it sits in the same box as the 8 in r1c5, so it cannot be 8. In the second it is filled with 4, so it is not 8 either. Both branches agree, and r2c4 loses the 8 for good, leaving 4, 6 and 7.
How to use a cell forcing chain
- Pick a cell with few candidatesStart with a bivalue cell, or a three-candidate cell if no pair gives a result. Fewer branches mean less to track.
- Follow each branch separatelyFor every candidate, assume it on a clean board and record each naked and hidden single it forces.
- Compare the branchesLook for a cell that gets the same digit in every branch, or a candidate that disappears from a cell in every branch.
- Apply only the shared resultPlace the common digit or erase the common candidate. Everything else from the branches is thrown away.
Common mistakes
- Skipping a candidate. A conclusion only holds if every candidate of the cell was followed; leaving one out turns the argument into a guess.
- Letting branches leak into each other. Each branch starts from the same board, so a placement made in the first branch must not be carried into the second.
- Keeping results that appear in only one branch. Only what every branch agrees on is proven.
- Starting with a four- or five-candidate cell. The work grows with every branch, and short chains are found far more often in bivalue cells.
Cell forcing chain FAQ
Can a cell forcing chain place a digit?
Yes. If every branch puts the same digit in the same cell, that digit is placed. The worked example here shows the other outcome, an elimination.
What happens if one branch reaches a contradiction?
Then that candidate is simply false, which is a Nishio forcing chain on its own. Suuudokuuu’s solver leaves that case to the Nishio and only reports cell forcing chains where every branch stays consistent.
How is a cell forcing chain different from a region forcing chain?
A cell forcing chain splits on the candidates of one cell. A region forcing chain splits on the cells where one digit can go inside a row, column or box.
Do I need to write the branches down?
On paper it helps a great deal. Many solvers mark each branch with a different colour, or work through one branch at a time on a copy of the grid.