You are on page 1of 33

Trng THPT Chuyn Qung Bnh

PHN I: PHN M U
---------------------I. L DO CHN TI :
Ngn ng lp trnh l mt trong nhng ni dung c a vo dy chnh thc
b mn Tin hc nh trng ph thng. c bit, cc lp khi chuyn Tin th yu
cu hc sinh phi nm vng cc kin thc v t duy thut ton, s dng ngn ng lp
trnh thnh tho c th gii c cc bi ton trong Tin hc.
Nh ta bit, cc php lp l mt trong nhng k thut c dng gii cc
bi ton trong Tin hc v c gii thiu phn tin hc c s. Vi cc php lp,
ta gii bi ton bng cch thc hin lin tip mt s cc cu lnh trong vng lp cho
ti khi mt iu kin no c tha mn.
Mt k thut lp trnh c s dng thay th cho cc php lp l k thut
quy. Mt khc, trong thc t c rt nhiu bi ton i hi s lp i lp li mt
cch phc tp. V quy cung cp cho ta c ch gii quyt bi ton phc tp mt
cch n gin. Hn na, quy cn thch hp gii quyt cc bi ton c bn cht
quy v rt nhiu bi ton cho n nay vn cha c li gii phi quy.
c th hiu r hn v k thut quy, ng dng ca quy gii cc bi
ton trong Tin hc chng em chn ti: Tm hiu v quy lm ti nghin
cu khoa hc ca mnh.
II. MC CH NGHIN CU:
ti : Tm hiu v quy nhm t mc ch sau: Gip cho bn thn chng
em c th hiu r hn, su hn v k thut quy, ng dng quy gii cc bi
ton trong Tin hc, t nng cao kh nng t hc, kh nng lp trnh ca bn thn.
III. PHNG PHP NGHIN CU:
Khi nghin cu ti ny chng em s dng cc phng php sau:
Phng php nghin cu l thuyt
S dng phng php thu thp thng tin v tng hp, phn tch, so snh
da trn l thuyt v quy.
IV. I TNG NGHIN CU:
i tng nghin cu ca ti ny chnh l l thuyt v quy v ng dng
ca quy gii cc bi ton trong Tin hc v cc ti liu, cc thng tin lin quan.

Gio vin: Trn Lng Vng

Trang 1

Trng THPT Chuyn Qung Bnh

PHN II: PHN NI DUNG


----------------------

1. Khi nim v quy


1.1. Khi nim v hnh thc quy
Trong ton hc v khoa hc my tnh, cc tnh cht (hoc cu trc) c gi l
quy nu trong mt lp cc i tng hoc phng php c xc nh bng vic
xc nh mt s rt t cc trng hp hoc phng php n gin (thng thng ch
mt) v sau xc nh quy tc a cc trng hp phc tp v cc trng hp n
gin.
Chng hn, nh ngha sau l nh ngha quy ca t tin:
B m ca mt ngi l t tin ca ngi y (trng hp c bn).
B m ca t tin mt ngi bt k l t tin ca ngi y (bc quy).
Cc nh ngha kiu nh vy cng thng thy trong ton hc (chnh l quy np
ton hc)
Mt s hnh nh ng dng ca quy trong to hnh:

Tam gic sierpinski

Kim t thp sierpinski

Gio vin: Trn Lng Vng

Bng tuyt Koch

Trang 2

Trng THPT Chuyn Qung Bnh


Sierpinski cookies
Sierpinski 2 chiu
Sierpinski trn (carpet )
1.2. Khi nim v quy
T nhng nh ngha trn, ta c th rt ra khi nim c bn theo 2 cch:
1. quy (trong ting Anh l recursion) l phng php dng trong cc chng
trnh my tnh trong c mt hm t gi chnh n.
2. Mt khi nim X c nh ngha theo quy nu trong nh ngha X c s

dng chnh khi nim X.


V d: Sau y l mt s v d in hnh v quy:
1. nh ngha v s t nhin:
0 l mt s t nhin
n l mt s t mhin khi n-1 l 1 s t nhin
2. nh ngha v giai tha n!:
0! = 1
Nu n>0 th n!=n*(n-1)!
1.3. Cc bc gii bi ton quy
Thng s ha bi ton (hiu bi ton)
Tm cc iu kin bin (chn), tm gii thut cho cc tnh hung ny
Tm gii thut tng qut theo hng quy lui dn v tnh hung b chn.
V d: Bi ton tnh giai tha ca mt s t nhin n (tnh n!):
Thng s ha bi ton: Cch tnh giai tha n!:
0! = 1
Nu n>0 th n!=n*(n-1)!
Tm cc iu kin bin (chn), tm gii thut cho cc tnh hung ny:
If n = 0 then gt : =1
Tm gii thut tng qut theo hng quy lui dn v tnh hung b chn.
If n > 0 then gt := n*gt(n - 1);

2. Gii thut quy


2.1. Khi nim gii thut quy
Nu li gii ca mt bi ton T c thc hin bng li gii ca mt bi ton T
c dng ging nh T, th l mt li gii quy Gii thut tng ng vi li gii
nh vy gi l gii thut quy.

Gio vin: Trn Lng Vng

Trang 3

Trng THPT Chuyn Qung Bnh


