m.s.dos |
05-01-2009 02:42 997561 |
Программа для решения простых Судоку (бесконечный цикл)
Всем привет. Пытался написать на pascal программу, решающую элементарное судоку. Но возникает бесконечный цикл. Не могу понять почему.
Код:
program sudoku4;
type shortstr=string[9];
var a,b,c,c_temp,c_temp2,co,d,e,i,j,ip,x,oldc:integer;
mas:array[1..9,1..9] of byte;
ef:array[1..162,0..9] of byte;
str:array[1..9] of shortstr;
rand:array[1..81] of byte;
label 1;
begin
randomize;
for i:=1 to 9 do readln(str[i]);
{preobrazovanie massiva}
for i:=1 to 9 do begin
for j:=1 to 9 do begin
val(str[i,j],mas[i,j],c);
end;
end;
ip:=1;
{sohranenie koordinat pustyh ya4eek}
for i:=1 to 9 do begin
for j:=1 to 9 do begin
if mas[i,j]=0 then begin ef[ip,0]:=i; ip:=ip+1; ef[ip,0]:=j; ip:=ip+1; end;
end;
end;
co:=(ip-1) div 2;
1:
for i:=co downto 0 do begin
{sozdanie massiva slu4aynyh 4isel}
c:= (ip-1) div 2;
for i:=1 to c do begin
rand[i]:=random(9)+1;
end;
d:=1;
writeln(' ');
for i:=1 to c do write(rand[i],' ');
writeln(' ');
for a:=1 to c do
begin
mas[ef[d,0],ef[d+1,0]]:=rand[a];
d:=d+2;
write(mas[ef[d,0],ef[d+1,0]]);
write('a=',a);
end;
c_temp:=c-1;
{zanosim polosy i,j dlya pustyh ya4eek v ef}
for i:=1 to ip-1 do
{esli stroka}
if i mod 2<>0 then
begin
for j:=1 to 9 do
ef[i,j]:=mas[ef[i,0],j];
end
{esli stolbec}
else
begin
for j:=1 to 9 do
ef[i,j]:=mas[j,ef[i,0]];
end;
{vyvod massiva ef na ekran}
writeln('ef');
for i:=1 to ip-1 do begin
for j:=0 to 9 do begin
write(ef[i,j]);
end;
writeln;
end;
c:=(ip-1) div 2;
writeln('c=',c);
co:=c;
writeln('xxx=',mas[ef[1,0],ef[2,0]]);
{proverka na sovpadeniya v stroke/stolbce}
for x:=1 to ip-1 do
begin
for i:=1 to 9 do
begin
a:=ef[x,i];
for j:=1 to 9 do
if (ef[x,j]=a)and(j<>i) then goto 1;
end;
end;
end;
{vyvod massiva mas na ekran}
writeln('');
for i:=1 to j do begin
for j:=1 to 9 do begin
write(mas[i,j]);
end;
writeln;
end;
readln;
end.
|