You are on page 1of 27

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

c t yu cu ca bi ton:
C s l thuyt thut ton quay lui. Trnh by thut ton v ci t trn C chng trnh ng dng thut ton quay lui tm ng i trong m cung. (Chng trnh c d liu t mt file INPUT.TXT s nh ca th, tn cc nh v cc cnh lin thuc, nh ngun, nh ch. Chng trnh c file, x l v ghi ra file OUPUT.TXT ng i c th ) File INPUT.TXT : 5 1 0 0 0 0 0

a
5 2 0 0 0 0 5 0 0 1 0 0 1 0 0 0 0 0 1 3 0 5 2 1

c
1

File OUT.TXT : 1 2 4 5

Nhm SVTH: Nhm 10

Trang 1

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

Chng 1: C S L LUN
1. Tm kim vt cn
Trong thc t chng ta thng gp cc cu hi chng hn nh c bao nhiu kh nng...?, hy cho bit tt c cc kh nng...?, hoc c tn ti hay khng mt kh nng...?. V d, c hay khng mt cch t 8 con hu vo bn c sao cho chng khng tn cng nhau. Cc vn nh th thng thng i hi ta phi xem xt tt c cc kh nng c th c. Tm kim vt cn (exhaustive search) l xem xt tt c cc ng c vin nhm pht hin ra i tng mong mun. Cc thut ton c thit k bng tm kim vt cn thng c gi l brute-force algorithms. tng ca cc thut ton ny l sinh-kim, tc l sinh ra tt c cc kh nng c th c v kim tra mi kh nng xem n c tho mn cc iu kin ca bi ton khng. Trong nhiu vn , tt c cc kh nng m ta cn xem xt c th quy v cc i tng t hp (cc tp con ca mt tp), hoc cc hon v ca n i tng, hoc cc t hp k i tng t n i tng. Trong cc trng hp nh th, ta cn phi sinh ra, chng hn, tt c cc hon v, ri kim tra xem mi hon v c l nghim ca bi ton khng. Tm kim vt cn ng nhin l km hiu qu, i hi rt nhiu thi gian. Nhng cng c vn ta khng c cch gii quyt no khc tm kim vt cn. V d 1(Bi ton 8 con hu). Chng ta cn t 8 con hu vo bn c 8x8 sao cho chng khng tn cng nhau, tc l khng c hai con hu no nm cng hng, hoc cng ct, hoc cng ng cho. V cc con hu phi nm trn cc hng khc nhau, ta c th nh s cc con hu t 1 n 8, con hu i l con hu ng hng th i (i=1,...,8). Gi xi l ct m con hu th i ng. V cc con hu phi ng cc ct khc nhau, nn (x1, x2, ...,x8) l mt hon v ca 8 s 1, 2,..., 8. Nh vy tt c cc ng c vin cho nghim ca bi ton 8 con hu l tt c cc hon v ca 8 s 1, 2,..., 8. n y ta c th a ra thut ton nh sau: sinh ra tt c cc hon v ca (x1, x2, ...,x8), vi

Nhm SVTH: Nhm 10

Trang 2

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