Thot nghe th cc bn thy c v hi l nhng im mu cht cn lu l: T
tuy c dng ging nh T, nhng theo mt ngha no , n phi "nh" hn T.
Trong khoa hc my tnh c mt phng php chung gii cc bi ton trong
Tin hc l chia bi ton thnh cc bi ton con n gin hn cng loi. Phng php
ny c gi l k thut lp trnh chia tr. Chnh n l cha kha thit k nhiu
gii thut quan trng, l c s ca quy hoch ng.
2.2. V d
V d 1: Tnh giai tha ca mt s t nhin n (tnh n!):
If n = 0 then gt : =1
Else gt := n*gt(n - 1);
Bi ton tnh n! c chia nh nh sau:
Ta nhn thy rng, tnh n! ta cn phi tnh c (n-1)!, tnh c (n-1)! Th
ta phi tnh c (n-2)!, cho n khi chng ta s gp cngvic tnh 1!, m 1!=1, v
th c thc hin tnh ngc tr ln chng ta s tnh c n!.
V d 2: Hy xt bi ton tm mt t trong mt quyn t in.
C th nu gii thut nh sau:
if T in l mt trang then Tm t trong trang ny
else begin
M t in vo trang gia
Xc nh xem na no ca t in cha t cn tm
if T nm na trc ca t in then Tm t trong na trc
else Tm t trong na sau
end;
C th hnh dung chin thut tm kim ny mt cch khi qut nh sau:

Ta thy c hai im chnh cn lu :


- Sau mi ln t in c tch i th mt na thch hp s li c tm kim
bng mt "chin thut nh dng trc .
- C mt trng hp c bit, khc vi mi trng hp trc, s t c sau
nhiu ln tch i, l trng hp t in ch cn duy nht mt trang. Lc vic

Gio vin: Trn Lng Vng

Trang 4

Trng THPT Chuyn Qung Bnh


tch i ngng li v bi ton tr thnh nh ta c th gii quyt trc tip bng
cch tm t mong mun trn trang chng hn, bng cch tm tun t. Trng hp
c bit ny c gi l trng hp suy bin.
C th coi y l mt "chin thut " kiu "chia tr". Bi ton c tch thnh
bi ton nh hn v bi ton nh hn li c gii quyt vi thut chia tr nh
trc, cho ti khi xut hin trng hp suy bin.
Ta th hin gii thut tm kim ny di dng mt th tc:
Procedure TIMKIEM (TD,Tu)
{TD c coi l u mi truy nhp c vo t in ang xt, Tu ch t cn tm}
Begin
if T in ch cn l mt trang
then Tm t Tu trong trang ny
else begin
M t in vo trang gia
Xc nh xem na no ca t in cha t Tu
if Tu nm na trc ca t in
then TIMKIEM (TD 1,Tu)
else TIMKIEM (TD 2,Tu)
end;
{TD 1 v TD 2 l u mi truy nhp c vo na trc v na sau ca t in}
End;

3. Chng trnh con quy


3.1. Khi nim chng trnh con quy
L mt chng trnh con (hm, th tc) m trong thn ca n c li gi n chnh
n (hay cn gi l li gi quy) vi kch thc nh hn ca tham s.
V d: Hm tnh giai tha ca mt s t nhin n (tnh n!):
Function gt(n: Word): Longint;
Begin
If n = 0 then gt : =1
Else gt := n*gt(n - 1);
End;
3.2. Cu trc chnh ca chng trnh con quy
Mt chng trnh con qui cn bn gm hai phn.

Gio vin: Trn Lng Vng

Trang 5

Trng THPT Chuyn Qung Bnh


Phn neo (phn suy bin, c s): cha cc tc ng ca hm hoc th tc vi
mt s gi tr c th ban u ca tham s.
V d: If n:=0 then GT:= 1;

Phn quy (phn tng qut, h bc) : nh ngha tc ng cn c thc hin


cho gi tr hin thi ca cc tham s bng cc tc ng c nh ngha
trc y vi kch thc tham s nh hn.
V d: GT:=n*GT(n-1);

4. Nguyn tc hot ng ca gii thut quy


4.1. Khi nim stack:
Stack l mt cu trc lu tr, hot ng theo
nguyn tc sau:
Mi ln np vo hoc ly ra ch thc hin vi
mt phn t.
Phn t np vo sau s c ly ra trc.

Stack

4.2. Nguyn tc hot ng:


Khi thc hin mt gii thut quy th cc bc ca gii thut quy s ln
lt c thc hin tun t.
Khi gp li gi quy th trc khi thc hin li gi quy, on m lnh
cha c thc hin xong cng vi cc i tng d liu lin quan ti thi
im ny s c lu vo stack.
n lc no khng th thc hin li gi quy na th cc i tng c
lu trong stack s ln lt c ly ra x l.
V d: Trong v d trn, qui trnh thc hin nh sau:

Khi c lnh gi hm, chng hn: x := gt(3); th my s ghi nh l:


gt(3) := 3 * gt(2); v i tnh gt(2)

K tip my li ghi nh: gt(2):= 2*gt(1); v i tnh gt(1)

Theo nh ngha ca hm th khi gt(1):= 1; my s quay ngc li:

gt(2):= 2 * 1; v cho kt qu l 2

Tip tc: gt(3) := 3 * 2; cho kt qu l 6

Nh vy kt qu cui cng tr v l 6. Ta c: 3! = 6.

5. u im v hn ch ca quy
5.1. u im:

