5
Thuật toán quay lui và ứng dụng Lã Văn Chinh Giả thiết một cấu hình cần tìmđược mô tả bởi một bộ phận gồm n thành phần a1, a2,... an. Giả sử tìm được i -1 thành phần a1, a2, ai-1, ta tìm thành phần thứ i bằng cách duyệt tất cả cáckhả năng có thể của ai. Với mỗi khả năngj kiểm tra xem nó có chấp nhận được không. Xảy ra hai trường hợp. Nếu j chấo nhận được thì xác định ai theo j và kiểm tra xem i = n chưa, nếu i = n thì ta ghi nhận một cấu hình, còn nếu i < nta gọi tiến hành xác định ai+1 Nếu thử tất cả các khả năng mà không có khả năng nào chấp nhận được thì quay lại bước trước xác định lại ai-1 Nội dung của thuật toán này rấtphù hợp với việc gọi đệ quy. Ta có thủ tục đệ quy sau đây: Procedure Try (i:tinteger); Var j:integer; Begin For j:=1 to n do if chấp nhận j then begin xác nhận aj theo j if i=n then < ghi nhận cấu hình > else try(i+1); end;

[123doc.vn] - thuat-toan-quay-lui-va-ung-dung.doc

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).