mi hon v ta kim tra xem hai bt k (i,xi) v (j,xj) c cng ng cho hay khng. i vi bi ton tng qut: t n con hu vo bn c nxn, s cc hon v cn xem xt l n!, v do d thut ton t n con hu bng tm kim vt cn i hi thi gian O(n!). Trong mc sau, chng ta s a ra thut ton hiu qu hn c thit k bng k thut quay lui. V d 2 ( Bi ton ngi bn hng). Bi ton ngi bn hng (saleperson problem) c pht biu nh sau. Mt ngi bn hng, hng ngy phi i giao hng t mt thnh ph n mt s thnh ph khc ri quay li thnh ph xut pht. Anh ta mun tm mt tua qua mi thnh ph cn n ng mt ln vi di ca tua l ngn nht c th c. Chng ta pht biu chnh xc bi ton nh sau. Cho th nh hng gm n nh c nh s 0,1,...,n-1. di ca cung (i,j) c k hiu l dij v l mt s khng m. Nu th khng c cung (i,j) th ta xem dij = +. Chng ta cn tm mt ng i xut pht t mt nh qua tt c cc nh khc ca th ng mt ln ri li tr v nh xut pht (tc l tm mt chu trnh Hamilton) sao cho di ca tua l nh nht c th c. Mi tua nh t l mt dy cc nh (a0, a1,..., an-1, a0), trong cc a0, a1,..., an-1 l khc nhau. Khng mt tnh tng quat, ta c th xem nh xut pht l nh 0, a0 = 0. Nh vy, mi tua tng ng vi mt hon v (a1,..., an-1) ca cc nh 1, 2, ..., n-1. T ta c thut ton sau: sinh ra tt c cc hon v ca n-1 nh 1, 2, ..., n-1; vi mi hon v ta tnh di ca tua tng ng vi hon v v so snh cc di ta s tm c tua ngn nht. Lu rng, c tt c (n-1)! hon v v mi tua cn n php ton tnh di, do thut ton gii bi ton ngi bn hng vi n thnh ph bng tm kim vt cn cn thi gian O(n!). Bi ton ngi bn hng l bi ton kinh in v ni ting. Ngoi cch gii bng tm kim vt cn, ngi ta a ra nhiu thut ton khc cho bi ton ny. Thut ton quy hoch ng cho bi ton ngi bn hng i hi thi gian (n22n).

Nhm SVTH: Nhm 10

Trang 3

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

Cho ti nay ngi ta vn cha tm ra thut ton c thi gian a thc cho bi ton ngi bn hng. 2. Quay lui

2.1

Quay lui (backtracking) l mt chin lc tm kim li gii cho cc bi

ton tha mn rng buc. Ngi u tin ra thut ng ny (backtrack) l nh ton hc ngi M D. H. Lehmer vo nhng nm 1950. K thut thit k thut ton c th s dng gii quyt rt nhiu vn khc nhau. u im ca quay lui so vi tm kim vt cn l ch c th cho php ta hn ch cc kh nng cn xem xt. Cc bi ton tha mn rng buc l cc bi ton c mt li gii y , trong th t ca cc phn t khng quan trng. Cc bi ton ny bao gm mt tp cc bin m mi bin cn c gn mt gi tr ty theo cc rng buc c th ca bi ton. Vic quay lui l th tt c cc t hp tm c mt li gii. Th mnh ca phng php ny l nhiu ci t trnh c vic phi th nhiu t hp cha hon chnh, v nh gim thi gian chy. Phng php quay lui c quan h cht ch vi tm kim t hp Ci t V bn cht, t tng ca phng php l th tng kh nng cho n khi tm thy li gii ng. l mt qu trnh tm kim theo su trong mt tp hp cc li gii. Trong qu trnh tm kim, nu ta gp mt hng la chn khng tha mn, ta quay lui v im la chn ni c cc hng khc v th hng la chn tip theo. Khi th ht cc la chn xut pht t im la chn , ta quay li im la chn trc v th hng la chn tip theo ti . Qu trnh tm kim tht bi khi khng cn im la chn no na. Quy trnh thng c ci t bng mt hm quy m trong mi th hin ca hm ly thm mt bin v ln lt gn tt c cc gi tr c th cho bin , vi mi ln gn tr li gi chui quy tip theo th cc bin tip theo. Chin lc quay lui tng t vi tm kim theo su nhng s dng t khng gian b nh hn, n ch lu gi trng thi ca mt li gii hin ti v cp nht n. Nhm SVTH: Nhm 10 Trang 4

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

tng tc qu trnh tm kim, khi mt gi tr c chn, trc khi thc hin li gi quy, thut ton thng xa b gi tr khi min xc nh ca cc bin c mu thun cha c gn (kim tra tin - forward checking) v kim tra tt c cc hng s tm cc gi tr khc b loi tr bi gi tr va c gn (lan truyn rng buc - constraint propagation).
2.2