Gio vin: Trn Lng Vng

Trang 6

Trng THPT Chuyn Qung Bnh


- M t c mt s thao tc tnh ton thng qua mt on lnh ngn, lm cho
chng trnh ngn gn, d hiu, l r bn cht quy.
- Rt thun tin gii quyt cc bi ton c bn cht quy.
- Hin nay vn c nhiu thut ton cha c li gii quy.
- Nhiu gii thut rt d m t dng quy nhng li rt kh m t vi gii thut
khng--quy.
- Mt chng trnh vit theo gii thut c tnh qui s mang tnh "ngi" hn,
do s sng sa, d hiu, nu bt c bn cht ca vn .
5.2. Hn ch:
- Va tn b nh, chng trnh chy chm
- Do quy lu tr cc d liu trung gian vo Stack nn nu Lu nhiu b d liu
ln trn stack nn c th gy ra hin tng trn Stack

6. Mt s bi ton v quy
Bi 1: Tnh lytha: an (vi n l s nguyn dng)
Program Giai_thua;
Const fi='Giaithua.inp';
fo='Giaithua.out';
Var a:longint;n: Integer;
f:text;
Procedure Doc;
Begin
Assign(f,fi);
Reset(f);
Readln(f,a,n);
Close(f);
End;
Function lt(a,n: Word): Longint;
Begin
If n = 0 then lt := 1
else lt := a * lt(a,n - 1);
End;
Procedure Ghi;
Begin
Assign(f,fo);

Gio vin: Trn Lng Vng

Trang 7

Trng THPT Chuyn Qung Bnh


Rewrite(f);
Writeln(f,lt(a,n));
Close(f);
End;
Begin
Doc;Ghi;
End.
Bi 2: Tm s fibonaxi th n
Program Fibonaxi;
Const fi='Fibonxi.inp';
fo='Fibonaxi.out';
Var a:longint;
f:text;
Procedure Doc;
Begin
Assign(f,fi);
Reset(f);
Readln(f,a);
Close(f);
End;
Function Fibo(n:longint):longint;
Begin
If ((n=0)or(n=1)) then Fibo:=1
else Fibo:=Fibo(n-2)+Fibo(n-1);
End;
Procedure Ghi;
Begin
Assign(f,fo);
Rewrite(f);
Writeln(f,Fibo(a));
Close(f);
End;
Begin

Gio vin: Trn Lng Vng

Trang 8

Trng THPT Chuyn Qung Bnh


Doc;Ghi;
End.
Bi 3: Tnh tng S=1+2+3+...+n ?
Program TongS;
Const fi='Tong.inp';
fo='Tong.out';
Var n:longint;
f:text;
Procedure Doc;
Begin
Assign(f,fi);
Reset(f);
Readln(f,n);
Close(f);
End;
Function S(k:longint):longint;
Begin
If k=1 then S:=1
else If k>1 then S:=S(k-1) + k;
End;
Begin
Procedure Ghi;
Begin
Assign(f,fo);
Rewrite(f);
Writeln(f,S(n));
Close(f);
End;
Begin
Doc;Ghi;
End.
Bi 4: Tnh S=xsinx+x 2 sin 2 x++x n sin n x?

Gio vin: Trn Lng Vng

Trang 9

Trng THPT Chuyn Qung Bnh


Program Tong_sinx;
Const fi='tongsin.inp';
fo='tongsin.out';
Var f:text;
a,b:longint;
Procedure Doc;
Begin
Assign(f,fi);
Reset(f);
Readln(f,a,b);
Close(f);
End;
Var

a,b:longint;
f:text;

Function

tinh(n,x:longint):real;

Begin
If n=1 then tinh:=x*sin(x)
else tinh:=x*sin(x)*(1+tinh(n-1,x));
End;
Procedure Ghi;
Begin
Assign(f,fo);
Rewrite(f);
Writeln(f,Tongsin(a,b));
Close(f);
End;
Begin
Doc;Ghi;
End.

Bi 5: Tm s o ngc
Program So_dao_nguoc;

Gio vin: Trn Lng Vng

Trang 10

Trng THPT Chuyn Qung Bnh


Const fi='Daonguoc.inp';
fo='Daonguoc.out';
Var
a:longint;
f:text;
Procedure Doc;
Begin
Assign(f,fi);
Reset(f);
Readln(f,a);
Close(f);
End;
Procedure Daoso(n: longint);
Begin
Assign(f,fo);
Rewrite(f);
If n > 0 then
Begin
Write(f,n mod 10);
Daoso(n div 10);
End;
Close(f);
End;
Begin
Doc;Daoso(a);
End.
Bi 6: Tm c chung ln nht ca 2 s nguyn dng.
Program Tim_UCLN;
Const fi='UCLN.inp';
fo='UCLN.out';
Var x,y:longint;
f:text;
Procedure Doc;
Begin

Gio vin: Trn Lng Vng

Trang 11

Trng THPT Chuyn Qung Bnh


Assign(f,fi);
Reset(f);
Readln(f,x,y);
Close(f);
End;
Function UCLN(m,n:longint):longint;
Begin
If(m=n) then UCLN:= m
else
If (m>n) then UCLN:=UCLN(m-n,n)
else UCLN:=UCLN(m,n-m);
End;
Procedure Ghi;
Begin
Assign(f,fo);
Rewrite(f);
Writeln(f,UCLN(x,y));
Close(f);
End;
Begin
Doc;Ghi;
End.
Bi 7: Tnh tng cc ch s ca 1 s nguyn dng.
Program Tong_chu_so;
Const fi='sum.inp';
fo='sum.out';
Var n:longint;
f:text;
Procedure Doc;
Begin
Assign(f,fi);
Reset(f);
Readln(f,n);

