function [aa,flag] = nine_cal(a,m,n,data)
flag_err = 0;
[m1,n1] = size(a);
if (m1 ~= 9) & (n1~=9)
flag_err = 1;
end
a1 = a;
a1(m,n) = data;
%a1(1,1) = 4;
%heng same
for i = 1:9
for j = 1:8
for k = (j+1):9
if (a1(i,j) == a1(i,k)) & (a1(i,j) ~= 0)
flag_err = 1;
break;
end
end
if flag_err == 1
break;
end
end
if flag_err == 1
break;
end
end
%shu same
for i = 1:9
for j = 1:8
for k = (j+1):9
if (a1(j,i) == a1(k,i)) & (a1(j,i) ~= 0)
flag_err = 1;
break;
end
end
if flag_err == 1
break;
end
end
if flag_err == 1
break;
end
end
%nine same
m1 = 1;
n1 = 1;
for i = 1:3
for j = 1:3
n1 = 1;
for k = 0:2
for l = 0:2
a2(m1,n1) = a1(i*3-k,j*3-l);
n1 = n1 + 1;
end
end
for k = 1:8
for l = (k+1):9
if (a2(m1,k) == a2(m1,l)) & (a2(m1,k) ~= 0)
flag_err = 1;
break;
end
end
if flag_err == 1
break;
end
end
m1 = m1 + 1;
if flag_err == 1
break;
end
end
if flag_err == 1
break;
end
end
%flag_err = 0;
for i = 1:9
if flag_err == 1
break;
end
for j = 1:9
if flag_err == 1
break;
end
if a1(i,j) == 0
%heng cal
a3 = zeros(1,9);
for k = 1:9
for l = 1:9
if k == a1(i,l)
a3(k) = k;
end
end
end
%num_a3 = num_a3 - 1;
%shu cal
for k = 1:9
for l = 1:9
if k == a1(l,j)
a3(k) = k;
end
end
end
%nine cal
for k = 1:9
for l = 1:9
if k == a2((ceil(j/3)+(ceil(i/3)-1)*3),l)
a3(k) = k;
end
end
end
%
l = 0;
for k = 1:9
if a3(k) == 0
l = 1;
[a1,flag_err] = nine_cal(a1,i,j,k);
if flag_err == 0
break;
end
end
end
if l == 0
flag_err = 1;
break;
end
end
end
end
if flag_err == 1
flag = 1;
aa = a;
elseif flag_err == 0
flag = 0;
aa = a1;
end