还是要自己想办法啊,本人写了一个,有兴趣的可以参考一下,以验证过,绝对正确

function B=shudu(A)
%计算数独的程序。
%0表示待填的空格
%例子
%A=[2 0 0 0 9 0 0 0 7;
%   0 0 0 0 6 3 0 0 9;
%   0 0 9 1 0 5 0 0 0;
%   3 0 8 0 0 6 2 0 1;
%   0 0 1 0 0 0 3 0 0;
%   7 0 5 3 0 0 4 0 8;
%   0 0 0 6 0 9 5 0 0;
%   1 0 0 2 4 0 0 0 0;
%   6 0 0 0 3 0 0 0 4];
%shudu(A)
%ans =
%   2 3 6 8 9 4 1 5 7
%   5 1 4 7 6 3 8 2 9
%   8 7 9 1 2 5 6 4 3
%   3 4 8 9 5 6 2 7 1
%   9 2 1 4 8 7 3 6 5
%   7 6 5 3 1 2 4 9 8
%   4 8 3 6 7 9 5 1 2
%   1 5 7 2 4 8 9 3 6
%   6 9 2 5 3 1 7 8 4
%如果出现超过RecursionLimit最大限制的情况,请适当增加RecursionLimit的阈值
%方法是set(0,'RecursionLimit',N),N就是新设的值。
[a,b]=find(A==0,1);%找0,只要一个就可以了。
if isempty(a)%如果没有0,就说明填满了,这就是答案。
    B=A;
else%如果有0,就列出第一个0的所有可能取值。
    I=[];
    t=1:9;
    for j=1:9
        if A(a,j)~=0
            t(A(a,j))=0;            
        end
        if A(j,b)~=0
            t(A(j,b))=0;            
        end        
    end
    for j=(ceil(a/3)*3-2)

ceil(a/3)*3)
        for k=(ceil(b/3)*3-2)

ceil(b/3)*3)
            if A(j,k)~=0
                t(A(j,k))=0;
            end
        end
    end    
    I=find(t~=0);
    if isempty(I)%如果没有可能项,说明矛盾。
        B=[];
    else%否则将可能项一个个代入,递归。
        for j=1:length(I)
            C=A;C(a,b)=I(j);
            B=shudu(C);
            if ~isempty(B);
                return;
            end
        end
    end
end