Gio vin: Trn Lng Vng

Trang 12

Trng THPT Chuyn Qung Bnh


Close(f);
End;
Function tong(m:longint):longint;
Var t:longint;
Begin
If m div 10=0 then tong:=m mod 10
else tong:=m mod 10 + tong(m div 10);
End;
Procedure Ghi;
Begin
Assign(f,fo);
Rewrite(f);
Writeln(f,tong(n));
Close(f);
End;
Begin
Doc;Ghi;
End.
Bi 8: Bi ton Thp H Ni:
bi: C 3 ci cc, nh du A, B, C, v N ci a. Mi a u c mt l chnh
gia t xuyn qua cc, cc a u c kch thc khc nhau. Ban u tt c a
u c t cc th nht theo th t a nh hn trn.
Yu cu ca bi l chuyn tt c cc a t cc A qua cc C vi ba rng buc
nh sau:
1. Mi ln ch chuyn c mt a.
2. Trong qu trnh chuyn a c th dng cc cn li (B) lm cc trung
gian.
3. Ch cho php t a c bn knh nh hn ln a c bn knh ln hn.
Phn tch bi ton:
Trong bi ton trn hnh dung mt li gii tng qut cho trng hp tng qut
N a l khng d dng.
Hy bt u vi cc trng hp n gin:
- Vi N = 1: Ch cn chuyn a ny t cc A qua cc C l xong.

Gio vin: Trn Lng Vng

Trang 13

Trng THPT Chuyn Qung Bnh


- Vi N = 2: m bo rng buc th hai ta bt buc chuyn a trn cng t
cc A qua cc B. Chuyn tip a cn li t cc A qua cc C. Chuyn tip a ang
cc B sang cc C.
- Vi N = 3: Ta phi thc hin 7 bc nh sau:
A

Trng thi ban u

Bc 1: Chuyn
mt a t A qua C.
Bc 2: Chuyn
mt a t A qua B.
Bc 3: Chuyn
mt a t C qua B.
Bc 4: Chuyn
mt a t A qua C.
Bc 5: Chuyn
mt a t B qua A.
Bc 6: Chuyn
mt a t B qua C.
Bc 7: Chuyn
mt a t A qua C.

* Nhn xt:
kt qu ca bc th ba. y l mt kt qu quan trng v n cho ta thy t
trng hp N=3 bi ton c phn chia thnh hai bi ton vi kch thc nh

Gio vin: Trn Lng Vng

Trang 14

Trng THPT Chuyn Qung Bnh


hn: l bi ton chuyn 1 a t cc A qua cc C ly cc B lm trung gian v bi
ton chuyn 2 a (di) t cc B sang cc C ly cc A lm trung gian. Hai bi ton
con ny bit cch gii (trng hp N=1 v trng hp N=2).
Nhn xt cho ta gi trong trng hp tng qut:
- Bc 1: Di (N-1) a trn cng t cc A sang cc B ly cc C lm trung gian.
- Bc 2: Chuyn 1 a di cng t cc A sang cc C.
- Bc 3: Di (N-1) a ang cc B sang cc C ly cc A lm trung gian.
Nh vy, bi ton i vi N a trn c qui v hai bi ton (N-1) a v
bi ton 1 a. Qu trnh qui s dng li khi N=0 (khng cn a di hoc
chuyn).
Ci t chng trnh:
Program ThapHN;
Const fi='THAP.INP';
f0='THAP.OUT';
Var n,d:integer ; f:text;
{ }
Procedure Readf;
Begin
Assign(f,fi);
Reset(f);
Readln(f,n);
d:=0;
close(f);
end;
{ }
Procedure THN(n:integer;A,B,C:char);
Begin
If n>0 then Begin
THN(n-1,A,C,B);
inc(d);
Writeln(f,'Step',d:5,' -- ',A,' -> ',C);
THN(n-1,B,A,C);
end;

Gio vin: Trn Lng Vng

Trang 15

Trng THPT Chuyn Qung Bnh


end;
{ }
Procedure Writef;
Begin
Assign(f,f0);
Rewrite(f);
THN(n,'A','B','C');
Writeln(f,'Co ',d,' buoc');
Close(f);
end;
{ }
BEGIN
Readf;
Writef;
END.
p dng chng trnh ny cho trng hp N=3 ta c qu trnh gi qui nh sau:
THN(0,A,C,B)
THN(1,A,B,C)

Step

1 A C

THN(0,B,A,C)
THN(2,A,C,B)

Step

2 A B

THN(0,C,B,A)
THN(1,C,A,B)

Step

3 C B

THN(0,A,C,B)
THN(3,A,B,C) Step

4 A C
THN(0,B,A,C)

THN (1,B,C,A)

Step

5 B A

THN(0,C,B,A)
THN(2,B,A,C)

Step

6 B C

THN (0,A,C,B)
THN(1,A,B,C)

Gio vin: Trn Lng Vng

Step

7 A C

Trang 16

Trng THPT Chuyn Qung Bnh