Heuristic Ngi ta thng s dng mt s phng php heuristic tng tc cho qu

trnh quay lui. Do cc bin c th c x l theo th t bt k, vic th cc bin b rng buc cht nht (ngha l cc bin c t la chn v gi tr nht) thng c hiu qu do n ta cy tm kim t sm (cc i ha nh hng ca la chn sm hin hnh). Cc ci t quay lui phc tp thng s dng mt hm bin, hm ny kim tra xem t li gin cha y hin ti c th thu c mt li gii hay khng, ngha l nu i tip theo hng hin ti th liu c ch hay khng. Nh , mt kim tra bin pht hin ra cc li gii d dang chc chn tht bi c th nng cao hiu qu ca tm kim. Do hm ny hay c chy, c th ti mi bc, nn chi ph tnh ton cc bin cn ti hiu, nu khng, hiu qu ton cc ca thut ton s khng c ci tin. Cc hm kim tra bin c to theo kiu gn nh cc hm heuristic khc: ni lng mt s iu kin ca bi ton. Trong nhiu vn , vic tm nghim ca vn c quy v tm mt dy cc trng thi (a1, a2,, ak,), trong mi ai (i = 1,2,) l mt trng thi c chn ra t mt tp hu hn Ai cc trng thi, tho mn cc iu kin no . Tm kim vt cn i hi ta phi xem xt tt c cc dy trng thi tm ra dy trng thi tho mn cc yu cu ca bi ton. Chng ta s gi dy cc trng thi (a1, a2,, an) tho mn cc yu cu ca bi ton l vect nghim. tng ca k thut quay lui l ta xy dng vect nghim xut pht t vect rng, mi bc ta b xung thm mt thnh phn ca vect nghim, ln lt a1,a2,

Nhm SVTH: Nhm 10

Trang 5

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

u tin, tp S1 cc ng c vin c th l thnh phn u tin ca vect nghim chnh l A1. Chn a1 S1, ta c vect (a1). Gi s sau bc th i-1, ta tm c vect (a1,a2,,ai-1). Ta s gi cc vect nh th l nghim mt phn (n tho mn cc i hi ca bi ton, nhng cha y ). By gi ta m rng nghim mt phn (a1,a2,,ai-1) bng cch b xung thm thnh phn th i. Mun vy, ta cn xc nh tp Si cc ng c vin cho thnh phn th i ca vect nghim. Cn lu rng, tp Si c xc nh theo cc yu cu ca bi ton v cc thnh phn a1,a2,,ai-1 chn trc, v do Si l tp con ca tp Ai cc trng thi. C hai kh nng

Nu Si khng rng, ta chn ai Si v thu c nghim mt phn (a1,a2,,ai1

,ai), ng thi loi ai chn khi Si. Sau ta li tip tc m rng nghim mt

phn (a1,a2,,ai) bng cch p dng quy th tc m rng nghim.

Nu Si rng, iu ny c ngha l ta khng th m rng nghim mt

phn (a1,a2,,ai-2,ai-1), th ta quay li chn phn t mi ai-1 trong Si-1 lm thnh phn th i-1 ca vect nghim. Nu thnh cng (khi Si-1 khng rng) ta nhn c vect (a1,a2,,ai-2,ai-1) ri tip tc m rng nghim mt phn ny. Nu khng chn c ai-1 th ta quay lui tip chn ai-2 Khi quay lui chn a1 m S1 tr thnh rng th thut ton dng. Trong qu trnh m rng nghim mt phn, ta cn kim tra xem n c l nghim khng. Nu l nghim, ta ghi li hoc in ra nghim ny. K thut quay lui cho php ta tm ra tt c cc nghim ca bi ton.
Start K thut quay lui m ta trnh by thc cht l k thut i qua cy tm kim theo

su (i qua cy theo th t preorder). Cy tm kim c xy dng nh sau


trong hnh 1.

Cc nh con ca gc l cc trng thi ca S1 a


1

S1

Gi s ai-1 l mt nh mc th i-1 ca cy. Khi cc nh con

