1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
| program echec;
{comment placer 8 reines sur un
échiquier sans qu'elles soient en prise,
le programme fournit 92 solutions.
}
uses crt,drivers;
const
Faux=false;
Vrai=true;
type
echiquier=array[1..8,1..8] of boolean;
diagonale_1=array[-7..7] of boolean;
diagonale_2=array[2..16] of boolean;
line=array[1..8] of boolean;
var
press,flag_exit:boolean;
k:integer;r:string;event:tevent; mx,my:integer;d:byte;
procedure ecrire(Queen:echiquier);
var
l, i,j:integer;
c,d:byte;
begin
k:=k+1;
writeln;textbackground(2);textcolor(1);
gotoxy(30,10);writeln(' Solution Nø',k:3,' ');
gotoxy(60,13);textbackground(4);writeln(' Suivant > ');
for i:=1 to 8 do
begin gotoxy(28,12+i);
for j:=1 to 8 do
if Queen[i,j]=Vrai then
begin
if (i in[2,4,6,8]) and (j in [2,4,6,8])then
c:=5
else
c:=1;
if (i in[1,3,5,7]) and (j in [1,3,5,7])then
c:=5;
textbackground(c);textcolor(15);write(' ');
end
else
begin
if (i in[2,4,6,8]) and (j in [2,4,6,8])then
c:=5
else
c:=1;
if (i in[1,3,5,7]) and (j in [1,3,5,7])then
c:=5;
textbackground(c);write(' ');
end;
end;
delay(200);
repeat
initevents;
getmouseevent(event);
mx:=event.where.x; my:=event.where.y; inc(mx); inc(my);
if event.buttons=$01 then
if (my=13) and (mx in [60..71]) then
begin
gotoxy(60,13);textbackground(2);writeln(' Suivant > ');
delay(80);
exit;
end;
textbackground(2);textcolor(0);
if (d<60) and (d>0) then begin
gotoxy(d,24);write('DUT Info 1 (CSI)');
end;
if d=0 then
d:=60;
d:=d-1;delay(200);gotoxy(1,24);textbackground(2);clreol;
until ((my=13) and (mx in [60..71]));
end;{ecrire}
procedure placer(var diag1:diagonale_1;var diag2:diagonale_2;
var ligne:line;var reine:echiquier;
var j:integer);
var
i0,i:integer;
begin
if flag_exit then exit;
if j=9 then ecrire(reine)
else
for i0:=1 to 8 do
begin
i:=i0;
if(ligne[i]=Faux)and(diag1[i-j]=Faux)and(diag2[i+j]=Faux) then
begin
ligne[i]:=Vrai;
diag1[i-j]:=Vrai;
diag2[i+j]:=Vrai;
reine[i,j]:=Vrai;
j:=j+1;
placer(diag1,diag2,ligne,reine,j);
j:=j-1;
ligne[i]:=Faux;
diag1[i-j]:=Faux;
diag2[i+j]:=Faux;
reine[i,j]:=Faux;
end
end
end;{placer}
procedure Reines_8;
var
i,j:integer;
diag1:diagonale_1;
diag2:diagonale_2;
ligne:line;
reine:echiquier;
begin
for i:=1 to 8 do
begin
ligne[i]:=Faux;
for j:=1 to 8 do
begin
diag1[i-j]:=Faux;
diag2[i+j]:=Faux;
reine[i,j]:=Faux;
end
end;
j:=1;
k:=0;
placer(diag1,diag2,ligne,reine,j);
end;
begin d:=0;
clrscr;
Reines_8;
exit;
end. |
Partager