THN(0,B,A,C)

Gio vin: Trn Lng Vng

Trang 17

Trng THPT Chuyn Qung Bnh

7. quy quay lui (Back tracking)


7.1. Tng quan v quy quay lui
Trong lp trnh, phng php gii mt bi ton tng qut rt c ch . l
vic xc nh cc gii thut tm li gii cho mt s bi ton no khng theo mt
lut tnh ton c nh bng phng php "Try and Error" (Th v sai).
Nt c trng ca phng php ny l ch cc bc i n li gii hon ton
bng cch lm th. Nu c mt la chn c chp nhn th ghi nh cc thng tin
cn thit cc bc th tip theo. Tri li, nu khng c mt la chn no thch hp th
lm li bc trc, xo bt cc ghi nh v quay v chu trnh th vi cc la chn cn
li. Hnh ng ny c gi l quay lui (Back tracking) v cc gii thut th hin
phng php ny gi l cc gii thut quay lui.
7.2. Gii thut tng qut
Procedure Try(j); {Chn thc hin bc th j}
Begin
For CC PHNG N CHN do
If CHN C then
Begin
- THC HIN BC I TH j;
- IF THNH CNG then THNG BO KT QU
Else Try(j+1);
- HY BC I TH j; {Quay lui}
End;
Endl;
- Th tc trn s c khi ng bi lnh: Try(1);
Ta c th trnh by qu trnh tm kim li gii qu thut ton quay lui bng cy sau:

Gio vin: Trn Lng Vng

Trang 18

Trng THPT Chuyn Qung Bnh

8. Mt s bi ton v quy quay lui


8.1. Bi ton Tm hon v
bi: Nhp t bn phm mt s t nhin N. Hy lit k tt c cc hon v ca tp
s {1, 2, 3..., N}.
Phn tch bi ton:
- Vi N=1 th ch c 1 hon v duy nht l: 1.
- Vi N=2 th c 2 hon v l:
+ Khi chn 1 l s ng u, ta c hon v: 1 2
+ Khi chn 2 l s ng u, ta c hon v: 2 1
- Vi N=3:
+ Khi chn 1 l s ng u, ta c 2 hon v: 1 2 3
1 3 2
+ Khi chn 2 l s ng u, ta c 2 hon v: 2 1 3
2 3 1
+ Khi chn 3 l s ng u, ta c 2 hon v: 3 2 1
3 1 2
.....
Vi tp hp N s, khi chn mt trong cc s t 1 n N, ta s c cc hon v
gm: s ng u chn + mt trong cc hon v ca tp s {1..N}.
Nh vy, ta nhn thy c th gii bi ton ny bng cch dng thut ton quy
quay lui.
Ta c:
- Try(j): thc hin chn s th j cho hon v.
- Cc phng n chn: C N phng n chn, i = 1, 2, 3..., N.
- Chn c: khi gi tr i cha c chn.
T chc lu tr: Dng mt mng mt chiu KT c N phn t mang kiu d liu
Boolean. Gi tr khi to ban u ca cc phn t u l True
KT
True
True
True
...
True
i =
1
2
3
Gi tr i cha c chn khi KT[i]= True

...

- Thc hin bc i th j:
+ nh du gi tr c chn: KT[i]:= False.
+ Gn gi tr ca i cho s th j:

Gio vin: Trn Lng Vng

Trang 19

Trng THPT Chuyn Qung Bnh


T chc lu tr: Dng mt mng mt chiu X c N phn t lu cc gi tr
c chn:
...

X
j=

...

Lu vt: X[j]:=i;
- Thnh cng: khi chn N s ( j=N).
- Hy bc i th j: gn gi tr True cho KT[i]: KT[i]: =True;
Ci t chng trnh:
Program Hoanvi;
const maxn=100;
type mmc=array[1..maxn] of byte;
mang=array[1..maxn] of boolean;
var x:mmc;kt:mang;n:byte;
procedure try(j:byte);
var i,k:byte;
begin
for i:=1 to n do
if kt[i]=true then
begin
kt[i]:=false;
x[j]:=i;
if j=n then
begin
for k:=1 to n do write (x[k],' ');
writeln;
end
else try(j+1);
kt[i]:=true;
end;
end;
begin

Gio vin: Trn Lng Vng

Trang 20

Trng THPT Chuyn Qung Bnh


writeln('nhap so n');
readln(n);
writeln('cac hoan vi la:');
try(1);
readln;
end.
Th chng trnh vi N=4:
Input
N=4

Gio vin: Trn Lng Vng

Output
1
1
1
1
1
1

2
2
3
3
4
4

3
4
2
4
2
3

4
3
4
2
3
2

2
2
2
2
2
2
3

1
1
3
3
4
4
1

3
4
1
4
1
3
2

4
3
4
1
3
1
4

3
3
3
3
3
4
4

1
2
2
4
4
1
1

4
1
4
1
2
2
3

2
4
1
2
1
3
2

4
4
4
4

2
2
3
3

1
3
1
2

3
1
2
1

Trang 21

Trng THPT Chuyn Qung Bnh


8.2. Bi ton Tm qun hu
bi:
Mt bn c quc t l mt bng hnh vung gm 8 hng, 8 ct. Qun hu l mt
qun c c th n c bt k qun no nm trn cng mt hng, cng mt ct, cng
mt ng cho. Bi ton t ra l: hy sp xp 8 qun hu trn cng mt bn c sao
cho khng c qun hu no c th n c qun hu no.