ca ai-1 s l cc trng thi thuc tp ng c vin Si. Cy tm kim c th hin

ai-1

Nhm SVTH: Nhm 10

ai

b e c

Trang 6

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

Hnh 1. Cy tm kim vect nghim Trong cy tm kim, mi ng i t gc ti mt nh tng ng vi mt nghim mt phn. Khi p dng k thut quay lui gii quyt mt vn , thut ton c thit k c th l quy hoc lp. Sau y ta s a ra lc tng qut ca thut ton quay lui. Lc thut ton quay lui quy. Gi s vector l nghim mt phn (a1,a2,,ai-1). Hm quy chn thnh phn th i ca vector nghim l nh sau: Backtrack(vector , i) // Chn thnh phn th i ca vector. { if (vector l nghim) vit ra nghim; Tnh Si; for (mi aiSi) Backtrack(vector + (ai) , i+1); }

Nhm SVTH: Nhm 10

Trang 7

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

Trong hm trn, nu vector l nghim mt phn (a1,,ai-1) th vector + (ai) l nghim mt phn (a1,a2,,ai-1,ai). tm ra tt c cc nghim, ta ch cn gi Backtrack(vector,1), vi vector l vector rng. Lc thut ton quay lui khng quy Backtrack { k = 1; Tnh S1; while (k>0) { if (Sk khng rng) { chn ak Sk; Loi ak khi Sk; if ((a1,,ak) l nghim) vit ra nghim; k++; Tnh Sk; } else k-- ; //Quay lui } } Ch rng, khi ci t thut ton theo lc khng quy, chng ta cn bit cch lu li vt ca cc tp ng vin S1, S2,,Sk khi quay lui ta c th chn c thnh phn mi cho vect nghim. V d 3. Thut ton quay lui cho bi ton 8 con hu. Hnh 16.2. m t mt nghim ca bi ton 8 con hu. 0 1 0 x 1 2 3 4 5 6 x Trang 8 7

Nhm SVTH: Nhm 10

Bi tp nhm mn hc: Cu trc d liu & gii thut 2 3 4 5 6 7 x x x x x x

Thut ton quay lui

Hnh 2. Mt nghim ca bi ton 8 con hu Nh trong v d 1, ta gi ct ca con hu dng i (i = 0,1,..,7) l x i. Nghim ca bi ton l vect (x0,x1,,x7), chng hn nghim trong hnh 2 l (0,6,4,7,1,3,5,2). Con hu 0 ( dng 0) c th c t mt trong tm ct. Do S0={0,1,,7}. Khi ta t con hu 0 ct 0 (x0=0), con hu 1 ct 6 (x1=6), nh trong hnh 16.2, th con hu 2 ch c th t mt trong cc ct 1,3,4. Tng qut, khi ta t cc con hu 0,1,2,,k-1 th con hu k (con hu dng k) ch c th t mt trong cc ct khc vi cc ct m cc con hu 0,1,2,,k-1 chim v khng cng ng cho vi chng. iu c nghi l khi chn c nghim mt phn (x0,x1,,xk-1) th xk ch c th ly trong tp ng vin Sk c xc nh nh sau Sk = {xk {0,1,,7} | xk xi v | i-k | | xk-xi | vi mi i < k} T ta c th a ra thut ton sau y cho bi ton 8 hu:

Nhm SVTH: Nhm 10

Trang 9

Bi tp nhm mn hc: Cu trc d liu & gii thut void { int k = 0; x[0] = -1; while (k>0) { x[k]++; if (x[k]<=7) { int i; for (i = 0 ; i < k ; i++) Queen(int x[8])

Thut ton quay lui

if ((x[k] == x[i]) | | (fabs(i-k) == fabs(x[k] - x[i]))) break; if (i == k) if (k == 7) vit ra mng x; else { k++; x[k] = -1; } } else k--; } } V d 4. Cc dy con c tng cho trc Cho mt dy s nguyn dng (a0,a1,,an-1) v mt s nguyn dng M. Ta cn tm cc dy con ca dy sao cho tng ca cc phn t trong dy con Nhm SVTH: Nhm 10 Trang 10 //quay lui // Ht vng lp while // kim tra xem x[k] c thuc Sk // ch khi x[k] Sk

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

bng M. Chng hn, vi dy s (7,1,4,3,5,6) v M=11, th cc dy con cn tm l (7,1,3), (7,4), (1,4,6) v (5,6). S dng k thut quay lui, ta xc nh dy con (ai0,ai1,,aik) sao cho ai0+ai1+ +aik = M bng cch chn ln lt ai0,ai1,Ta c th chn ai0 l mt trong a0,a1, ,an-1 m n <= M, tc l c th chn ai0 vi i0 thuc tp ng vin S0 = {i {0,1, ,n-1} | a i <= M}. Khi chn c (ai0,ai1,,aik-1) vi S = ai0 + ai1 + + aik-1 < M th ta c th chn aik vi ik l mt trong cc ch s bt u t ik-1+1 ti n-1 v sao cho S+aik <= M. Tc l, ta c th chn aik vi ik thuc tp Sk = {i {ik-1 +1,, n-1} | S+ai <= M}. Gi s dy s cho c lu trong mng A. Lu dy ch s {i 0,i1, ,ik} ca dy con cn tm vo mng I, ta c thut ton sau: void { SubSequences(int A[n], int M, int I[n]) k = 0; I[0] = -1; int S = 0; while (k > 0) { I[k]++; If (I[k] < n) { if (S + A[i[k]] <= M) if (S + A[i[k]] == M) vit ra mng I[0..k]; else { S = S + A[i[k]]; I[k+1] = I[k]; k++; } } else Nhm SVTH: Nhm 10 Trang 11

Bi tp nhm mn hc: Cu trc d liu & gii thut { } } } 2.3 ton ti u. K thut quay lui gii bi ton ti u k --; S = S - A[i[k]];

Thut ton quay lui

Trong mc ny chng ta s p dng k thut quay lui tm nghim ca bi Gi s nghim ca bi ton c th biu din di dng (a1,..,an), trong mi thnh phn ai (i = 1,,n) c chn ra t tp Si cc ng vin. Mi nghim (a1,..,an) ca bi ton c mt gi cost(a1,..,an) >= 0, v ta cn tm nghim c gi thp nht (nghim ti u). Gi s rng, gi ca cc nghim mt phn l khng gim, tc l nu (a1,..,ak-1) l nghim mt phn v (a1,..,ak-1,ak) l nghim m rng ca n th cost(a1,..,ak-1) <= cost(a1,..,ak-1,ak) Trong qu trnh m rng nghim mt phn (bng k thut quay lui), khi tm c nghim mt phn (a1,..,ak), nu bit rng tt c cc nghim m rng ca n (a1,..,ak,ak+1,...) u c gi ln hn gi ca nghim tt nht bit thi im , th ta khng cn m rng nghim mt phn (a1,..,ak) . Gi s cost*(a1,..,ak) l cn di ca gi ca tt c cc nghim (a1,..,ak,ak+1,...) m n l m rng ca nghim mt phn (a 1,..,ak). Gi s gi ca nghim tt nht m ta tm ra trong qu trnh tm kim l lowcost. (Ban u lowcost c khi to l + v gi tr ca n c cp nht trong qu trnh tm kim). Khi ta t ti nghim mt phn (a1,..,ak) m cost*(a1,..,ak) > lowcost th ta khng cn m rng nghim mt phn (a1,..,ak) na; iu c ngha l, trong cy tm kim hnh 16.1 ta ct b i tt c cc nhnh t nh ak.

Nhm SVTH: Nhm 10

Trang 12

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

T cc iu trnh by trn, ta a ra lc thut ton tm nghim ti u sau. Thut ton ny thng c gi l thut ton nhnhv--cn (branch and bound). BranchBound { lowcost = +; cost* = 0; k = 1; tnh S1; while (k > 0) { if (Sk khng rng v cost* <= lowcost) { chn ak Sk; Loi ak ra khi Sk; cost* = cost*(a1,..,ak); if ((a1,..,ak) l nghim) if (cost(a1,..,ak) < lowcost) lowcost = cost(a1,..,ak); k++; tnh Sk; } else { k--; cost* = cost(a1,..,ak); } } } Nhm SVTH: Nhm 10 Trang 13

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

u im ca thut ton nhnh v - cn l ch n cho php ta khng cn phi xem xt tt c cc nghim vn c th tm c nghim ti u. Ci kh nht trong vic p dng k thut nhnh v cn l xy dng hm nh gi cn di cost* ca cc nghim l m rng ca nghim mt phn. nh gi cn di c cht mi gip ta ct b c nhiu nhnh khng cn thit phi xem xt tip, v do thut ton nhn c mi nhanh hn ng k so vi thut ton tm kim vt cn.

Nhm SVTH: Nhm 10

Trang 14

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

CHNG 2: XUT GII PHP


1. Cu trc d liu t chc v x l bi ton. Phng php t chc d liu: Khai bo mng 2 chiu a[max, max] biu din bi ton di dng 1 ma trn k, nhm lu tr di ng i t nh i n nh j nu c. Phng php x l d liu: Truy xut n nh j v nh i (i l nh xut pht, j l nh n), + Nu a[i,j] = 0 th khng c ng i t nh i n nh j + Nu a[i,j] = b th c ng i t nh i n nh j vi khong cch l b. Ni dung phng php: Xc nh tun t cc nh c khong cch + Trc tin, nh c khong cch n a nh nht chnh l a, (vi d(a,a)=0) + Trong cc nh v a, tm nh a1 c khong cch k1 n a l nh nht. nh a1 ny phai l mt trong cc nh k vi a. Ta c d(a,a1) = k1 + Trong cc nh v a, v v a1, tm nh a c khong cch k2 n a l nh nht. nh ny phai l mt trong cc nh k vi a hoc vi a1. Ga s l a2, ta c d(a,a2)= k2 + Nu z = v th kt thc, d(a,z) = d(z) l chiu di ng i ngn nht t a n z c t ni dung ca phng php trn: Ta xc nh ng i ngn nht t nh ngun s ti cc nh cn li qua cc bc, mi bc ta xc nh ng i ngn nht t ngun ti mt nh. Ta lu cc nh xc nh ng i ngn nht t ngun ti chng vo tp S. Ban u tp S ch cha mt nh ngun s. Chng ta s gi ng i t ngun s ti nh v l Nhm SVTH: Nhm 10 Trang 15 n a t nh n ln cng chnh l phn t nm v tr (dng i ct j) trong mng:

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

ng i c bit, nu ng i ch i qua cc nh trong S, tc l cc ng i (s = v0, v1,,vk-1,vk = v), trong v0, v1, vk-1 S. Mt mng d c s dng lu di ca ng i c bit, d[v] l di ng i c bit t ngun ti v. Ban u v S ch cha mt nh ngun s, nn ta ly d[s] = 0, v d[v] = c(s,v) vi mi v s. Ti mi bc ta s chn mt nh u khng thuc S m d[u] nh nht v thm u vo S, ta xem d[u] l di ng i ngn nht t ngun ti u (sau ny ta s chng minh d[u] ng l di ng i ngn nht t ngun ti u). Sau khi thm u vo S, ta xc nh li cc d[v] vi v ngoi S. nu di ng i c bit qua nh u (va c chn) ti v nh hn d[v] th ta ly d[v] l di ng i . Bc trn y c lp li cho ti khi S gm tt c cc nh ca th, v lc mng d[u] s lu di ng i ngn nht t ngun ti u, vi mi uV. 2. Thut ton vi cu trc d liu s dng a. S dng ngn ng t nhin:

D liu vo: (file INPUT.TXT) Mng 2 chiu a[max,max] D liu ra: (file OUPUT.TXT)
ng i t a n z nu c. di ngn nht ca ng i trn. X l: (PROCESS) Bc 1: (Khi to): + Gn d(a) = 0; d(v) = d[a, v]; + truoc[v] = a; // trc nh v l nh a + Vi mi v Thuc V, t chuaxet =V ( l tp cc nh cha xt)

Bc 2: Chon v thuc chuaxet sao cho d(v) c gi tr nh nht, tc l: d(v)=min{d(u)| u thuc chuaxet}. t chuaxet = chuaxet {v} Bc 3: Nu z = v th kt thc, d(v) l chiu di ng i ngn nht t a n z. T z ln ngc theo nh c ghi nh ta c ng i ngn nht. Ngc li, nu z v, sang bc 4.

Nhm SVTH: Nhm 10

Trang 16

Bi tp nhm mn hc: Cu trc d liu & gii thut -

Thut ton quay lui

Bc 4: Vi mi u thuc chuaxet v u k vi v, nu d(u) > d(v) + w(v,u), th gn d(u) = d(v) + w(u,v), v ghi nh nh v cnh nh x sau ny xy dng ng i ngn nht, tc truoc[v] = u. Quay v bc 2. Kt thc.

b. S dng ngn ng ta (gi ng):

D liu vo: (file INPUT.TXT) Mng 2 chiu a[max,max] D liu ra: (file OUPUT.TXT)
ng i t a n z nu c. di ngn nht ca ng i trn. X l: (PROCESS) void Backtrack() { int u, v; for (v=0; v<n; v++) d[v] = a[dau][v]; truoc[v] = dau; d[dau] = 0; chuaxet[dau] = 0; while (chuaxet <> ) for (v=0; v<n; v++) if (d[v] > d[u] + a[u][v]) d[v] > d[u] + a[u][v] // neu qua u ma duong tu dau toi v ngan hon (u thuc chuaxet) chuaxet = chuaxet {u} truoc[v] = u; Return (d(z)) // * z = un }

Kt thc.

Nhm SVTH: Nhm 10

Trang 17

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

Nhm SVTH: Nhm 10

Trang 18

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

CHNG 3: CI T V KT QU CHY TH NGHIM


1. Ci t chng trnh trn C++:
#include<stdio.h> #include<conio.h> #include<mem.h> #define MAX 20 #define FILEDL "INPUT.txt" int a[MAX][MAX], n, c,b, T[MAX], d[MAX], truoc[MAX], chuaxet[MAX], dau, cuoi; // ma tran ke cua do thi // so dinh cua do thi // ten cac dinh // tap dinh // do dai tu dinh s den dinh bat ky // thu tu cac dinh // danh dau cac dinh chua xet // dinh xuat phat va ket thuc cua duong di

//******** Ham doc File INPUT.TXT *********** int DocFile() { FILE *f; unsigned i, j; f = fopen(FILEDL, "rt"); // *** M file if (f == NULL) { return 0; // *** That bai } else //**** Bat dau doc du lieu fscanf(f, "%d", &n); fscanf(f, "%d", &c); Nhm SVTH: Nhm 10 Trang 19

Bi tp nhm mn hc: Cu trc d liu & gii thut fscanf(f, "%d", &b); for (i=0; i<n; i++) for (j=0; j<n; j++) fscanf(f, "%d", &a[i][j]); fclose(f); // *** Dong FILE return 1; } // ******** Ham xuat FILE ******** void Xuat_INPUT() { int i, j; printf("%5d\n\n",n); printf("%5d",c); printf("%5d\n\n",b); for(i=0; i<n; i++) { for(j=0; j<n; j++) printf("%5d", a[i][j]); printf("\n\n"); } } /* ******* Ham tim dinh u chua xet ma

Thut ton quay lui

ke voi dinh dang xet co d[u] nho nhat ***** */ int TimDinh() { int i, a=0; while ((chuaxet[a]==0 || d[a]==0) && a < n) a++; for (i = a+1; i<n; i++) if (chuaxet[i] && d[i] > 0 && d[i] < d[a]) a = i; return a; } Nhm SVTH: Nhm 10 Trang 20

Bi tp nhm mn hc: Cu trc d liu & gii thut // ***** Ham In duong di ngan nhat tim duoc ****** void InKetQua() { int i;

Thut ton quay lui

FILE *g=fopen("d:\\OUTPUT.txt","wt"); //*** Ghi file if (d[cuoi] == 0) { printf("Khong co duong di.\n\n"); return; } printf("- Duong di ngan nhat tu %d den %d la:", dau+1,cuoi+1); printf("\n\n"); i = cuoi; printf("%3d <==", cuoi+1); fprintf(g,"%3d <==", cuoi+1); while (i != dau) { i = truoc[i]; printf("%3d <==", i+1); fprintf(g,"%3d <==", i+1); } printf("\n\n- Co do dai: %d\n", d[cuoi]); fprintf(g,"\n\n%3d", d[cuoi]); fclose(g); } //*** ng file

Nhm SVTH: Nhm 10

Trang 21

Bi tp nhm mn hc: Cu trc d liu & gii thut // ***** Ham Backtrack tim duong di ngan nhat ***** void Backtrack() { int u, v; //*** Khoi tao memset(chuaxet, 1, sizeof(chuaxet)); for (v=0; v<n; v++) { d[v] = a[dau][v]; truoc[v] = dau; } d[dau] = 0; chuaxet[dau] = 0; //*** Buoc lap while (1) { u = TimDinh(); if (u >= n || d[u] == 0) { } chuaxet[u] = 0; for (v=0; v<n; v++) if (chuaxet[v] && a[u][v] > 0 && (d[v] == 0 || d[v] > d[u] + a[u][v])) // neu qua u ma duong tu dau toi v ngan hon { d[v] = d[u] + a[u][v]; truoc[v] = u; } } } Nhm SVTH: Nhm 10 InKetQua(); break; // *** da xet het dinh

Thut ton quay lui

Trang 22

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

//****** Chuong trinh chinh ******* void main() { clrscr(); if (DocFile()==0) printf("Khong co file nay:\n"); else { printf("file INPUT.TXT co dang:\n\n"); Xuat_INPUT(); printf("\nNhap vao dinh dau [1->%d]: ", n); scanf("%d", &dau); printf("\nNhap vao dinh cuoi [1->%d]: ", n); scanf("%d", &cuoi); dau--; cuoi--; printf("\n"); Backtrack(); } getch(); }

Nhm SVTH: Nhm 10

Trang 23

Bi tp nhm mn hc: Cu trc d liu & gii thut 2. Kt qu chy chng trnh

Thut ton quay lui

Kt qu ca c v xut file INPUT.TXT :

Kt qu ca qu trnh tm ng i :

Kt qu ca qu trnh ghi file d:\\ OUTPUT.TXT :

Nhm SVTH: Nhm 10

Trang 24

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

Kt lun
1. t c:
tm hiu r hn v thut ton quay lui. Phng php p dng thut ton vo bi ton c th. t c yu cu bi ton ra: + c file INPUT.TXT cho trc vo chng trnh. + Ghi file kt qu OUTPUT.TXT t chng trnh. + Tm c ng i vi di ngn nht theo yu cu.

2. Hn ch: - Tuy tm hiu nhiu v thut ton quay lui nhng khng trnh khi s sai st v cn mt s im cn kh hiu trong thut ton. - p dng thut ton vo mt s bi ton phc tp cn gp nhiu kh khn. - Tuy c gng gii bi ton theo yu cu ra nhng cn im cha gii quyt c l: + Cha in c ng i theo chiu xui nh ra l: 12435 + M in theo chiu ngc li l: 5 3 4 2 1 3. Kin ngh v hng pht trin

Nhm SVTH: Nhm 10

Trang 25

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

Ti liu tham kho

Nhm SVTH: Nhm 10

Trang 26

Bi tp nhm mn hc: Cu trc d liu & gii thut

Thut ton quay lui

MC LC

Nhm SVTH: Nhm 10

Trang 27

You might also like