Forward Checking
Forward checking propagates a new assignment to its unassigned peers and stops immediately if any peer domain becomes empty.
| r1c15 | r1c23 | r1c3 | r1c4 | r1c57 | r1c6 | r1c7 | r1c8 | r1c9 |
| r2c16 | r2c2 | r2c3 | r2c41 | r2c59 | r2c65 | r2c7 | r2c8 | r2c9 |
| r3c1 | r3c29 | r3c38 | r3c4 | r3c5 | r3c6 | r3c7 | r3c86 | r3c9 |
| r4c18 | r4c2 | r4c3 | r4c4 | r4c56 | r4c6 | r4c7 | r4c8 | r4c93 |
| r5c14 | r5c2 | r5c3 | r5c48 | r5c55 | r5c63 | r5c7 | r5c8 | r5c91 |
| r6c17 | r6c2 | r6c3 | r6c4 | r6c52 | r6c6 | r6c7 | r6c8 | r6c96 |
| r7c1 | r7c26 | r7c3 | r7c4 | r7c5 | r7c6 | r7c72 | r7c88 | r7c9 |
| r8c1 | r8c2 | r8c3 | r8c44 | r8c51 | r8c69 | r8c7 | r8c8 | r8c95 |
| r9c1 | r9c2 | r9c3 | r9c4 | r9c58 | r9c6 | r9c7 | r9c87 | r9c99 |
Assign r5c5=5
Remove 5 from every unassigned peer:
r5c2:{2,5}→{2}r7c5:{3,5}→{3}r4c4:{5,7,9}→{7,9}r5c8:{2,5,9}→{2,9}
What forward checking misses
It updates direct peers of r5c5 but does not automatically propagate the newly forced r5c2=2 through all of r5c2's peers. That stronger cascade belongs to maintaining arc consistency.
Exercise: If assigning a digit empties one peer domain, why can the branch be rejected before choosing another cell?