Phn tch:
D nhin ta khng nn tm li gii bng cch xt mi trng hp ng vi mi v
tr ca 8 qun hu trn bn c ri lc ra cc trng hp chp nhn c. Khuynh
hng th tng bc thot nghe c v hi l, nhng li th hin mt gii php thit
thc: n cho php tm ra tt c cc cch sp xp khng c qun hu no n c
nhau.
Nt c trng ca phng php l ch cc bc i li gii hon ton c lm
th. Nu c mt la chn c chp nhn th ghi nh cc thng tin cn thit v tin
hnh bc th tip theo. Nu tri li khng c mt la chn no thch hp c th lm
li bc trc, xa bt cc ghi nh v quay v chu trnh th vi cc la chn cn li.
Hnh ng ny c gi l quay lui, v cc gii thut th hin phng php ny gi
l gii thut quay lui.
i vi bi ton 8 qun hu: do mi ct ch c th c mt qun hu nn la chn
i vi qun hu th j, ng vi ct j, l t n vo hng no m bo an ton
ngha l khng cng hng, khng cng ng cho vi j-1 qun hu c sp xp
trc . R rng i ti cc li gii ta phi th tt c cc trng hp sp xp qun
hu u tin ti ct 1. Vi mt v tr th nh vy ta phi gii quyt bi ton 7 con hu
vi phn cn li ca bn c, ngha l ta quay li bi ton c!

Gio vin: Trn Lng Vng

Trang 22

Trng THPT Chuyn Qung Bnh


S dng gii thut quy quay lui cho bi ton m i tun, ta c:
- Try(j): Chn dng t qun hu th j ( ct j).
- Cc phng n chn: Nh trn nu, i vi qun hu th j, v tr ca n ch
chn trong ct th j. Vy tham bin j tr thnh ch s ct v vic chn la cc
phng n chn uc tin hnh trn 8 gi tr s hng i (chn dng i: 1, 2,3 ,.., 8).
- Chn c: la chn i c chp nhn, th hng i v hai ng cho qua
(i,j) phi khng c qun hu no trn . Ta thy trong ng cho theo chiu
(song song vi cho chnh) c cc (i,j) m tng i + j khng i, cn ng cho
theo chiu (song song vi cho ph) c cc (i,j) m i-j khng i.
Do ta s chn cc mng mt chiu Boolean biu din cc tnh trnh ny:

a
ch s m

b
ch s i

c
ch s k

-7

-6

-5

T
5

T
15

-3

T
7

T
-4

16

T
6

a[i] = true c ngha l khng c qun hu no chim hng i.


b[i + j] = true c ngha l khng c qun hu no chim ng cho i + j
c[i - j] = true c ngha l khng c qun hu no chim ng cho i - j.
Ta bit:

1<=i, j<=8

Nn suy ra

2<=i +j <=16
-7<=i - j<=7
ng cho i+j

ng cho i-j

hng i

Nh vy iu kin chn c l a[i] and b[i+j] and c[i-j] c gi tr true.

Gio vin: Trn Lng Vng

Trang 23

Trng THPT Chuyn Qung Bnh


V tr ca mi con hu c ghi vo mng mt chiu x gm 8 phn t l 8 v tr
dng ca cc con hu 8 ct tng ng.
- Thc hin bc i th j:
+ T chc lu tr:

x
ch s k

i
1

+ Lu vt:
x[j] := i;
a[i] := false;
b[i+j] := false;
c[i-j] := false;
- Thnh cng: khi j=8 tc l t xong v tr ca 8 con hu, khi s thng bo
kt qu v tr cc con hu t, ngc li s tip tc th t cc con hu tip
theo.
- Hy bc i th j:
a[i] := true;
b[i+j] := true;
c[i-j] := true;
Th tc quy quay lui cho bi ton ny c vit nh sau:
Procedure TRY( j: byte );
Begin
For i :=1 to 8 do
If (a[i]) and (b[i+j])
Begin
x[j] := i;
a[i] := false;
b[i+j] := false;
c[i-j]:=false;
If j=8 then
Begin
For k:=1 to 8 do
write(x[k], )
writeln;

Gio vin: Trn Lng Vng

and

(c[i-j])

then

Trang 24

Trng THPT Chuyn Qung Bnh


End
Else
TRY(j+1);
a[i]:=true;
b[i+j]:=true;
c[i-j]:=true;
End;
End;
Ci t chng trnh:
Program Tam_quan_hau;
Var
j, k: byte;
i: integer;
x: array[1..8] of byte;
a: array[1..8] of boolean;
b: array[2..16] of boolean
c: array[-7..7] of boolean
{-----------------------------------------------------}
Procedure TRY( j: byte );
Begin
For i :=1 to 8 do
If (a[i]) and (b[i+j]) and (c[i-j]) then
Begin
x[j] := i;
a[i] := false;
b[i+j] := false;
c[i-j]:=false;
If j=8 then
Begin
For k:=1 to 8 do
write(x[k], )
writeln;
End

Gio vin: Trn Lng Vng

Trang 25

Trng THPT Chuyn Qung Bnh


