Professional Documents
Culture Documents
TTQUAYLUI
TTQUAYLUI
Thut ton quay lui dng gii bi ton lit k cc cu hnh. Mi cu hnh c xy dng
bng cch xy dng tng phn t, mi phn t c chn bng cch th tt c cc kh nng.
Gi thit cu hnh cn lit k c dng (x1, x2,..., xn). Khi thut ton quay lui thc hin qua cc
bc sau:
1) Xt tt c cc gi tr x1 c th nhn, th cho x1 nhn ln lt cc gi tr . Vi mi gi tr th
gn cho x1 ta s:
2) Xt tt c cc gi tr x2 c th nhn, li th cho x2 nhn ln lt cc gi tr . Vi mi gi tr
th gn cho x2 li xt tip cc kh nng chn x3 ... c tip tc nh vy n bc:
n) Xt tt c cc gi tr xn c th nhn, th cho xn nhn ln lt cc gi tr , thng bo cu hnh
tm c (x1, x2, ..., xn).
Trn phng din quy np, c th ni rng thut ton quay lui lit k cc cu hnh n phn t dng
(x1, x2, .., xn) bng cch th cho x1 nhn ln lt cc gi tr c th. Vi mi gi tr th gn cho x1 li
lit k tip cu hnh n - 1 phn t (x2, x3, ..., xn).
M hnh ca thut ton quay lui c th m t nh sau:
{Th tc ny th cho xi nhn ln lt cc gi tr m n c th nhn}
Try(1)
Try(2)
Try(3)
Try(2)
Try(3)
Try(3)
Try(3)
I. LIT K CC DY NH PHN DI N
Biu din dy nh phn di N di dng (x1, x2, ..., xn). Ta s lit k cc dy ny bng cch th
dng cc gi tr {0, 1} gn cho xi. Vi mi gi tr th gn cho xi li th cc gi tr c th gn cho
xi+1.Chng trnh lit k bng thut ton quay lui c th vit:
* Thut ton quay lui lit k cc dy nh phn di n program
BinaryStrings;
const
max = 30;
var
x: array[1..max] of Integer;
n: Integer;
procedure PrintResult;
{In cu hnh tm c, do th tc tm quy Try gi khi tm ra mt cu hnh}
var
i: Integer;
begin
for i := 1 to n do Write(x[i]);
WriteLn;
end;
procedure Try(i: Integer);
var
j: Integer;
begin
for j := 0 to 1 do
begin
x[i] := j;
if i = n then PrintResult
else Try(i + 1);
end;
end;
begin
Assign(Input, 'BSTR.INP'); Reset(Input);
Assign(Output, 'BSTR.OUT'); Rewrite(Output);
ReadLn(n);
{Nhpd liu}
Try(1);
{Th cc cch chn gi tr x1}
Close(Input);
Close(Output);
end.
x1 := 1
Try(2)
x2 := 0
Try(3)
x3 := 0
000
x3 := 1
001
Try(2)
x2 := 1
x2 := 0
Try(3)
x3 := 0
010
Try(3)
x3 := 1
011
x3 := 0
100
x2 := 1
Try(3)
x3 := 1
101
x3 := 0
x3 := 1
110
111
result
ARRANGES.OUT
1 2
1 3
2 1
2 3
3 1
3 2
{Th tc in cu hnh tm c}
var
i: Integer;
begin
for i := 1 to k do Write(x[i],' ');
WriteLn;
end;
procedure Try(i: Integer); {Th cc cch chn xi}
var
j: Integer;
begin
for j := 1 to n do
if c[j] then
{Ch xt nhng gi tr j cn t do}
begin
x[i] := j;
if i = k then PrintResult {Nu chn c n xk th ch vic in kt qu}
else
begin
c[j] := False; {nh du: j b chn}
Try(i + 1); {Th tc ny ch xt nhng gi tr cn t do gn cho xi+1, tc l s khng chn phi j}
c[j] := True; {B nh du: j li l t do, bi sp ti s th mt cch chn khc ca xi}
end;
end;
end;
begin
Assign(Input, 'ARRANGES.INP'); Reset(Input);
Assign(Output, 'ARRANGES.OUT'); Rewrite(Output);
ReadLn(n, k);
FillChar(c, SizeOf(c), True); {Tt c cc s u cha b chn}
Try(1);
{Th cc cch chn gi tr ca x1}
Close(Input); Close(Output);
end.
Bi ton
Cho mt s nguyn dng n 30, hy tm tt c cc cch phn tch s n thnh tng ca cc s
nguyn dng, cc cch phn tch l hon v ca nhau ch tnh l 1 cch.
Cch lm:
1. Ta s lu nghim trong mng x, ngoi ra c mt mng t. Mng t xy dng nh sau: ti s l tng
cc phn t trong mng x t x1 n xi: ti := x1 + x2 + ... + xi.
2. Khi lit k cc dy x c tng cc phn t ng bng n, trnh s trng lp ta a thm rng
buc xi-1 xi.
3. V s phn t thc s ca mng x l khng c nh nn th tc PrintResult dng in ra 1 cch
phn tch phi c thm tham s cho bit s in ra bao nhiu phn t.
4. Th tc quy Try(i) s th cc gi tr c th nhn ca xi (xi xi - 1)
5. Khi no th in kt qu v khi no th gi quy tm tip ?
Lu rng ti - 1 l tng ca tt c cc phn t t x1 n xi-1 do
Khi ti = n tc l (xi = n - ti - 1) th in kt qu
Khi tm tip, xi+1 s phi ln hn hoc bng xi. Mt khc ti+1 l tng ca cc s t x1 ti xi+1
khng c vt qu n. Vy ta c ti+1 n ti-1 + xi + xi+1 n xi + xi + 1 n - ti - 1 tc l xi
ANALYSE.OUT
6 = 1+1+1+1+1+1
6 = 1+1+1+1+2
6 = 1+1+1+3
6 = 1+1+2+2
6 = 1+1+4
6 = 1+2+3
6 = 1+5
6 = 2+2+2
6 = 2+4
6 = 3+3
6 = 6
{Khi to}
t[i] := t[i - 1] + j;
Try(i + 1);
end;
x[i] := n - T[i - 1];
{Nu xi l phn t cui th n bt buc phi l ... v in kt qu}
PrintResult(i);
end;
begin
Assign(Input, 'ANALYSE.INP'); Reset(Input);
Assign(Output, 'ANALYSE.OUT'); Rewrite(Output);
Init;
Try(1);
Close(Input);
Close(Output);
end.
Bi ton
Xt bn c tng qut kch thc nxn. Mt qun hu trn bn c c th n c cc qun khc nm
ti cc cng hng, cng ct hoc cng ng cho. Hy tm cc xp n qun hu trn bn c sao
cho khng qun no n qun no.
V d mt cch xp vi n = 8:
Phn tch
R rng n qun hu s c t mi con mt hng v hu n c ngang, ta gi qun hu s t
hng 1 l qun hu 1, qun hu hng 2 l qun hu 2... qun hu hng n l qun hu n.
Vy mt nghim ca bi ton s c bit khi ta tm ra c v tr ct ca nhng qun hu.
Nu ta nh hng ng (Phi), Ty (Tri), Nam (Di), Bc (Trn) th ta nhn thy rng:
Mt ng cho theo hng ng Bc - Ty Nam (B-TN) bt k s i qua mt s , cc
c tnh cht: Hng + Ct = C (Const). Vi mi ng cho B-TN ta c 1 hng s C v
vi mt hng s C: 2 C 2n xc nh duy nht 1 ng cho B-TN v vy ta c th nh
ch s cho cc ng cho B- TN t 2 n 2n
Mt ng cho theo hng ng Nam - Ty Bc (N-TB) bt k s i qua mt s , cc
c tnh cht: Hng - Ct = C (Const). Vi mi ng cho N-TB ta c 1 hng s C v
vi mt hng s C: 1 - n C n - 1 xc nh duy nht 1 ng cho N-TB v vy ta c th
nh ch s cho cc ng cho N- TB t 1 - n n n - 1.
1
2
3
W
4
5
6
7
8
Ci t:
1. Ta c 3 mng logic nh du:
Mng a[1..n]. ai = TRUE nu nh ct i cn t do, ai = FALSE nu nh ct i b mt qun hu
khng ch
Mng b[2..2n]. bi = TRUE nu nh ng cho B-TN th i cn t do, bi = FALSE nu nh
ng cho b mt qun hu khng ch.
Mng c[1 - n..n - 1]. ci = TRUE nu nh ng cho N-TB th i cn t do, ci = FALSE nu
nh ng cho b mt qun hu khng ch.
Ban u c 3 mng nh du u mang gi tr TRUE. (Cc ct v ng cho u t do)
2. Thut ton quay lui: Xt tt c cc ct, th t qun hu 1 vo mt ct, vi mi cch t nh vy,
xt tt c cc cch t qun hu 2 khng b qun hu 1 n, li th 1 cch t v xt tip cc cch t
qun hu 3...Mi cch t c n qun hu n cho ta 1 nghim
3. Khi chn v tr ct j cho qun hu th i, th ta phi chn (i, j) khng b cc qun hu t trc
n, tc l phi chn ct j cn t do, ng cho B-TN (i+j) cn t do, ng cho N-TB(i-j)
cn t do. iu ny c th kim tra (aj = bi+j = ci-j = TRUE)
4. Khi th t c qun hu th i vo ct j, nu l qun hu cui cng (i = n) th ta c mt
nghim. Nu khng:
Trc khi gi quy tm cch t qun hu th i + 1, ta nh du ct v 2 ng cho b qun
hu va t khng ch (aj = bi+j = ci-j := FALSE) cc ln gi quy tip sau chn cch t
cc qun hu k tip s khng chn vo nhng nm trn ct j v nhng ng cho ny na.
Sau khi gi quy tm cch t qun hu th i + 1, c ngha l sp ti ta li th mt cch t
khc cho qun hu th i, ta b nh du ct v 2 ng cho b qun hu va th t khng ch
(aj = bi+j = ci-j := TRUE) tc l ct v 2 ng cho li thnh t do, bi khi t qun hu i
sang v tr khc ri th ct v 2 ng cho hon ton c th gn cho mt qun hu khc
Hy xem li trong cc chng trnh lit k chnh hp khng lp v hon v v k thut nh du.
y ch khc vi lit k hon v l: lit k hon v ch cn mt mng nh du xem gi tr c t do
khng, cn bi ton xp hu th cn phi nh du c 3 thnh phn: Ct, ng cho B-TN,
ng cho N- TB. Trng hp n gin hn: Yu cu lit k cc cch t n qun xe ln bn c
nxn sao cho khng qun no n qun no chnh l bi ton lit k hon v
Input: file vn bn QUEENS.INP cha s nguyn dng n 12
Output: file vn bn QUEENS.OUT, mi dng ghi mt cch t n qun hu
QUEENS.INP
5
QUEENS.OUT
(1, 1); (2,
(1, 1); (2,
(1, 2); (2,
(1, 2); (2,
(1, 3); (2,
(1, 3); (2,
(1, 4); (2,
(1, 4); (2,
(1, 5); (2,
(1, 5); (2,
3);
4);
4);
5);
1);
5);
1);
2);
2);
3);
(3,
(3,
(3,
(3,
(3,
(3,
(3,
(3,
(3,
(3,
5);
2);
1);
3);
4);
2);
3);
5);
4);
1);
(4,
(4,
(4,
(4,
(4,
(4,
(4,
(4,
(4,
(4,
2);
5);
3);
1);
2);
4);
5);
3);
1);
4);
(5,
(5,
(5,
(5,
(5,
(5,
(5,
(5,
(5,
(5,
4);
3);
5);
4);
5);
1);
2);
1);
3);
2);
Try(1);
Close(Input); Close(Output);
End.