function L = candidate_list(A, r, c) % generates the candidates for the cell A[r,c] r1 = A(r,:); c1 = A(:,c); s1 = r1(r1 ~= 0); s2 = c1(c1 ~= 0); L = setdiff(1:size(A,1), union(s1,s2)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function out = DFS_search(Board) [r,c] = first_zero_row(Board); if (r ~= 0) L = candidate_list(Board, r, c); while size(L)~= 0 Board(r,c) = L(1); L = L(2:end); out = DFS_search(Board); [r1,c1] = first_zero_row(out); if r1 == 0 return; else Board(r,c) = 0; end; end; end; out= Board; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [r,c] = first_zero_row(A) % outputs the first row that contains a zero entry % returns 0 if there is no such row r = 1; while r <= size(A,1) if sum(A(r,:)==0) > 0 temp = find(A(r,:)==0); c = temp(1); return; else r = r + 1; end; end; r = 0; c = 0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case 1: ___________________________________________________________ 1 0 0 2 3 0 0 4 2 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 1 3 0 5 0 1 0 0 0 0 Solution: 1 5 4 2 3 6 5 4 2 1 6 3 2 6 3 5 1 4 4 3 5 6 2 1 6 2 1 3 4 5 3 1 6 4 5 2 ____________________________________________________________ case 2: 0 1 0 0 0 2 3 4 0 5 0 0 6 7 8 0 0 0 0 9 0 0 0 4 0 0 5 0 0 0 0 4 1 0 0 0 0 10 2 0 0 0 0 0 1 0 0 2 0 0 0 10 0 0 0 0 0 0 0 2 10 0 7 3 9 0 0 6 1 4 4 2 0 9 0 5 0 0 0 6 0 8 0 10 0 0 7 1 0 0 Solution: 6 1 9 8 7 2 3 4 10 5 2 3 6 7 8 1 10 5 4 9 1 6 2 4 3 7 5 8 9 10 7 4 1 6 5 3 9 10 2 8 3 9 10 5 1 6 4 2 8 7 8 10 3 1 4 9 6 7 5 2 10 5 7 3 9 8 2 6 1 4 4 2 8 9 10 5 1 3 7 6 9 8 5 10 2 4 7 1 6 3 5 7 4 2 6 10 8 9 3 1 _____________________________________________________________