Else
TRY(j+1);
a[i]:=true;
b[i+j]:=true;
c[i-j]:=true;
End;
End;
{-----------------------------------------------------}
BEGIN
For i:=1 to 8 do a[i]:=true;
For i:=2 to 16 do b[i]:=true;
For i:=-7 to 7 do c[i]:=true;
TRY(1);
Readln;
END.
Chy th chng trnh:
Sau y l 12 trong s 92 li gii ca bi ton:
x1
1

x2
5

x3
8

x4
6

x5
3

x6
7

x7
2

x8
4

1
2

7
4

5
6

8
8

2
3

4
1

6
7

3
5

Gio vin: Trn Lng Vng

Trang 26

Trng THPT Chuyn Qung Bnh


8.3. Bi ton M i tun
bi: M i tun (hnh trnh ca qun m) l bi ton v vic di chuyn mt
qun m trn bn c vua (8 x 8). Qun m c t mt trn mt bn c trng n
phi di chuyn theo quy tc ca c vua i qua mi trn bn c ng mt ln.
Hy vit chng trnh t qun m vo mt v tr bt k trn bn c. Tm chu trnh
ca qun m gh thm mt ln duy nht tt c cc cn li
- Quy tc di chuyn ca qun m trn bn c vua: qun m i theo hnh ch L

Phn tch bi ton:

C rt nhiu li gii cho bi ton ny, chnh xc l 26.534.728.821.064 li gii


trong qun m c th kt thc ti chnh m n khi u. Mt hnh trnh nh vt
c gi l hnh trnh ng.
C nhng hnh trnh, trong qun m sau khi i ht tt c 64 ca bn c (k
c xut pht), th t cui ca hnh trnh khng th i v xut pht ch bng mt
nc i. Nhng hnh trnh nh vy c gi l hnh trnh m.

Hai trong s nhiu hnh trnh ng trn bn c 8 x 8.

Gio vin: Trn Lng Vng

Trang 27

Trng THPT Chuyn Qung Bnh


i vi bi ton m i tun ta nhn thy rng, ban u ta ca qun m l (i,j)
bt k trn bn c. Ti v tr ny theo quy lut di chuyn ca qun m trn bn c th
qun m c ti a 8 hng i tip theo. R rng i n cc li gii ta phi th tt
c cc trng hp qun m c th i n bc 1. Vi mi v tr th nh vy ta li
th tt c cc cc trng hp ca qun m c th i n bc 2, C tip tc nh
vy cho n khi qun m i qua tt c cc tn bn c vua th dng li. Nh vy, tnh
cht quy ca bi ton th hin trong cc php th hng i cua qun m trn.
Kt qu ta tm c nhiu chu trnh i khc nhau nhng s bc i u l 63.
S dng gii thut quy quay lui cho bi ton m i tun, ta c:
- Try(k,i,j): Chn thc hin bc i th k, vi xut pht l (i,j);
- Cc phng n chn: C 8 phng n (tng ng vi 8 trng hp c th i
n ca qun m):
+ K hiu phng n: m = 1, 2, , 8.
+ Thit lp hai mng mt chiu d,c lu tr ta tng ng 8 kh nng di
chuyn ca qun m:

-2

-2

-1

ch s m

-1

2
5

-1

-1
7

-2

ch s m
1
2
3
4
5
6
7
Khi : phng n m l di chuyn m n (i+d[m], j+c[m]).

-2
8

- Chn c: nu nh (i+d[m], j+c[m]) qun m cha i qua v 1<= i+d[m]<=


