Upload
chien-nguyen
View
218
Download
4
Embed Size (px)
Citation preview
Thut ton quay lui v ng dng
Thut ton quay lui v ng dng
L Vn ChinhGi thit mt cu hnh cn tmc m t bi mt b phn gm n thnh phn a1, a2,... an. Gi s tm c i -1 thnh phn a1, a2, ai-1, ta tm thnh phn th i bng cch duyt tt c cckh nng c th ca ai. Vi mi kh nngj kim tra xem n c chp nhn c khng. Xy ra hai trng hp.
Nu j cho nhn c th xc nh ai theo j v kim tra xem i = n cha, nu i = n th ta ghi nhn mt cu hnh, cn nu i < nta gi tin hnh xc nh ai+1
Nu th tt c cc kh nng m khng c kh nng no chp nhn c th quay li bc trc xc nh li ai-1
Ni dung ca thut ton ny rtph hp vi vic gi quy. Ta c th tc quy sau y:
Procedure Try (i:tinteger);
Var j:integer;
Begin
For j:=1 to n do
if chp nhn j then
begin
xc nhn aj theo j
if i=n then < ghi nhn cu hnh >
else try(i+1);
end;
end;
minh ho cho thut ton ny ta p dng gii bi ton xp hu:
Ni dung bi ton: Lit k tt c cc cch sp xp nhng con hu trn bn c NxN sao cho chng khng n c nhau.
Gii: Ta xp n con hu trn n dng, heo nguyn l nhn ta c nn cch sp xp tho mn iu kin u bi. lm iu ta dng th tc quy m t trn gii.Ta nh ghi s ct v dng ca bn c t 1 n n, mi cch sp xp ng vi 1 b gm a1,a2,.....,an viai = j (j=1,2,...,n) c ngha l con hu th i t vo ct j. Gi s ta chn c i-1 con hu bng cch duyt tt c cc kh nng ca n.
Quan trng nht l ta tm iu kin chp nhn j, mt con hu ng mt trong bn c n c nhiu nht bn hng i (ng dc, ng ngang v hai ng cho).
Vy iu kin chp nhn th i tho mn khng nm trn ng i ca tt c i-1 con hu xp.Bi v n con hu xp hng nn ng i ngang ca chng l khng chin nhau, do khi chn con hu th ich cn kim tra xem trn 2 ng cho v ng dc ca chng c chiu vo nhng con hu xp khng. kim tra iu ny mi ng ta dng mt bin trng thi.
* ng dc kim sot bng bin b[j],(j=1,2,...,n).
* Mt ng cho kim sot bng bin c[i+j],i+j={2,....,2n}.
* Cn ng cho kia kim sot bng bin d[i-j],i-j={1-n,....,n-1}.
Cc bin trng thi ny khi gn gi tr True trong th tc Init. Nh vy con hu th i c chpnhn xp vo ct j nu n tho mn c ba bin b[j],c[i+j],d[i-j] u c gi tr true.Cc bin ny gn gi tr False khi xp xong con hu th i, v tr li gi tr true sau khi gi Resulthay Try(i+1). Ta c chng trnh Pascal sau :
Program XepHau;
Uses crt;
var n : integer;
a:array[1..30] of integer;
b:array[1..30] of boolean;
c:array[2..60]of boolean;
count,d:word;
Procedure Init;
Var i:integer;
Begin
Write('Cho do rong ban co n= ');
Readln(n);
Count:=0; d:=0;
For i:=1 to n do b[i]:=true;
For i:=2 to 2*n do c[i]:=true;
For i:=1-n to n-1 do d[i]:=true;
End;
Procedure Result;
Var i:integer;
Begin
d:=d+1; count:=count+1;
Write('Cach xep th,count:5,'.');
for i:=1 to n do write(a[i]:2);
Writeln;
if d = 24 then
begin
readln; d : = 0;
end;
end;
Procedure try(i:integer);
Var j : integer;
Begin
For j:=1 to n do
If (b[j]) and (c[i + j]) and (d[i- j]) then
Begin
a [i] : = j;
b [j] : = false; c[i + j]: = false;
d [i] : = false;
if i = n then Result else try(i+1);
b [j] : = true; c[i + j]: = true;d[i + j]: = true;
end;
end;
begin
clrscr;
Init;
Try(1);
Write ('An Enter de ket thuc:');
Readln;
End.
hiu su sc thut ton ny, mi bn c lm mt s bi ton sau:
Bi 1: Hy vit chng trnh lit k tt c cc dy nh phn c di n.
Bi 2: Hy vit chng trnh lit k cc hon v ca {1,2,...,n}
Bi 3: Hy vit chng trnh lit k cc t hp chp m ca {1,2,...,n}
Bi 4: Hy vit chng trnh lit k tt c cc chu trnh Haminton ca th.
(Chu trnh bt u t nh v no qua tt c cc nh cn li, minh ng mt ln ri quay tr v nh v c gi l chu trnh Hamilton).