The AC-3 Algorithm
AC-3 repeatedly revises arcs until no domain changes or a 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 | r5c5 | 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 |
queue = every directed peer arc
while queue is not empty:
(Xi, Xj) = remove an arc
if REVISE(Xi, Xj):
if D(Xi) is empty: fail
add (Xk, Xi) for other neighbors Xk
Sudoku trace
Propagation establishes D(r5c5)={5}. Revising neighboring arcs removes 5 from peers: r5c2:{2,5}→{2} and r7c5:{3,5}→{3}. Because those domains changed, their incoming arcs return to the queue.
Why the queue matters
A deletion can create a new singleton, which can cause more deletions. AC-3 continues until this cascade reaches a fixed point.
Trace: After r5c2 becomes {2}, list its row, column, and box peers whose domains must be reconsidered.