8 v 1<= j+c[m]<= 8.
- Thc hin bc i th k:
+ T chc lu tr: Dng mng 2 chiu A c kch thc 8x8: A[1..8, 1..8]
A[i,j] =
0 : nu qun m cha i qua (i,j)
k : nu qun m i qua (i,j) bc th k
+ Lu vt: A([i+d[m], j+c[m]):=k.
- Thnh cng: k=64 (hoc k>63).
- Thng bo kt qu: In mng A.
- Li gi quy tip theo: Try(k+1, i+d[m], j+c[m]).
- Hy bc i th k: A([i+d[m], j+c[m]):=0.

Gio vin: Trn Lng Vng

Trang 28

Trng THPT Chuyn Qung Bnh


* Th tc quy quay lui cho ni ton ny c vit nh sau:
Procedure Try(k,i,j);
Begin
for m:=1 to 8 do
If (A(i+d[m], j+c[m]) = 0) and ((i+d[m]) in S) and
((j+c[m]) in S) Then
Begin
A(i+d[m], j+c[m]) = k;
If k=64 Then Xuat Else Try(k+1, i+d[m], j+c[m]);
A(i+d[m], j+c[m]) = 0;
End;
End;
Ci t chng trnh:
Program Ma_di_tuan;
Const
d:array[1..8] of integer=(-2,-2,-1,1,2,2,1,-1);
c:array[1..8] of integer=(-1,1,2,2,1,-1,-2,-2);
Var
A:array[1..8,1..8] of integer;
S:set of 1..8;
i, j: integer;
{-----------------------------------------------------}
Procedure Nhap;
Begin
fillchar(A,sizeof(A),0);
writeln('Cho biet toa do ban dau cua ma: ');
readln(i,j);
A[i,j]:=1;
S:=[1,2,3,4,5,6,7,8];
End;
{-----------------------------------------------------}
Procedure xuat;
var x, y:integer;
Begin

Gio vin: Trn Lng Vng

Trang 29

Trng THPT Chuyn Qung Bnh


for x:=1 to 8 do
begin
for y:=1 to 8 do write(A[x,y]:5);
writeln;
end;
End;
{-----------------------------------------------------}
Procedure Try(k,i,j);
var m:byte;
Begin
for m:=1 to 8 do
If (A(i+d[m], j+c[m]) = 0) and ((i+d[m]) in S) and
((j+c[m]) in S) Then
Begin
A(i+d[m], j+c[m]) = k;
If k=64 Then Xuat Else Try(k+1, i+d[m], j+c[m]);
A(i+d[m], j+c[m]) = 0;
End;
End;
{-----------------------------------------------------}
BEGIN
Nhap;
Try(2, i, j);
Readln;
END.
Chy th chng trnh: Di y l mt ng i ca qun m:

Gio vin: Trn Lng Vng

Trang 30

Trng THPT Chuyn Qung Bnh

PHN III: PHN KT LUN


---------------------C th ni rng quy l qu tim trong cc nghin cu l thuyt, cng nh thc
hnh tnh ton th hin rt nhiu sc mnh v c u im trong nhiu bi ton.
Cn c vo mc ch v nhim v ca ti, chng em t c nhng kt qu
sau:
- Tm hiu v trnh by khi nim quy, gii thut quy, chng trnh con
quy, quy quay lui
- Tm hiu cu trc chung ca chng trnh con quy
- Tm hi v nguyn tc hot ng ca gii thut quy
- Xy dng chng trnh ci t 8 bi ton v quy ni chung v 3 bi ton
in hnh v quy quay lui
Nh vy, ti c bn hon thnh, m bo cc nhim v v mc ch nghin
cu ra.
Mc d c nhiu thi gian tm hiu v ti, tuy nhin do nh hng ca cng
vic hc tp, thi c v nhiu cng vic khc, bn cnh do kh nng trnh ca
bn thn chng em c hn nn vic thc hin ti cn c mt s hn ch sau:
- Cha trnh by k l thuyt v quy quay lui
- H thng cc bi ton v li gii cha a dng v phong ph
- Cha ci t cc bi ton trn vi li gii khng quy thy r u im
v hn ch ca quy.
Chng em hi vng nhng hn ch ny s l bi hc kinh nghim, l nhng ni
dung chng em cn phn u xy dng trong thi gian ti.
Chng em mong cc thy c ng gp kin ti c hon thin hn.
Xin chn thnh cm n!

Gio vin: Trn Lng Vng

Trang 31

Trng THPT Chuyn Qung Bnh

ti liu tham kho


---------------------[1] Xun Li, Cu trc d liu v gii thut, Nh xut bn khoa hc v k thut.
[2] Trn c Huyn, Mt s bi ton chn lc trong Tin hc, Nh xut bn gio dc.
[3] Trn c Huyn, Cc vn v lp trnh Pascal, Nh xut bn Thanh Nin.
[4] Nguyn Xun Huy, Sng to trong thut ton v lp trnh - Tp 1, Nh xut bn
gio dc.
[5] Nguyn Xun My, Mt s vn chn lc trong Tin hc - Tp 1, Nh xut bn
gio dc.
[6] Nguyn Xun My, Mt s vn chn lc trong Tin hc - Tp 2, Nh xut bn
gio dc.
[7] Nguyn Hi Lc - Nguyn Thanh Tin, Bi ging ngn ng lp trnh Pascal, i
hc s phm Hu.
[8] Cc ti liu v quy trn Internet.

Gio vin: Trn Lng Vng

Trang 32

Trng THPT Chuyn Qung Bnh

mc lc
---------------------Phn i - phn m u....................... Error! Bookmark not defined.
Phn ii - phn ni dung ................. Error! Bookmark not defined.
1. Khi nim v quy ........................................................................................ 2
1.1. Khi nim v hnh thc quy.................................................................... 2
1.2. Khi nim v quy ................................................................................... 3
1.3. Cc bc gii bi ton quy................................................................. 3
2. Gii thut quy.............................................................................................. 3
2.1. Khi nim gii thut quy ........................................................................ 3
2.2. V d ........................................................................................................... 4
3. Chng trnh con quy................................................................................. 5
3.1. Khi nim chng trnh con quy ............................................................ 5
3.2. Cu trc chnh ca chng trnh con quy ............................................... 5
4. Nguyn tc hot ng ca gii thut quy................................................... 6
4.1. Khi nim stack: ......................................................................................... 6
4.2. Nguyn tc hot ng: ................................................................................ 6
5. u im v hn ch ca quy....................................................................... 6
5.1. u im: ..................................................................................................... 6
5.2. Hn ch:...................................................................................................... 7
6. Mt s bi ton v quy ................................................................................ 7
7. quy quay lui (Back tracking) ................................................................... 18
7.1. Tng quan v quy quay lui ................................................................... 18
7.2. Gii thut tng qut................................................................................... 18
8. Mt s bi ton v quy quay lui................................................................ 19
8.1. Bi ton Tm hon v................................................................................. 19
8.2. Bi ton Tm qun hu ............................................................................. 22
8.3. Bi ton M i tun................................................................................... 27
Phn iii - phn kt lun ............... Error! Bookmark not defined.
ti liu tham kho ......................................................................................32

Gio vin: Trn Lng Vng

Trang 33

You might also like