Le prb de huit dames

Fermé
fatouna1 - 17 avril 2009 à 21:15
 info - 18 avril 2009 à 11:25
Bonjour,
cas urgent
si quelqu'un a une solution pour ce prb j'espére bi1 q'il m'aide
ecrire un algo permet d'afficher les positions et le nbre de solutions pour le prb de huit dames

2 réponses

J'est dja lu 7 question, il n'y a pa tré lontan... é je ferè la même réponse.
Va sur Web, le pb é dja tréT.
a+
0
program huit_dames;
uses wincrt;

type
tab1 = array[1..4] of integer;
tab2 = array[1..4] of boolean;
tab3 = array[1..7] of boolean;

var
ligne:tab1;
colonne:tab2;
diag_g,diag_d:tab3;
trouve:boolean;

procedure init(var col:tab2;var dg,dd:tab3);
var
i:integer;
begin
write('Dame de 4 :');readln;
for i:= 1 to 4 do
col[i]:=true;

for i:= 1 to 7 do
begin
dg[i]:=true;
dd[i]:=true;
end;
end;

procedure placer_dame(var trouve:boolean;num_lig:integer;var ligne:tab1;var col:tab2;var dg,dd:tab3);
var
c:integer;

begin
c:=0;
repeat
c:=c+1;
if (col[c]=true) and (dg[num_lig + c -1] = true) and (dd[num_lig - c +4] = true) then
begin
ligne[num_lig]:=c;
col[c]:=false;
dg[num_lig + c -1]:=false;
dd[num_lig - c +4]:=false;

if num_lig < 4 then
placer_dame(trouve,num_lig+1,ligne,col,dg,dd)
else trouve := true;

col[c]:=true;
dg[num_lig + c -1]:=true;
dd[num_lig - c +4]:=true;
end;
until (trouve = true) or ( c = 4);
end;


procedure affichage(linge : tab1);
var
i,j:integer;
begin
clrscr;

writeln('--------- ');
for i := 1 to 4 do
begin

write('|');
for j := 1 to 4 do
begin

if ligne[i]=j then write('*|')
else write(' |');

end;writeln;
end;


end;

BEGIN
init(colonne,diag_g,diag_d);
trouve:=false;
placer_dame(trouve,1,ligne,colonne,diag_g,diag_d);
if trouve then affichage(ligne);
END.


POUR n = 4
pour huit modifier 4 par 8 et 7 par 15= 2*n-1
0