file 11143
TRANSCRIPT
-
7/31/2019 File 11143
1/120
-
7/31/2019 File 11143
2/120
L thuyt th
L Minh Hong
1
MC LC
0. MU .......................................................................................................................................... 31. CC KHI NIM CBN.............................................................................................................. 4
I. NH NGHA TH (GRAPH) ..................................................................................................................4
II. CC KHI NIM..........................................................................................................................................52. BIU DINTH TRN MY TNH............................................................................................6
I. MA TRN LIN K (MA TRN K) ..........................................................................................................6II. DANH SCH CNH.....................................................................................................................................7III. DANH SCH K .........................................................................................................................................7IV. NHN XT...................................................................................................................................................8
3. CC THUT TON TM KIM TRNTH .............................................................................10I. BI TON.....................................................................................................................................................10
II. THUT TON TM KIM THEO CHIU SU (DEPTH FIRST SEARCH)..........................................11
III. THUT TON TM KIM THEO CHIU RNG (BREADTH FIRST SEARCH)...............................16IV. PHC TP TNH TON CA BFS V DFS...................................................................................21
4. TNH LIN THNG CA TH .................................................................................................22I. NH NGHA................................................................................................................................................22II. TNH LIN THNG TRONG TH V HNG................................................................................23III. THY V THUT TON WARSHALL ..............................................................................23IV. CC THNH PHN LIN THNG MNH ...........................................................................................26
5. VING DNG CA CC THUT TON TM KIM TRNTH ........................................36I. XY DNG CY KHUNG CA TH .................................................................................................36
II. TP CC CHU TRNH C BN CA TH.......................................................................................38III. NH CHIU TH V BI TON LIT K CU...........................................................................39IV. LIT K KHP..........................................................................................................................................44I. BI TON 7 CI CU ................................................................................................................................47II. NH NGHA...............................................................................................................................................47III. NH L.....................................................................................................................................................47IV. THUT TON FLEURY TM CHU TRNH EULER.............................................................................48V. CI T......................................................................................................................................................48VI. THUT TON TT HN.........................................................................................................................50
7. CHU TRNH HAMILTON, NGI HAMILTON,TH HAMILTON....................................53I. NH NGHA................................................................................................................................................53II. NH L ......................................................................................................................................................53III. CI T.....................................................................................................................................................53
8. BI TONNGI NGN NHT........................................................................................... 57I. TH C TRNG S...............................................................................................................................57II. BI TON NGI NGN NHT......................................................................................................57III. TRNG HP TH KHNG C CHU TRNH M - THUT TON FORD BELLMAN...........58IV. TRNG HP TRNG S TRN CC CUNG KHNG M - THUT TON DIJKSTRA.............60
V. THUT TON DIJKSTRA V CU TRC HEAP.................................................................................63VI. TRNG HP TH KHNG C CHU TRNH - THTT P ................................................65
-
7/31/2019 File 11143
3/120
L thuyt th
L Minh Hong
2
VII. NGI NGN NHT GIA MI CPNH - THUT TON FLOYD ...................................68VIII. NHN XT..............................................................................................................................................70
9. BI TON CY KHUNG NHNHT .......................................................................................... 72I. BI TON CY KHUNG NH NHT......................................................................................................72II. THUT TON KRUSKAL (JOSEPH KRUSKAL - 1956) .......................................................................72
III. THUT TON PRIM (ROBERT PRIM - 1957) .......................................................................................7610. BI TON LUNG CCI TRN MNG.............................................................................. 80
I. BI TON.....................................................................................................................................................80
II. LT CT, NG TNG LUNG, NH L FORD - FULKERSON.................................................80III. CI T.....................................................................................................................................................82IV. THUT TON FORD - FULKERSON (L.R.FORD & D.R.FULKERSON - 1962) ...............................85
11. BI TON TM BGHP CCI TRNTH HAI PHA.................................................89I. TH HAI PHA (BIPARTITE GRAPH) .................................................................................................89II. BI TON GHP I KHNG TRNG V CC KHI NIM...........................................................89
III. THUT TONNG M ....................................................................................................................90IV. CI T.....................................................................................................................................................90
12. BI TON TM B GHP CCI VI TRNG S CC TIU TRN TH HAI PHA -THUT TON HUNGARI....................................................................................................................95
I. BI TON PHN CNG ............................................................................................................................95
II. PHN TCH .................................................................................................................................................95
III. THUT TON ...........................................................................................................................................96IV. CI T...................................................................................................................................................100V. BI TON TM B GHP CC I VI TRNG S CCI TRN TH HAI PHA..........105
VI. PHC TP TNH TON..................................................................................................................10613. BI TON TM BGHP CCI TRNTH................................................................111
I. CC KHI NIM .......................................................................................................................................111II. THUT TON EDMONDS (1965) ..........................................................................................................112III. PHNG PHP LAWLER (1973)..........................................................................................................113IV. CI T...................................................................................................................................................115V. PHC TP TNH TON ...................................................................................................................119
-
7/31/2019 File 11143
4/120
L thuyt th
L Minh Hong
3
0. MU
Trn thc t c nhiu bi ton lin quan ti mt tp cc i tng v nhng milin h gia chng, i hi ton hc phi t ra mt m hnh biu din mt cchcht ch v tng qut bng ngn ng k hiu, l th. Nhng tng cbnca n c a ra t th k th XVIII bi nh ton hc Thu SLeonhard Euler,ng dng m hnh th gii bi ton v nhng cy cu Konigsberg niting.
Mc d L thuyt th c khoa hc pht trin t rt lu nhng li c nhiu ng dng hini. c bit trong khong vi mi nm trli y, cng vi s ra i ca my tnh in t v s
pht trin nhanh chng ca Tin hc, L thuyt th cng c quan tm n nhiu hn. c bitl cc thut ton trn th c nhiu ng dng trong nhiu lnh vc khc nhau nh: Mng mytnh, L thuyt m, Ti u ho, Kinh t hc v.v... Chng hn nh tr li cu hi: Hai my tnh trong
mng c th lin hc vi nhau hay khng ?; hay vn phn bit hai hp cht ho hc c cngcng thc phn t nhng li khc nhau v cng thc cu to cng c gii quyt nhm hnh th. Hin nay, mn hc ny l mt trong nhng kin thc csca b mn khoa hc my tnh.
Trong phm vi mt chuyn , khng th ni k v ni ht nhng vn ca l thuyt th. Tpbi ging ny s xem xt l thuyt th di gc ngi lp trnh, tc l kho st nhng thutton cbn nht c thd dng ci t trn my tnh mt sng dng ca n. Cc khi nimtru tng v cc php chng minh sc din gii mt cch hnh thc cho n gin v d hiuch khng phi l nhng chng minh cht ch dnh cho ngi lm ton. Cng vic ca ngi lp
trnh l c hiu c tng cbn ca thut ton v ci t c chng trnh trong bi tontng qut cng nh trong trng hp c th. Thng thng sau qu trnh rn luyn, hu ht nhngngi lp trnh gn nh phi thuc lng cc m hnh ci t, khi p dng c th ci t ngngay v hiu qu, khng b mt thi givo cc cng vic gri. Bi vic gri mt thut ton tcl phi d li tng bc tin hnh v t tr li cu hi: "Ti bc nu ng th phi nh th no?", thc ra l tiu ph thi gian v ch chng minh li tnh ng n ca thut ton trongtrng hp c th, vi mt b d liu c th.
Trc khi tm hiu cc vn v l thuyt th, bn phi c k thut lp trnh kh tt, ngoi ra
nu c tm hiu trc v cc k thut vt cn, quay lui, mt s phng php ti u ho, cc biton quy hoch ng th s gip ch nhiu cho vic c hiu cc bi ging ny.
-
7/31/2019 File 11143
5/120
L thuyt th
L Minh Hong
4
1. CC KHI NIM C BN
I. NH NGHA TH (GRAPH)
L mt cu trc ri rc gm cc nh v cc cnh ni cc nh . c m t hnh thc:G = (V, E)
V gi l tp cc nh (Vertices) v E gi l tp cc cnh (Edges). C th coi E l tp cc cp (u, v)vi u v v l hai nh ca V.Mt s hnh nh ca th:
S giao thng Mng my tnh
Hnh 1:V d v m hnh th
C th phn loi th theo c tnh v s lng ca tp cc cnh E:Cho th G = (V, E). nh ngha mt cch hnh thc1. G c gi l n th nu gia hai nh u, v ca V c nhiu nht l 1 cnh trong E ni t u
ti v.2. G c gi l a th nu gia hai nh u, v ca V c th c nhiu hn 1 cnh trong E ni t u
ti v (Hin nhin n th cng l a th).3. G c gi l thv hng nu cc cnh trong E l khng nh hng, tc l cnh ni hai
nh u, v bt k cng l cnh ni hai nh v, u. Hay ni cch khc, tp E gm cc cp (u, v)
khng tnh th t. (u, v)(v, u)4. G c gi l thc hng nu cc cnh trong E l c nh hng, c th c cnh ni t
nh u ti nh v nhng cha chc c cnh ni tnh v ti nh u. Hay ni cch khc, tp E
gm cc cp (u, v) c tnh th t: (u, v) (v, u). Trong th c hng, cc cnh c gi lcc cung. th v hng cng c th coi l th c hng nu nh ta coi cnh ni hai nhu, v bt k tng ng vi hai cung (u, v) v (v, u).
V d:
V hng C hng V hng C hng
n th a th
Hnh 2:Phn loi th
-
7/31/2019 File 11143
6/120
L thuyt th
L Minh Hong
5
II. CC KHI NIM
Nh trn nh ngha th G = (V, E) l mt cu trc ri rc, tc l cc tp V v E hoc l tphu hn, hoc l tp m c, c ngha l ta c thnh s th t 1, 2, 3... cho cc phn t ca tpV v E. Hn na, ng trn phng din ngi lp trnh cho my tnh th ta ch quan tm n cc th hu hn (V v E l tp hu hn) m thi, chnh v vy ty v sau, nu khng ch thch g
thm th khi ni ti th, ta hiu rng l th hu hn.
Cnh lin thuc, nh k, bc
i vi th v hng G = (V, E).Xt mt cnh e E, nu e = (u, v) th ta ni hai nh u v vl k nhau (adjacent) v cnh e ny lin thuc (incident) vi nh u v nh v.
Vi mt nh v trong th, ta nh ngha bc (degree) ca v, k hiu deg(v) l s cnh linthuc vi v. D thy rng trn n th th s cnh lin thuc vi v cng l snh k vi v.
nh l: Gi s G = (V, E) l th v hng vi m cnh, khi tng tt c cc bc nh trong V
s bng 2m:
m2)vdeg(Vv
=
Chng minh: Khi ly tng tt c cc bc nh tc l mi cnh e = (u, v) bt k sc tnh mt lntrong deg(u) v mt ln trong deg(v). T suy ra kt qu.
H qu: Trong th v hng, snh bc l l s chn
i vi th c hng G = (V, E). Xt mt cung e E, nu e = (u, v) th ta ni u ni ti v vv ni tu, cung e l i ra khi nh u v i vo nh v. nh u khi c gi l nh u,
nh v c gi l nh cui ca cung e. Vi mi nh v trong th c hng, ta nh ngha: Bn bc ra ca v k hiu deg+(v) l s
cung i ra khi n; bn bc vo k hiu deg-(v) l s cung i vo nh nh l: Gi s G = (V, E) l th c hng vi m cung, khi tng tt c cc bn bc ra ca ccnh bng tng tt c cc bn bc vo v bng m:
+
==VvVv
m)v(deg)v(deg
Chng minh: Khi ly tng tt c cc bn bc ra hay bn bc vo, mi cung (u, v) bt k sctnh ng 1 ln trong deg+(u) v cng c tnh ng 1 ln trong deg-(v). T suy ra kt qu
Mt s tnh cht ca th c hng khng ph thuc vo hng ca cc cung. Do tin trnhby, trong mt s trng hp ta c th khng quan tm n hng ca cc cung v coi cc cung l cc cnh ca th v hng. V th v hng c gi l th v hng nn ca thc hng ban u.
-
7/31/2019 File 11143
7/120
L thuyt th
L Minh Hong
6
2. BIU DIN TH TRN MY TNH
I. MA TRN LIN K (MA TRN K)
Gi s G = (V, E) l mt n th c snh (k hiu V) l n, Khng mt tnh tng qut cth coi cc nh c nh s 1, 2, ..., n. Khi ta c th biu din th bng mt ma trn vung
A = [aij] cp n. Trong :
aij = 1 nu (i, j) E
aij = 0 nu (i, j) E
Quy c aii = 0 vi i;i vi a th th vic biu din cng tng t trn, ch c iu nu nh (i, j) l cnh th khng
phi ta ghi s 1 vo v tr aij m l ghi s cnh ni gia nh i v nh jV d:
1 2 3 4 5
1 0 0 1 1 0
2 0 0 0 1 1
3 1 0 0 0 1
4 1 1 0 0 0
5 0 1 1 0 0
1
4 3
5 2
1 2 3 4 5
1 0 0 1 0 0
2 0 0 0 1 0
3 0 0 0 0
14 1 0 0 0 0
5 0 1 0 0 0
1
4 3
5 2
Cc tnh cht ca ma trn lin k:1. i vi th v hng G, th ma trn lin k tng ng l ma trn i xng (aij = aji), iu ny
khng ng vi th c hng.2. Nu G l th v hng v A l ma trn lin k tng ng th trn ma trn A:
Tng cc s trn hng i = Tng cc s trn ct i = Bc ca nh i = deg(i)
3. Nu G l th c hng v A l ma trn lin k tng ng th trn ma trn A: Tng cc s trn hng i = Bn bc ra ca nh i = deg+(i)
Tng cc s trn ct i = Bn bc vo ca nh i = deg-(i)Trong trng hp G l n th, ta c th biu din ma trn lin k A tng ng l cc phn t
logic. aij = TRUE nu (i, j) E v aij = FALSE nu (i, j) Eu im ca ma trn lin k:
n gin, trc quan, d ci t trn my tnh
kim tra xem hai nh (u, v) ca th c k nhau hay khng, ta ch vic kim tra bng mt
php so snh: auv 0.
Nhc im ca ma trn lin k:
-
7/31/2019 File 11143
8/120
L thuyt th
L Minh Hong
7
Bt k s cnh ca th l nhiu hay t, ma trn lin k lun lun i hi n2 nh lu ccphn t ma trn, iu gy lng ph b nhdn ti vic khng th biu din c th vi snh ln.
Vi mt nh u bt k ca th, nhiu khi ta phi xt tt c cc nh v khc k vi n, hoc xt ttc cc cnh lin thuc vi n. Trn ma trn lin k vic c thc hin bng cch xt tt c cc
nh v v kim tra iu kin auv 0. Nh vy, ngay c khi nh u l nh c lp (khng k vi nhno) hoc nh treo (ch k vi 1 nh) ta cng buc phi xt tt c cc nh v kim tra iu kintrn dn ti lng ph thi gian
II. DANH SCH CNH
Trong trng hp th c n nh, m cnh, ta c th biu din th di dng danh sch cnh,trong cch biu din ny, ngi ta lit k tt c cc cnh ca th trong mt danh sch, mi phnt ca danh sch l mt cp (u, v) tng ng vi mt cnh ca th. (Trong trng hp th chng th mi cp (u, v) tng ng vi mt cung, u l nh u v v l nh cui ca cung). Danh
sch c lu trong b nhdi dng mng hoc danh sch mc ni. V d vi th di y:1
4 3
5 2
Ci t trn mng:1 2 3 4 5
(1, 3) (2, 4) (3, 5) (4, 1) (5, 2)
Ci t trn danh sch mc ni:1 3 2 4 3 5 4 1 5 2
nil
u im ca danh sch cnh:
Trong trng hp th tha (c s cnh tng i nh: chng hn m < 6n), cch biu dinbng danh sch cnh s tit kim c khng gian lu tr, bi n ch cn 2m nh lu danhsch cnh.
Trong mt s trng hp, ta phi xt tt c cc cnh ca th th ci t trn danh sch cnhlm cho vic duyt cc cnh d dng hn. (Thut ton Kruskal chng hn)
Nhc im ca danh sch cnh:
Nhc im cbn ca danh sch cnh l khi ta cn duyt tt c cc nh k vi nh v no ca th, th chng c cch no khc l phi duyt tt c cc cnh, lc ra nhng cnh c chanh v v xt nh cn li. iu kh tn thi gian trong trng hp th dy (nhiu cnh).
III. DANH SCH K
khc phc nhc im ca cc phng php ma trn k v danh sch cnh, ngi ta xutphng php biu din th bng danh sch k. Trong cch biu din ny, vi mi nh v ca
th, ta cho tng ng vi n mt danh sch cc nh k vi v.Vi th G = (V, E). V gm n nh v E gm m cnh. C hai cch ci t danh sch k ph bin:
-
7/31/2019 File 11143
9/120
L thuyt th
L Minh Hong
8
1 2
34
5
Cch 1: (Forward Star) Dng mt mng cc nh, mng chia lm n on, on th i trong mng
lu danh sch cc nh k vi nh i: V d vi th sau, danh sch k s l mt mng A gm 12phn t:
1 2 3 4 5 6 7 8 9 10 11 12
2 3 5 1 3 1 2 4 3 5 1 4
on 1 on 2 on 3 on 4 on 5
bit mt on nm t ch s no n ch s no, ta c mt mng lu v tr ring. Ta gi mng luv tr l mng Head. Head[i] s bng ch sng lin trc on th i. Quy c Head[n + 1] s
bng m. Vi th bn th mng VT[1..6] s l: (0, 3, 5, 8, 10, 12)Nh vy on t v tr Head[i] + 1 n Head[i + 1] trong mng A s cha cc nh k vi nh i.
Lu rng vi th c hng gm m cung th cu trc Forward Star cn phi cha m phn t,vi th v hng m cnh th cu trc Forward Star cn phi cha 2m phn tCch 2: Dng cc danh sch mc ni: Vi mi nh i ca th, ta cho tng ng vi n mt danhsch mc ni cc nh k vi i, c ngha l tng ng vi mt nh i, ta phi lu li List[i] l chtca mt danh sch mc ni. V d vi th trn, danh sch mc ni s l:List[1] 2 3 5 Nil
List[2] 1 3 Nil
List[3] 1 2 4 Nil
List[4] 3 5 Nil
List[5] 1 4 Nil
u im ca danh sch k:
i vi danh sch k, vic duyt tt c cc nh k vi mt nh v cho trc l ht sc d dng,ci tn "danh sch k" cho thy r iu ny. Vic duyt tt c cc cnh cng n gin v mtcnh thc ra l ni mt nh vi mt nh khc k n.
Nhc im ca danh sch k
V l thuyt, so vi hai phng php biu din trn, danh sch k tt hn hn. Ch c iu,
trong trng hp c th m ma trn k hay danh sch cnh khng th hin nhc im th tann dng ma trn k (hay danh sch cnh) bi ci t danh sch k c phn di dng hn.
IV. NHN XT
Trn y l nu cc cch biu din th trong b nhca my tnh, cn nhp d liu cho th thc nhiu cch khc nhau, dng cch no th tu. Chng hn nu biu din bng ma trn k m chonhp d liu c ma trn cp n x n (n l snh) th khi nhp t bn phm s rt mt thi gian, ta chonhp kiu danh sch cnh cho nhanh. Chng hn mng A (nxn) l ma trn k ca mt th vhng th ta c th khi to ban u mng A gm ton s 0, sau cho ngi s dng nhp cc
cnh bng cch nhp cc cp (i, j); chng trnh s tng A[i, j] v A[j, i] ln 1. Vic nhp c th chokt thc khi ngi s dng nhp gi tr i = 0. V d:program Nhap_Do_Thi;
-
7/31/2019 File 11143
10/120
L thuyt th
L Minh Hong
9
varA: array[1..100, 1..100] of Integer; {Ma trn k ca th}n, i, j: Integer;
beginWrite('Number of vertices'); ReadLn(n);FillChar(A, SizeOf(A), 0);repeatWrite('Enter edge (i, j) (i = 0 to exit)');ReadLn(i, j); {Nhp mt cp (i, j) tng nh l nhp danh sch cnh}if i 0 thenbegin {nhng lu tr trong b nh li theo kiu ma trn k}Inc(A[i, j]);Inc(A[j, i]);
end;until i = 0; {Nu ngi s dng nhp gi tr i = 0 th dng qu trnh nhp, nu khng th tip tc}
end.
Trong nhiu trng hp khng gian lu tr, vic chuyn i t cch biu din no sang cchbiu din khc khng c g kh khn. Nhng i vi thut ton ny th lm trn ma trn k ngngn hn, i vi thut ton kia c th lm trn danh sch cnh d dng hn v.v... Do , vi mc
ch d hiu, cc chng trnh sau ny s la chn phng php biu din sao cho vic ci t ngin nht nhm nu bt c bn cht thut ton. Cn trong trng hp c th bt buc phi dngmt cch biu din no khc, th vic sa i chng trnh cng khng tn qu nhiu thi gian.
-
7/31/2019 File 11143
11/120
L thuyt th
L Minh Hong
10
3. CC THUT TON TM KIM TRN TH
I. BI TON
Cho th G = (V, E). u v v l hai nh ca G. Mt ng i (path) di l tnh u n nh v
l dy (u = x0, x1, ..., xl = v) tho mn (xi, xi+1) E vi i: (0 i < l).
ng i ni trn cn c th biu din bi dy cc cnh: (u = x0, x1), (x1, x2), ..., (xl-1, xl = v)nh u c gi l nh u, nh v c gi l nh cui ca ng i. ng i c nh u trngvi nh cui gi l chu trnh (Circuit), ng i khng c cnh no i qua hn 1 ln gi l ngi n, tng t ta c khi nim chu trnh n.V d: Xt mt th v hng v mt th c hng di y:
1
2 3
4
56
1
2 3
4
56
Trn c hai th, (1, 2, 3, 4) l ngi n di 3 tnh 1 ti nh 4. Bi (1, 2) (2, 3) v (3,4) u l cc cnh (hay cung). (1, 6, 5, 4) khng phi ngi bi (6, 5) khng phi l cnh (haycung).
Mt bi ton quan trng trong l thuyt th l bi ton duyt tt c cc nh c thn c tmt nh xut pht no . Vn ny a v mt bi ton lit k m yu cu ca n l khng c
b st hay lp li bt knh no. Chnh v vy m ta phi xy dng nhng thut ton cho phpduyt mt cch h thng cc nh, nhng thut ton nh vy gi l nhng thut ton tm kimtrn th v y ta quan tm n hai thut ton cbn nht: thut ton tm kim theo chiusu v thut ton tm kim theo chiu rng cng vi mt sng dng ca chng.Lu :1. Nhng ci t di y l cho n th v hng, mun lm vi th c hng hay a th
cng khng phi sa i g nhiu.2. D liu v th sc nhp t file vn bn GRAPH.INP. Trong :
Dng 1 cha snh n ( 100), s cnh m ca th, nh xut pht S, nh kt thc F cchnhau mt du cch.
m dng tip theo, mi dng c dng hai s nguyn dng u, v cch nhau mt du cch, thhin c cnh ni nh u v nh v trong th.
3. Kt qu ghi ra file vn bn GRAPH.OUT
Dng 1: Ghi danh sch cc nh c thn c t S
Dng 2: ng i t S ti F c in ngc theo chiu t F v S
-
7/31/2019 File 11143
12/120
L thuyt th
L Minh Hong
11
GRAPH.INP GRAPH.OUT
1
2
3 5
4
6
7
8
8 7 1 51 21 32 32 43 5
4 67 8
1, 2, 3, 5, 4, 6,5;beginTrace[v] := u; {Lu vt ngi,nh m t ti v l u}DFS(v); {Gi quy duyt tng ti vi v}
end;end;
begin {Chng trnh chnh}< Nhp d liu: th, nh xut pht S, nh ch F >;
< Khi to: Tt c cc nh u cha bnh du >;DFS(S);< Nu F cha bnh du th khng th c ng i t S ti F >;< Nu F bnh du th truy theo vt tm ng i t S ti F >;
end.
PROG03_1.PAS * Thut ton tm kim theo chiu su
program Depth_First_Search_1;constmax = 100;
vara: array[1..max, 1..max] of Boolean; {Ma trn k ca th}Free: array[1..max] of Boolean; {Free[v] = True v chac thmn}Trace: array[1..max] of Integer; {Trace[v] =nh lin trc v trnngi t S ti v}n, S, F: Integer;
-
7/31/2019 File 11143
13/120
L thuyt th
L Minh Hong
12
procedure Enter; {Nhp d liu t thit b nhp chun (Input)}vari, u, v, m: Integer;
beginFillChar(a, SizeOf(a), False); {Khi to th cha c cnh no}ReadLn(n, m, S, F); {c dng 1 ra 4 s n, m, S v F}for i := 1 to m do {c m dng tip ra danh sch cnh}beginReadLn(u, v);a[u, v] := True;a[v, u] := True;
end;end;
procedure DFS(u: Integer); {Thut ton tm kim theo chiu su bt u tnh u}varv: Integer;
beginWrite(u, ', '); {Thng bo ti c u}Free[u] := False; {nh du u thm}for v := 1 to n doif Free[v] and a[u, v] then {Vi mi nh v cha thm k vi u}beginTrace[v] := u; {Lu vt ngi:nh lin trc v trong ngi t S ti v l u}DFS(v); {Tip tc tm kim theo chiu su bt u t v}
end;end;
procedure Result; {Inngi t S ti F}beginWriteLn; {Vo dng th hai ca Output file}if Free[F] then {Nu F chanh du thm tc l khng c ng}WriteLn('Path from ', S, ' to ', F, ' not found')
else {Truy vt ngi, bt u t F}beginwhile F S dobeginWrite(F, '
-
7/31/2019 File 11143
14/120
L thuyt th
L Minh Hong
13
c) C th chng cn dng mng nh du Free, ta khi to mng lu vt Trace ban u ton 0,mi ln tnh u thm nh v, ta c thao tc gn vt Trace[v] := u, khi Trace[v] s khc 0.Vy vic kim tra mt nh v l cha c thm ta c th kim tra Trace[v] = 0. Ch : banu khi to Trace[S] := -1 (Ch l cho khc 0 thi).
procedure DFS(u: Integer); {Ci tin}var
v: Integer;beginWrite(u, ', ');for v := 1 to n doif (Trace[v] = 0) and A[u, v] then {Trace[v] = 0 thay v Free[v] = True}beginTrace[v] := u; {Lu vt cng l nh du lun}DFS(v);
end;end;
V d: Vi th sau y, nh xut pht S = 1: qu trnh duyt quy c th v trn cy tm kim
DFS sau (Mi tn uv ch thao tc quy: DFS(u) gi DFS(v)).
1st
1
2
3 5
4
6
7
81
2
3 5
4
6
7
8
2nd
3rd 4th
5th
6th
Hnh 3:Cy DFSHi:nh 2 v 3u k vi nh 1, nhng ti sao DFS(1) ch gi quy ti DFS(2) m khng gi DFS(3) ?.Tr li:ng l c 2 v 3 u k vi 1, nhng DFS(1) s tm thy 2 trc v gi DFS(2). Trong DFS(2) s xt tt c ccnh k vi 2
m cha nh du th dnhin trc ht n tm thy 3 v gi DFS(3), khi 3 bnh du nn khi kt thc qu trnh quy giDFS(2), li vDFS(1) th nh 3 c thm ( bnh du) nn DFS(1) s khng gi DFS(3) na.Hi: Nu F = 5 th ngi t 1 ti 5 trong chng trnh trn s in ra th no ?.Tr li: DFS(5) do DFS(3) gi nn Trace[5] = 3. DFS(3) do DFS(2) gi nn Trace[3] = 2. DFS(2) do DFS(1) gi nn Trace[2] = 1. Vy
ngi l: 5 3 2 1.
Vi cy th hin qu trnh quy DFS trn, ta thy nu dy chuyn quy l: DFS(S) DFS
(u1) DFS(u2) ... Th th tc DFS no gi cui dy chuyn s c thot ra u tin, th tcDFS(S) gi u dy chuyn sc thot cui cng. Vy nn chng, ta c th m t dy chuyn quy bng mt ngn xp (Stack).
2. Ci t khng quy
Khi m t qu trnh quy bng mt ngn xp, ta lun lun cho ngn xp lu li dy chuynduyt su t nt gc (nh xut pht S).
;; {Dy chuyn quy banu ch c mt nh S}repeat; {angngnh u}if thenbegin;;; {Gi li a ch quay lui}; {Dy chuyn duyt suc "ni" thm v na}
end; {Cn nu u khng c nh k cha thm th ngn xp s ngn li, tngng vi qu trnh li v ca dy chuyn DFS}until ;
-
7/31/2019 File 11143
15/120
L thuyt th
L Minh Hong
14
PROG03_2.PAS * Thut ton tm kim theo chiu su khng quy
program Depth_First_Search_2;constmax = 100;
vara: array[1..max, 1..max] of Boolean;
Free: array[1..max] of Boolean;Trace: array[1..max] of Integer;Stack: array[1..max] of Integer;n, S, F, Last: Integer;
procedure Enter; {Nhp d liu (t thit b nhp chun)}vari, u, v, m: Integer;
beginFillChar(a, SizeOf(a), False);ReadLn(n, m, S, F);for i := 1 to m dobegin
ReadLn(u, v);a[u, v] := True;a[v, u] := True;
end;end;
procedure Init; {Khi to}beginFillChar(Free, n, True); {Ccnhu chanh du}Last := 0; {Ngn xp rng}
end;
procedure Push(V: Integer); {y mt nh V vo ngn xp}
beginInc(Last);Stack[Last] := V;
end;
function Pop: Integer; {Ly mt nh khi ngn xp, tr v trong kt qu hm}beginPop := Stack[Last];Dec(Last);
end;
procedure DFS;var
u, v: Integer;beginWrite(S, ', '); Free[S] := False; {Thm S,nh du S thm}Push(S); {Khi ng dy chuyn duyt su}repeat
{Dy chuyn duyt suang l S ... u}u := Pop; {u l im cui ca dy chuyn duyt su hin ti}for v := 1 to n doif Free[v] and a[u, v] then {Chn v l nhu tin cha thm k vi u, nu c:}beginWrite(v, ', '); Free[v] := False; {Thm v,nh du v thm}Trace[v] := u; {Lu vt ngi}Push(u); Push(v); {Dy chuyn duyt su by gi l S ... u v}
Break;end;until Last = 0; {Ngn xp rng}
end;
-
7/31/2019 File 11143
16/120
L thuyt th
L Minh Hong
15
procedure Result; {Inngi t S ti F}beginWriteLn;if Free[F] thenWriteLn('Path from ', S, ' to ', F, ' not found')
elsebeginwhile F S dobeginWrite(F, '
-
7/31/2019 File 11143
17/120
L thuyt th
L Minh Hong
16
t, vic li li ny c th thc hin d dng m khng cn dng Stack no c, bi vi mi nh u c mt nhn Trace[u] (l nh m t m ta ti thm u), khi quay lui t u s li v.Vy nu ta ang ng nh u, th nh k tip phi thm ti sc tm nh trong hm FindNextdi y:function FindNext(u V): V; {Tm nh s thm saunh u, tr v 0 nu mi nh ti c t Su thm}beginrepeatfor ( v K(u)) doif then {Nu u c nh k cha thm th chnnh ku tin cha thm thm tip}beginTrace[v] := u; {Lu vt}FindNext := v;Exit;
end;u := Trace[u]; {Nu khng, li vmt bc. Lu l Trace[S] c gn bng n + 1}
until u = n + 1;FindNext := 0; { trn khng Exit c tc l mi nh ti c t S duyt xong}
end;
begin {Thut ton duyt theo chiu su}Trace[S] := n + 1;u := S;repeat;u := FindNext(u);
until u = 0;end;
III. THUT TON TM KIM THEO CHIU RNG (BREADTH FIRST SEARCH)
1. Ci t bng hng i
C s ca phng php ci t ny l "lp lch" duyt cc nh. Vic thm mt nh s ln lchduyt cc nh k n sao cho th t duyt l u tin chiu rng (nh no gn S hn sc duyttrc). V d: Bt u ta thm nh S. Vic thm nh S s pht sinh th t duyt nhng nh (x1,x2, ..., xp) k vi S (nhng nh gn S nht). Khi thm nh x1 s li pht sinh yu cu duyt nhngnh (u1, u2 ..., uq) k vi x1. Nhng r rng cc nh u ny "xa" S hn nhng nh x nn chng chc duyt khi tt c nhng nh x duyt xong. Tc l th t duyt nh sau khi thm x1 s l:(x2, x3..., xp, u1, u2, ..., uq).
S
x1 x2 ... xp
u1 u2 ... uq
Hnh 4:Cy BFS
Gi s ta c mt danh sch cha nhng nh ang "ch" thm. Ti mi bc, ta thm mt nh udanh sch v cho nhng nh cha "xp hng" k vi n xp hng thm vo cui danh sch. Chnhv nguyn tc nn danh sch cha nhng nh ang ch sc t chc di dng hng i
(Queue)Ta s dng gii thut nhsau:Bc 1: Khi to:
Phi duyt sau xp
-
7/31/2019 File 11143
18/120
L thuyt th
L Minh Hong
17
Cc nh u trng thi cha nh du, ngoi trnh xut pht S l nh du
Mt hng i (Queue), ban u ch c mt phn t l S. Hng i dng cha cc nh sc duyt theo th tu tin chiu rng
Bc 2: Lp cc bc sau n khi hng i rng:
Ly u khi hng i, thng bo thm u (Bt u vic duyt nh u)
Xt tt c nhng nh v k vi u m cha c nh du, vi mi nh v :1. nh du v.2. Ghi nhn vt ng i t u ti v (C th lm chung vi vic nh du)3. y v vo hng i (v s chc duyt ti nhng bc sau)
Bc 3: Truy vt tm ng i.
PROG03_3.PAS * Thut ton tm kim theo chiu rng dng hng i
program Breadth_First_Search_1;constmax = 100;
var
a: array[1..max, 1..max] of Boolean;Free: array[1..max] of Boolean; {Free[v] v chac xp vo hng i ch thm}Trace: array[1..max] of Integer;Queue: array[1..max] of Integer;n, S, F, First, Last: Integer;
procedure Enter; {Nhp d liu}vari, u, v, m: Integer;
beginFillChar(a, SizeOf(a), False);ReadLn(n, m, S, F);for i := 1 to m do
beginReadLn(u, v);a[u, v] := True;a[v, u] := True;
end;end;
procedure Init; {Khi to}beginFillChar(Free, n, True); {Ccnhu chanh du}Free[S] := False; {Ngoi trnh S}Queue[1] := S; {Hng i ch gm c mt nh S}Last := 1;
First := 1;end;
procedure Push(V: Integer); {y mt nh V vo hng i}beginInc(Last);Queue[Last] := V;
end;
function Pop: Integer; {Ly mt nh khi hngi, tr v trong kt qu hm}beginPop := Queue[First];Inc(First);
end;procedure BFS; {Thut ton tm kim theo chiu rng}var
-
7/31/2019 File 11143
19/120
L thuyt th
L Minh Hong
18
u, v: Integer;beginrepeatu := Pop; {Ly mt nh u khi hngi}Write(u, ', '); {Thng bo thm u}for v := 1 to n doif Free[v] and a[u, v] then {Xt nhngnh v chanh du k u}beginPush(v); {a v vo hng i ch thm}Free[v] := False; {nh du v}Trace[v] := u; {Lu vt ngi:nh lin trc v trong ngi t S l u}
end;until First > Last; {Cho ti khi hngi rng}
end;
procedure Result; {Inngi t S ti F}beginWriteLn;if Free[F] thenWriteLn('Path from ', S, ' to ', F, ' not found')
elsebeginwhile F S dobeginWrite(F, '
-
7/31/2019 File 11143
20/120
L thuyt th
L Minh Hong
19
th t cc phn t ly ra khi hng i, ta thy trc ht l 1; sau n 2, 3; ri mi ti 4, 5;cui cng l 6. R rng l nh gn S hn sc duyt trc. V nh vy, ta c nhn xt: nu kthp lu vt tm ng i th ng i tS ti F s l ng i ngn nht (theo ngha qua t cnhnht)
2. Ci t bng thut ton loang
Cch ci t ny s dng hai tp hp, mt tp "c" cha nhng nh "ang xt", mt tp "mi"cha nhng nh "s xt". Ban u tp "c" ch gm mi nh xut pht, ti mi bc ta s dng tp"c" tnh tp "mi", tp "mi" s gm nhng nh cha c thm m k vi mt nh no catp "c". Lp li cng vic trn (sau khi gn tp "c" bng tp "mi") cho ti khi tp c l rng:
6
1
24
53
6
1
24
53
6
1
24
53
Hnh 5:Thut ton loang
Gii thut loang c thdng nhsau:Bc 1: Khi toCc nh khc S u cha bnh du, nh S bnh du, tp "c" Old := {S}
Bc 2: Lp cc bc sau n khi Old =
t tp "mi" New = , sau dng tp "c" tnh tp "mi" nh sau:
Xt cc nh u Old, vi mi nh u : Thng bo thm u
Xt tt c nhng nh v k vi u m cha bnh du, vi mi nh v : nh du v
Lu vt ng i, nh lin trc v trong ng i Sv l u a v vo tp New
Gn tp "c" Old := tp "mi" New v lp li (c th lun phin vai tr hai tp ny)Bc 3: Truy vt tm ng i.
PROG03_4.PAS * Thut ton tm kim theo chiu rng dng phng php loang
program Breadth_First_Search_2;constmax = 100;
vara: array[1..max, 1..max] of Boolean;Free: array[1..max] of Boolean;Trace: array[1..max] of Integer;Old, New: set of Byte;n, S, F: Byte;
procedure Enter; {Nhp d liu}vari, u, v, m: Integer;
beginFillChar(a, SizeOf(a), False);ReadLn(n, m, S, F);
-
7/31/2019 File 11143
21/120
L thuyt th
L Minh Hong
20
for i := 1 to m dobeginReadLn(u, v);a[u, v] := True;a[v, u] := True;
end;end;
procedure Init;beginFillChar(Free, n, True);Free[S] := False; {Ccnhu chanh du, ngoi trnh S nh du}Old := [S]; {Tp "c" khi to banu ch c mi S}
end;
procedure BFS; {Thut ton loang}varu, v: Byte;
beginrepeat {Lp: dng Old tnh New}New := [];for u := 1 to n doif u in Old then {Xt nhngnh u trong tp Old, vi mi nh u :}beginWrite(u, ', '); {Thng bo thm u}for v := 1 to n doif Free[v] and a[u, v] then {Qut tt c nhngnh v cha bnh du m k vi u}beginFree[v] := False; {nh du v v lu vt ngi}Trace[v] := u;New := New + [v]; {a v vo tp New}
end;end;
Old := New; {Gn tp "c" := tp "mi" v lp li}
until Old = []; {Cho ti khi khng loangc na}end;
procedure Result;beginWriteLn;if Free[F] thenWriteLn('Path from ', S, ' to ', F, ' not found')
elsebeginwhile F S dobeginWrite(F, '
-
7/31/2019 File 11143
22/120
L thuyt th
L Minh Hong
21
IV. PHC TP TNH TON CA BFS V DFS
Qu trnh tm kim trn th bt u t mt nh c th thm tt c cc nh cn li, khi cchbiu din th c nh hng ln ti chi ph v thi gian thc hin gii thut:
Trong trng hp ta biu din th bng danh sch k, c hai thut ton BFS v DFS u c
phc tp tnh ton l O(n + m) = O(max(n, m)). y l cch ci t tt nht. Nu ta biu din th bng ma trn k nh trn th phc tp tnh ton trong trng hp
ny l O(n + n2) = O(n2).
Nu ta biu din th bng danh sch cnh, thao tc duyt nhng nh k vi nh u s dn tivic phi duyt qua ton b danh sch cnh, y l ci t ti nht, n c phc tp tnh tonl O(n.m).
-
7/31/2019 File 11143
23/120
L thuyt th
L Minh Hong
22
4. TNH LIN THNG CA TH
I. NH NGHA
1. i vi th v hng G = (V, E)
G gi l lin thng (connected) nu lun tn ti ng i gia mi cp nh phn bit ca th.Nu G khng lin thng th chc chn n s l hp ca hai hay nhiu th con* lin thng, cc th con ny i mt khng c nh chung. Cc th con lin thng ri nhau nh vy c gi lcc thnh phn lin thng ca thang xt (Xem v d).
G1
G2
G3
Hnh 6: th G v cc thnh phn lin thng G1, G2, G3 ca n
i khi, vic xo i mt nh v tt c cc cnh lin thuc vi n s to ra mt th con mi cnhiu thnh phn lin thng hn th ban u, cc nh nh th gi l nh ct hay im khp.Hon ton tng t, nhng cnh m khi ta b n i s to ra mt th c nhiu thnh phn linthng hn so vi th ban u c gi l mt cnh ct hay mt cu.
Hnh 7:Khp v cu
2. i vi th c hng G = (V, E)
C hai khi nim v tnh lin thng ca th c hng tu theo chng ta c quan tm ti hngca cc cung khng.G gi l lin thng mnh (Strongly connected) nu lun tn ti ng i (theo cc cung nhhng) gia hai nh bt k ca th, g gi l lin thng yu (weakly connected) nu th v
hng nn ca n l lin thng
Hnh 8:Lin thng mnh v Lin thng yu
* th G = (V, E) l con ca th G' = (V', E') nu G l th c VV' v E E'
-
7/31/2019 File 11143
24/120
L thuyt th
L Minh Hong
23
II. TNH LIN THNG TRONG TH V HNG
Mt bi ton quan trng trong l thuyt th l bi ton kim tra tnh lin thng ca th vhng hay tng qut hn: Bi ton lit k cc thnh phn lin thng ca th v hng.Gi s th v hng G = (V, E) c n nh nh s 1, 2, ..., n. lit k cc thnh phn lin thng ca G phng php cbn nht l:
nh du nh 1 v nhng nh c thn t 1, thng bo nhng nh thuc thnh phn linthng th nht.
Nu tt c cc nh u bnh du th G l th lin thng, nu khng th s tn ti mtnh v no cha bnh du, ta snh du v v cc nh c thn c t v, thng bonhng nh thuc thnh phn lin thng th hai.
V c tip tc nh vy cho ti khi tt c cc nh u bnh duprocedure Duyt(u)begin
end;
beginfor v V do ;Count := 0;for u := 1 to n doif thenbeginCount := Count + 1;WriteLn('Thnh phn lin thng th ', Count, ' gm cc nh : ');Duyt(u);
end;end.
Vi thut ton lit k cc thnh phn lin thng nh th ny, th phc tp tnh ton ca n ng
bng phc tp tnh ton ca thut ton tm kim trn th trong th tc Duyt.III. THY V THUT TON WARSHALL
1. nh ngha:
thy vi n nh, k hiu Kn, l mt n th v hng m gia hai nh bt k ca nu c cnh ni.
thy Kn c ng:2
)1.(2 =
nnCn cnh v bc ca mi nh u bng n - 1.
K3 K4 K5
Hnh 9: thy
2. Bao ng th:
Vi th G = (V, E), ngi ta xy dng th G' = (V, E') cng gm nhng nh ca G cn cccnh xy dng nh sau: (y quy c gia u v u lun c ng i)
Gia nh u v v ca G' c cnh ni Gia nh u v v ca G c ng i th G' xy dng nh vy c gi l bao ng ca th G.
-
7/31/2019 File 11143
25/120
L thuyt th
L Minh Hong
24
Tnh ngha ca thy , ta d dng suy ra mt thy bao gicng lin thng v tnh ngha th lin thng, ta cng d dng suy ra c:
Mt n th v hngl lin thng nu v ch nu bao ng ca n l thy
Mt n th v hng c k thnh phn lin thng nu v ch nu bao ng ca n c kthnh phn lin thng y .
Hnh 10: n th v hng v bao ng ca n
Bi vic kim tra mt th c phi thy hay khng c th thc hin kh d dng (m s
cnh chng hn) nn ngi ta ny ra tng c th kim tra tnh lin thng ca th thng quavic kim tra tnh y ca bao ng. Vn t ra l phi c thut ton xy dng bao ng camt th cho trc v mt trong nhng thut ton l:
3. Thut ton Warshall
Thut ton Warshall - gi theo tn ca Stephen Warshall, ngi m t thut ton ny vo nm1960, i khi cn c gi l thut ton Roy-Warshall v Roy cng m t thut ton ny vonm 1959. Thut ton c th m t rt gn:T ma trn k A ca n th v hng G (aij = True nu (i, j) l cnh ca G) ta s sa i A n trthnh ma trn k ca bao ng bng cch: Vi mi nh k xt theo thtt1 ti n, ta xt
tt c cc cp nh (u, v): nu c cnh ni (u, k) (auk= True) v c cnh ni (k, v) (akv = True)th ta tni thm cnh (u, v) nu n cha c (t auv := True). T tng ny da trn mt quanst n gin nh sau: Nu t u c ng i ti k v t k li c ng i ti v th tt nhin t u s cng i ti v.Vi n l snh ca th, ta c th vit thut ton Warshall nh sau:
for k := 1 to n dofor u := 1 to n doif a[u, k] thenfor v := 1 to n doif a[k, v] then a[u, v] := True;
hocfor k := 1 to n dofor u := 1 to n dofor v := 1 to n doa[u, v] := a[u, v] or a[u, k] and a[k, v];
Vic chng minh tnh ng n ca thut ton i hi phi lt li cc l thuyt v bao ng bc cuv quan h lin thng, ta s khng trnh by y. C nhn xt rng tuy thut ton Warshall rt dci t nhng phc tp tnh ton ca thut ton ny kh ln (O(n3)).Di y, ta s th ci t thut ton Warshall tm bao ng ca n th v hng sau m sthnh phn lin thng ca th:Vic ci t thut ton s qua nhng bc sau:
1. Nhp ma trn k A ca th (Lu y A[v, v] lun c coi l True vi v)2. Dng thut ton Warshall tm bao ng, khi A l ma trn k ca bao ng th
-
7/31/2019 File 11143
26/120
L thuyt th
L Minh Hong
25
3. Da vo ma trn k A, nh 1 v nhng nh k vi n s thuc thnh phn lin thng th nht;vi nh u no khng k vi nh 1, th u cng vi nhng nh k n s thuc thnh phn linthng th hai; vi nh v no khng k vi cnh 1 v nh u, th v cng vi nhng nh kn s thuc thnh phn lin thng th ba v.v...
1
uv
Input: file vn bn GRAPH.INP
Dng 1: Cha snh n ( 100) v s cnh m ca th cch nhau t nht mt du cch
m dng tip theo, mi dng cha mt cp s u v v cch nhau t nht mt du cch tng trngcho mt cnh (u, v)
Output: file vn bn GRAPH.OUT Lit k cc thnh phn lin thng
GRAPH.INP GRAPH.OUT
6 7
8
9
1
1110
4
5
2
3
12
12 91 31 41 52 46 76 89 109 11
11 12
Connected Component 1:1, 2, 3, 4, 5,Connected Component 2:6, 7, 8,Connected Component 3:9, 10, 11, 12,
PROG04_1.PAS * Thut ton Warshall lit k cc thnh phn lin thng
program Connectivity;constmax = 100;
vara: array[1..max, 1..max] of Boolean; {Ma trn k ca th}Free: array[1..max] of Boolean; {Free[v] = True v chac lit k vo thnh phn lin thng no}k, u, v, n: Integer;Count: Integer;
procedure Enter; {Nhp th}vari, u, v, m: Integer;
beginFillChar(a, SizeOf(a), False);ReadLn(n, m);for v := 1 to n do a[v, v] := True; {Dnhin t v c ngi n chnh v}for i := 1 to m dobeginReadLn(u, v);a[u, v] := True;a[v, u] := True;
end;
-
7/31/2019 File 11143
27/120
L thuyt th
L Minh Hong
26
end;
beginAssign(Input, 'GRAPH.INP'); Reset(Input);Assign(Output, 'GRAPH.OUT'); Rewrite(Output);Enter;
{Thut ton Warshall}for k := 1 to n dofor u := 1 to n dofor v := 1 to n doa[u, v] := a[u, v] or a[u, k] and a[k, v];
Count := 0;FillChar(Free, n, True); {Mi nhu chac lit k vo thnh phn lin thng no}for u := 1 to n doif Free[u] then {Vi mt nh u cha c lit k vo thnh phn lin thng no}beginInc(Count);WriteLn('Connected Component ', Count, ': ');for v := 1 to n doif a[u, v] then {Xt nhngnh k u (trn bao ng)}begin
Write(v, ', '); {Lit k nh vo thnh phn lin thng cha u}Free[v] := False; {Lit k nh nonh dunh}
end;WriteLn;
end;Close(Input);Close(Output);
end.
IV. CC THNH PHN LIN THNG MNH
i vi th c hng, ngi ta quan tm n bi ton kim tra tnh lin thng mnh, hay tngqut hn: Bi ton lit k cc thnh phn lin thng mnh ca th c hng. i vi bi ton ta c mt phng php kh hu hiu da trn thut ton tm kim theo chiu su Depth FirstSearch.
1. Phn tch
Thm vo th mt nh x v ni x vi tt c cc nh cn li ca th bng cc cung nhhng. Khi qu trnh tm kim theo chiu su bt u t x c th coi nh mt qu trnh xy dngcy tm kim theo chiu su (cy DFS) gc x.procedure Visit(u V);begin;
for ( v: (u, v) E) doif then Visit(v);
end;
begin;;Visit(x);
end.
th tc thm nh quy Visit(u). Th tc ny xt tt c nhng nh v ni t u, nu v chac thm th i theo cung thm v, tc l b sung cung (u, v) vo cy tm kim DFS. Nu v thm th c ba kh nng xy ra i vi v tr ca u v v trong cy tm kim DFS:
-
7/31/2019 File 11143
28/120
L thuyt th
L Minh Hong
27
1. v l tin bi (ancestor - t tin) ca u, tc l v c thm trc u v th tc Visit(u) do dychuyn quy t th tc Visit(v) gi ti. Cung (u, v) khi c gi l cung ngc (Backedge)
2. v l hu du (descendant - con chu) ca u, tc l u c thm trc v, nhng th tc Visit(u)sau khi tin quy theo mt hng khc gi Visit(v) ri. Nn khi dy chuyn quy li li
v th tc Visit(u) s thy v l thm nn khng thm li na. Cung (u, v) khi gi lcung xui (Forward edge).
3. v thuc mt nhnh ca cy DFS duyt trc , tc l s c mt nh w c thm trcc u v v. Th tc Visit(w) gi trc s r theo mt nhnh no thm v trc, ri khi li li,r sang mt nhnh khc thm u. Cung (u, v) khi gi l cung cho (Cross edge)
(Rt tic l tin thut ng tin hc Anh-Vit qu ngho nn nn khng th tm ra nhng t tngng vi cc thut ngtrn. Ta c th hiu qua cc v d)
1st
2nd
3rd
4th
5th
6th
7thu
v
1st
2nd
3rd
4th
5th
6th
7th
v
u
1st
2nd
3rd
4th
5th
6th
7thv
u
TH1: v l tin bi ca u(u, v) l cung ngc
TH2: v l hu du ca u(u, v) l cung xui
TH3: v nm nhnh DFS duyttrc u
(u, v l cung cho)Hnh 11: Ba dng cung ngoi cy DFS
Ta nhn thy mt c im ca thut ton tm kim theo chiu su, thut ton khng ch duyt quacc nh, n cn duyt qua tt c nhng cung na. Ngoi nhng cung nm trn cy tm kim, nhngcung cn li c th chia lm ba loi: cung ngc, cung xui, cung cho.
2. Cy tm kim DFS v cc thnh phn lin thng mnh
nh l 1:Nu a, b l hai nh thuc thnh phn lin thng mnh C th vi mi ng i ta ti b cngnhtb ti a. Tt cnh trung gian trn ng i u phi thuc C.
Chng minhNu a v b l hai nh thuc C th tc l c mt ng i t a ti b v mt ng i khc t b ti a.Suy ra vi mt nh v nm trn ng i t a ti b th a ti c v, v ti c b, m b c ng ti
a nn v cng ti c a. Vy v nm trong thnh phn lin thng mnh cha a tc l vC. Tngt vi mt nh nm trn ng i t b ti a.nh l 2:
Vi mt thnh phn lin thng mnh C bt k, s tn ti mt nh r C sao cho mi nh ca
C u thuc nhnh DFS gc r.Chng minh:
-
7/31/2019 File 11143
29/120
L thuyt th
L Minh Hong
28
Trc ht, nhc li mt thnh phn lin thng mnh l mt th con lin thng mnh ca thban u tho mn tnh cht ti i tc l vic thm vo thnh phn mt tp hp nh khc s lmmt i tnh lin thng mnh.Trong s cc nh ca C, chn r l nh c thm u tin theo thut ton tm kim theo chiusu. Ta s chng minh C nm trong nhnh DFS gc r. Tht vy: vi mt nh v bt k ca C, do C
lin thng mnh nn phi tn ti mt ng i t r ti v:(r = x0, x1, ..., xk= v)
Tnh l 1, tt c cc nh x1, x2, ..., xku thuc C nn chng s phi thm sau nh r. Khi thtc Visit(r) c gi th tt c cc nh x1, x2..., xk=v u cha thm; v th tc Visit(r) s lit k ttc nhng nh cha thm n c t r bng cch xy dng nhnh gc r ca cy DFS, nn cc nhx1, x2, ..., xk= v s thuc nhnh gc r ca cy DFS. Bi chn v l nh bt k trong C nn ta c iu
phi chng minh.nh r trong chng minh nh l - nh thm trc tt c cc nh khc trong C - gi l cht cathnh phn C. Mi thnh phn lin thng mnh c duy nht mt cht. Xt v v tr trong cy tm
kim DFS, cht ca mt thnh phn lin thng l nh nm cao nht so vi cc nh khc thucthnh phn , hay ni cch khc: l tin bi ca tt c cc nh thuc thnh phn .nh l 3:Lun tm c nh cht a tho mn: Qu trnh tm kim theo chiu su bt u ta khngthm c bt k mt cht no khc. (Tc l nhnh DFS gc a khng cha mt cht no ngoi a)chng hn ta chn a l cht c thm sau cng trong mt dy chuyn quy hoc chn a l chtthm sau tt c cc cht khc. Vi cht a nh vy th cc nh thuc nhnh DFS gc a chnh lthnh phn lin thng mnh cha a.Chng minh:
Vi mi nh v nm trong nhnh DFS gc a, xt b l cht ca thnh phn lin thng mnh cha v.Ta s chng minh a b. Tht vy, theo nh l 2, v phi nm trong nhnh DFS gc b. Vy v nm
trong c nhnh DFS gc a v nhnh DFS gc b. Gi s phn chng rng ab th s c hai kh nngxy ra:
a
b
v......
...
...
...
...
b
a
v......
...
...
......
Kh nng 1: a b v Kh nng 1: b a v
Kh nng 1: Nhnh DFS gc a cha nhnh DFS gc b, c ngha l th tc Visit(b) s do thtc Visit(a) gi ti, iu ny mu thun vi gi thit rng a l cht m qu trnh tm kim theochiu su bt u t a khng thm mt cht no khc.
Kh nng 2: Nhnh DFS gc a nm trong nhnh DFS gc b, c ngha l a nm trn mtng i t b ti v. Do b v v thuc cng mt thnh phn lin thng mnh nn theo nh l 1,
a cng phi thuc thnh phn lin thng mnh . Vy th thnh phn lin thng mnh ny chai cht a v b. iu ny v l.
-
7/31/2019 File 11143
30/120
L thuyt th
L Minh Hong
29
Theo nh l 2, ta c thnh phn lin thng mnh cha a nm trong nhnh DFS gc a, theochng minh trn ta li c: Mi nh trong nhnh DFS gc a nm trong thnh phn lin thngmnh cha a. Kt hp li c: Nhnh DFS gc a chnh l thnh phn lin thng mnh cha a.
3. Thut ton Tarjan (R.E.Tarjan - 1972)
Chn u l cht m t qu trnh tm kim theo chiu su khng thm thm bt k mt cht no
khc, chn ly thnh phn lin thng mnh th nht l nhnh DFS gc u. Sau loi b nhnh DFSgc u ra khi cy DFS, li tm thy mt nh cht v khc m nhnh DFS gc v khng cha cht nokhc, li chn ly thnh phn lin thng mnh th hai l nhnh DFS gc v. Tng t nh vy chothnh phn lin thng mnh th ba, th t, v.v... C th hnh dung thut ton Tarjan "b" cy DFSti v tr cc cht c cc nhnh ri rc, mi nhnh l mt thnh phn lin thng mnh.
1
2
3
4
5
6
7
8
910
11
1
2
3
4
5
6
7
8
910
11
Hnh 12: Thut ton Tarjan "b" cy DFS
Trnh by di dng nh vy, nhng iu quan trng nht by gimi ni ti: Lm th no kim
tra mt nh v no c phi l cht hay khng ?Hy nhnh DFS gc nh r no .Nhn xt 1:
Nu nhtcc nh thuc nhnh gc r ny khng c cung ngc hay cung cho no i ra khinhnh th r l cht. iu ny d hiu bi nh vy c ngha l t r, i theo cc cung ca thth chn c nhng nh thuc nhnh m thi. Vy:
Thnh phn lin thng mnh cha r Tp cc nh c thn t r = Nhnh DFS gc rnn r l cht.Nhn xt 2:
Nu tmtnh v no ca nhnh DFS gc r c mt cung ngc ti mtnh w l tin bica r, th r khng l cht. Tht vy: do c chu trnh (wrvw) nn w, r, v thuc cng mtthnh phn lin thng mnh. M w c thm trc r, iu ny mu thun vi cch xc nh cht(Xem li nh l 2)Nhn xt 3:Vn phc tp gp phi y l nu t mt nh v ca nhnh DFS gc r, c mt cung cho i timt nhnh khc. Ta s thit lp gii thut lit k thnh phn lin thng mnh ngay trong th tcVisit(u), khi m nh u duyt xong, tc l khi cc nh khc ca nhnh DFS gc u u thm v qu trnh thm quy li li v Visit(u). Nu nh u l cht, ta thng bo nhnh DFS gc u
l thnh phn lin thng mnh cha u v loi ngay cc nh thuc thnh phn khi th cngnh khi cy DFS. C th chng minh c tnh ng n ca phng php ny, bi nu nhnhDFS gc u cha mt cht u' khc th u' phi duyt xong trc u v c nhnh DFS gc u' b loi
-
7/31/2019 File 11143
31/120
L thuyt th
L Minh Hong
30
b ri. Hn na cn c th chng minh c rng, khi thut ton tin hnh nh trn th nu nhtmt nh v ca mt nhnh DFS gc r c mt cung cho i ti mt nhnh khc th r khng lcht. chng tiu ny, ta da vo tnh cht ca cy DFS: cung cho s ni t mt nhnh ti nhnhthm trc , ch khng bao gic cung cho i ti nhnh thm sau. Gi s c cung cho (v, v')
i t v nhnh DFS gc r ti v' nhnh DFS gc r, gi r' l cht ca thnh phn lin thng chav'. Theo tnh cht trn, v' phi thm trc r, suy ra r' cng phi thm trc r. C hai kh nng xyra:
Nu r' thuc nhnh DFS duyt trc r th r' sc duyt xong trc khi thm r, tc l khithm r v c sau ny khi thm v th nhnh DFS gc r' b hu, cung cho (v, v') s khngc tnh n na.
Nu r' l tin bi ca r th ta c r'n c r, v nm trong nhnh DFS gc r nn r n cv, v n c v' v (v, v') l cung, v' li n c r' bi r' l cht ca thnh phn lin thng
mnh cha v'. Ta thit lp c chu trnh (r'rvv'r'), suy ra r' v r thuc cng mt
thnh phn lin thng mnh, r' l cht nn r khng th l cht na.T ba nhn xt v cch ci t chng trnh nh trong nhn xt 3, Ta c: nh r l cht nu v chnu khng tn ti cung ngc hoc cung cho ni mt nh thuc nhnh DFS gc r vi mt nhngoi nhnh , hay ni cch khc: r l cht nu v ch nu khng tn ti cung ni tmt nhthuc nhnh DFS gc r ti mt nh thm trc r.Di y l mt ci t ht sc thng minh, ch cn sa i mt cht th tc Visit trn l ta cngay phng php ny. Ni dung ca n l nh s th t cc nh tnh c thm u tin nnh thm sau cng. nh ngha Numbering[u] l s th t ca nh u theo cch nh s. Ta tnhthm Low[u] l gi tr Numbering nh nht trong cc nh c thn c t mt nh v no
ca nhnh DFS gc u bng mt cung (vi gi thit rng u c mt cung gi ni vi chnh u).C th cch cc tiu ho Low[u] nh sau:Trong th tc Visit(u), trc ht ta nh s th t thm cho nh u v khi gn
Low[u] := Numbering[u] (u c cung ti chnh u)Xt tt c nhng nh v ni t u:
Nu v thm th ta cc tiu ho Low[u] theo cng thc:Low[u]mi := min(Low[u]c, Numbering[v]).
Nu v cha thm th ta gi quy i thm v, sau cc tiu ho Low[u] theo cng thc:Low[u]mi := min(Low[u]c, Low[v])
D dng chng minh c tnh ng n ca cng thc tnh.Khi duyt xong mt nh u (chun b thot khi th tc Visit(u). Ta so snh Low[u] v
Numbering[u]. Nu nh Low[u] = Numbering[u] th u l cht, bi khng c cung ni t mt nhthuc nhnh DFS gc u ti mt nh thm trc u. Khi ch vic lit k cc nh thuc thnh phnlin thng mnh cha u l nhnh DFS gc u. cng vic d dng hn na, ta nh ngha mt danh sch L c t chc di dng ngn xp vdng ngn xp ny ly ra cc nh thuc mt nhnh no . Khi thm ti mt nh u, ta y ngaynh u vo ngn xp, th khi duyt xong nh u, mi nh thuc nhnh DFS gc u sc yvo ngn xp L ngay sau u. Nu u l cht, ta ch vic ly cc nh ra khi ngn xp L cho ti khi ly
ti nh u l sc nhnh DFS gc u cng chnh l thnh phn lin thng mnh cha u.procedure Visit(u V);begin
-
7/31/2019 File 11143
32/120
L thuyt th
L Minh Hong
31
Count := Count + 1; Numbering[u] := Count; {Trc ht nh s u}Low[u] := Numbering[u];;;for ( v: (u, v) E) doif thenLow[u] := min(Low[u], Numbering[v])
elsebeginVisit(v);Low[u] := min(Low[u], Low[v]);
end;if Numbering[u] = Low[u] then {Nu u l cht}begin;repeat;;;
until v = u;end;
end;
begin;;;;Visit(x)
end.
Bi thut ton Tarjan ch l sa i mt cht thut ton DFS, cc thao tc vo/ra ngn xp cthc hin khng qu n ln. Vy nn nu th c n nh v m cung th phc tp tnh ton ca
thut ton Tarjan vn l O(n + m) trong trng hp biu din th bng danh sch k, l O(n2
)trong trng hp biu din bng ma trn k v l O(n.m) trong trng hp biu din bng danhsch cnh.Mi th sn sng, di y l ton b chng trnh. Trong chng trnh ny, ta s dng:
Ma trn k A biu din th.
Mng Free kiu Boolean, Free[u] = True nu u cha b lit k vo thnh phn lin thng no,tc l u cha b loi khi th.
Mng Numbering v Low vi cng dng nh trn, quy c Numbering[u] = 0 nu nh ucha c thm.
Mng Stack, th tc Push, hm Pop m t cu trc ngn xp.Input: file vn bn GRAPH.INP:
Dng u: Ghi snh n ( 100) v s cung m ca th cch nhau mt du cch
m dng tip theo, mi dng ghi hai s nguyn u, v cch nhau mt du cch th hin c cung(u, v) trong th
Output: file vn bn GRAPH.OUTLit k cc thnh phn lin thng mnh
-
7/31/2019 File 11143
33/120
L thuyt th
L Minh Hong
32
GRAPH.INP GRAPH.OUT1
2
3
4
5
6
7
8
910
11
11 151 21 82 33 44 24 55 66 77 58 99 49 1010 810 1111 8
Component 1:7, 6, 5,Component 2:4, 3, 2,Component 3:11, 10, 9, 8,Component 4:1,
PROG04_2.PAS * Thut ton Tarjan lit k cc thnh phn lin thng mnh
program Strong_connectivity;constmax = 100;
vara: array[1..max, 1..max] of Boolean;Free: array[1..max] of Boolean;Numbering, Low, Stack: array[1..max] of Integer;n, Count, ComponentCount, Last: Integer;
procedure Enter; {Nhp d liu (t thit b nhp chun)}vari, u, v, m: Integer;
beginFillChar(a, SizeOf(a), False);ReadLn(n, m);for i := 1 to m dobeginReadLn(u, v);a[u, v] := True;
end;end;
procedure Init; {Khi to}beginFillChar(Numbering, SizeOf(Numbering), 0); {Mi nhu cha thm}
FillChar(Free, SizeOf(Free), True);{Chanh no b loi}
Last := 0; {Ngn xp rng}Count := 0; {Binnh s th t thm}ComponentCount := 0; {Binnh s cc thnh phn lin thng}
end;
procedure Push(v: Integer); {y mt nh v vo ngn xp}beginInc(Last);Stack[Last] := v;
end;
function Pop: Integer; {Ly mt nh khi ngn xp, tr v trong kt qu hm}beginPop := Stack[Last];Dec(Last);
end;
-
7/31/2019 File 11143
34/120
L thuyt th
L Minh Hong
33
function Min(x, y: Integer): Integer;beginif x < y then Min := x else Min := y;
end;
procedure Visit(u: Integer); {Thut ton tm kim theo chiu su bt u t u}varv: Integer;
beginInc(Count); Numbering[u] := Count; {Trc ht nh s cho u}Low[u] := Numbering[u]; {Coi u c cung ti u, nn c th khi gn Low[u] th ny ri sau cc tiu ho dn}Push(u); {y u vo ngn xp}for v := 1 to n doif Free[v] and a[u, v] then {Xt nhngnh v k u}if Numbering[v] 0 then {Nu v thm}Low[u] := Min(Low[u], Numbering[v]) {Cc tiu ho Low[u] theo cng thc ny}
else {Nu v cha thm}beginVisit(v); {Tip tc tm kim theo chiu su bt u t v}Low[u] := Min(Low[u], Low[v]); {Ri cc tiu ho Low[u] theo cng thc ny}
end; {ny th nh uc duyt xong, tc l ccnh thuc nhnh DFS gc uu thm}if Numbering[u] = Low[u] then {Nu u l cht}begin {Lit k thnh phn lin thng mnh c cht u}Inc(ComponentCount);WriteLn('Component ', ComponentCount, ': ');repeatv := Pop; {Ly dn ccnh ra khi ngn xp}Write(v, ', '); {Lit k ccnh}Free[v] := False; {Ri loi lun khi th}
until v = u; {Cho ti khi ly ti nh u}WriteLn;
end;
end;
procedure Solve;varu: Integer;
begin {Thay v thm mt nh gi x v cc cung (x, v) vi mi nh v ri gi Visit(x), ta c th lm th ny cho nhanh} {sau ny phi hu b thnh phn lin thng gm mi mt nh gi}for u := 1 to n doif Numbering[u] = 0 then Visit(u);
end;
begin
Assign(Input, 'GRAPH.INP'); Reset(Input);Assign(Output, 'GRAPH.OUT'); Rewrite(Output);Enter;Init;Solve;Close(Input);Close(Output);
end.
Bi tp:1. Phng php ci t nh trn c th ni l rt hay v hiu qu, i hi ta phi hiu r bn chtthut ton, nu khng th rt d nhm. Trn thc t, cn c mt phng php khc d hiu hn, tuytnh hiu qu c km hn mt cht. Hy vit chng trnh m t phng php sau:Vn dng thut ton tm kim theo chiu su vi th tc Visit ni u mc, nh sli cc nh t
1 ti n theo th tduyt xong, sau o chiu tt c cc cung ca th. Xt ln lt cc nh
-
7/31/2019 File 11143
35/120
L thuyt th
L Minh Hong
34
theo th ttnh duyt xong sau cng ti nh duyt xongu tin, vi mi nh , ta li dngthut ton tm kim trn th (BFS hay DFS) lit k nhngnh no n c tnh ang xt, chnh l mt thnh phn lin thng mnh. Lu l khi lit k xong thnh phn no, ta loi ngay ccnh ca thnh phn khi th.Tnh ng n ca phng php c th hnh dung khng my kh khn:
Trc ht ta thm vo thnh x v cc cung (x, v) vi mi v, sau gi Visit(x) xy dngcy DFS gc x. Hin nhin x l cht ca thnh phn lin thng ch gm mi x. Sau bnh xkhi cy DFS, cy s phn r thnh cc cy con.nh r duyt xong sau cng chc chn l gc ca mt cy con (bi khi duyt xong n chc chn sli v x) suy ra r l cht. Hn th na, nu mt nh u no ti c r th u cng phi thuc cycon gc r. Bi nu gi s phn chng rng u thuc cy con khc th u phi c thm trc r (docy con gc rc thm ti sau cng), c ngha l khi Visit(u) th r cha thm. Vy nn r s thucnhnh DFS gc u, mu thun vi lp lun r l gc. T suy ra nu u ti c r th r ti c u, tcl khi o chiu cc cung, nu r ti c nh no th nh thuc thnh phn lin thng cht r.
Loi b thnh phn lin thng vi cht r khi th. Cy con gc r li phn r thnh nhiu cy con.Lp lun tng t nh trn vi v' l nh duyt xong sau cng.V d:
11
6
5
4
3
2
1
10
98
7
1
2
4
5
8
9
10
3
67
11
nh s li, o chiu cc cung v duyt BFS vi cch chn cc nh xut pht ngc li vi th t duyt xong
(Th t 11, 10... 3, 2, 1)2. Thut ton Warshall c th p dng tm bao ng ca th c hng, vy hy kim tra tnh linthng mnh ca mt th c hng bng hai cch: Dng cc thut ton tm kim trn th vthut ton Warshall, sau so snh u, nhc im ca mi phng php3. M cung hnh ch nht kch thc m x n gm cc vung n v. Trn mi k t:O: Nu an tonX: Nu c cm byE: Nu l c mt nh thm him ang ng.Duy nht ch c 1 ghi ch E. Nh thm him c th t mt i sang mt trong s cc chung
cnh vi ang ng. Mt cch i thot khi m cung l mt hnh trnh i qua cc an ton ra mt bin. Hy ch gip cho nh thm him mt hnh trnh thot ra khi m cung
-
7/31/2019 File 11143
36/120
L thuyt th
L Minh Hong
35
4. Trn mt phng vi h to Decattes vung gc cho n ng trn, mi ng trn xc nh bib 3 s thc (X, Y, R) y (X, Y) l to tm v R l bn knh. Hai ng trn gi l thngnhau nu chng c im chung. Hy chia cc ng trn thnh mt s ti thiu cc nhm sao chohai ng trn bt k trong mt nhm bt k c thi c sang nhau sau mt s hu hn cc bcdi chuyn gia hai ng trn thng nhau.
-
7/31/2019 File 11143
37/120
L thuyt th
L Minh Hong
36
5. VI NG DNG CA CC THUT TON TM KIM TRN TH
I. XY DNG CY KHUNG CA TH
Cy l thv hng, lin thng, khng c chu trnh n. th v hng khng c chu trnhn gi l rng (hp ca nhiu cy). Nh vy mi thnh phn lin thng ca rng l mt cy.
Khi nim cy c s dng rng ri trong nhiu lnh vc khc nhau: Nghin cu cu trc cc phnt hu c, xy dng cc thut ton t chc th mc, cc thut ton tm kim, lu tr v nn dliu...
1. nh l (Daisy Chain Theorem)
Gi s T = (V, E) l th v hng vi n nh. Khi cc mnh sau l tng ng:1. T l cy
2. T khng cha chu trnh n v c n - 1 cnh3. T lin thng v mi cnh ca n u l cu
4. Gia hai nh bt k ca T u tn ti ng mt ng i n5. T khng cha chu trnh n nhng h c thm vo mt cnh ta thu c mt chu trnh n.6. T lin thng v c n - 1 cnhChng minh:
12: "T l cy" "T khng cha chu trnh n v c n - 1 cnh"T T l cy, theo nh ngha T khng cha chu trnh n. Ta s chng minh cy T c n nh th
phi c n - 1 cnh bng quy np theo snh n. R rng khi n = 1 th cy c 1 nh s cha 0 cnh.Nu n > 1 th do th hu hn nn s cc ng i n trong T cng hu hn, gi P = (v1, v2, ...,vk) l mt ng i di nht (qua nhiu cnh nht) trong T. nh v1 khng th c cnh ni vi nh
no trong s cc nh v3, v4, ..., vk. Bi nu c cnh (v1, vp) (3 p k) th ta s thit lp c chutrnh n (v1, v2, ..., vp, v1). Mt khc, nh v1 cng khng th c cnh ni vi nh no khc ngoi
cc nh trn P trn bi nu c cnh (v1, v0) (v0P) th ta thit lp c ng i (v0, v1, v2, ..., vk)di hn ng i P. Vy nh v1 ch c ng mt cnh ni vi v2 hay v1 l nh treo. Loi b v1 vcnh (v1, v2) khi T ta c th mi cng l cy v c n - 1 nh, cy ny theo gi thit quy npc n - 2 cnh. Vy cy T c n - 1 cnh.
23: "T khng cha chu trnh n v c n - 1 cnh" "T lin thng v mi cnh ca n ul cu"Gi s T c k thnh phn lin thng T1, T2, ..., Tk. V T khng cha chu trnh n nn cc thnh
phn lin thng ca T cng khng cha chu trnh n, tc l cc T1, T2, ..., Tku l cy. Gi n1, n2,..., nk ln lt l snh ca T1, T2, ..., Tk th cy T1 c n1 - 1 cnh, cy T2 c n2 - 1 cnh..., cy Tkc nk - 1 cnh. Cng li ta c s cnh ca T l n1 + n2 + ... + nk - k = n - k cnh. Theo gi thit, cyT c n - 1 cnh, suy ra k = 1, th ch c mt thnh phn lin thng l th lin thng.By gi khi T lin thng, nu bi mt cnh ca T th T s cn n - 2 cnh v s khng linthng bi nu T vn lin thng th do T khng c chu trnh nn T s l cy v c n - 1 cnh. iu chng t mi cnh ca T u l cu.
34: "T lin thng v mi cnh ca n u l cu" "Gia hai nh bt k ca T c ngmt ng i n"
Gi x v y l 2 nh bt k trong T, v T lin thng nn s c mt ng i n t x ti y. Nu tnti mt ng i n khc t x ti y th nu ta bi mt cnh (u, v) nm trn ng i th nhtnhng khng nm trn ng i th hai th t u vn c thn c v bng cch: i t u i theo
-
7/31/2019 File 11143
38/120
L thuyt th
L Minh Hong
37
chiu ti x theo cc cnh thuc ng th nht, sau i t x ti y theo ng th hai, ri li i ty ti v theo cc cnh thuc ng i th nht. iu ny mu thun vi gi thit (u, v) l cu.
45: "Gia hai nh bt k ca T c ng mt ng i n" "T khng cha chu trnhn nhng h cthm vo mt cnh ta thu c mt chu trnh n"Th nht T khng cha chu trnh n v nu T cha chu trnh n th chu trnh qua t nht hai
nh u, v. R rng dc theo cc cnh trn chu trnh th t u c hai ng i n ti v. V l.Gia hai nh u, v bt k ca T c mt ng i n ni u vi v, vy khi thm cnh (u, v) vong i ny th s to thnh chu trnh.
56: "T khng cha chu trnh n nhng h c thm vo mt cnh ta thu c mt chu
trnh n" "T lin thng v c n - 1 cnh"
Gi u v v l hai nh bt k trong T, thm vo T mt cnh (u, v) na th theo gi thit s to thnhmt chu trnh cha cnh (u, v). Loi b cnh ny i th phn cn li ca chu trnh s l mt ngi t u ti v. Mi cp nh ca T u c mt ng i ni chng tc l T lin thng, theo gi thit Tkhng cha chu trnh n nn T l cy v c n - 1 cnh.
61: "T lin thng v c n - 1 cnh" "T l cy"Gi s T khng l cy th T c chu trnh, hu b mt cnh trn chu trnh ny th T vn lin thng,nu th mi nhn c vn c chu trnh th li hu mt cnh trong chu trnh mi. C nh th choti khi ta nhn c mt th lin thng khng c chu trnh. th ny l cy nhng li c < n - 1cnh (v l). Vy T l cy
2. nh ngha
Gi s G = (V, E) l th v hng. Cy T = (V, F) vi FE gi l cy khung ca th G. Tc lnu nh loi b mt s cnh ca G c mt cy th cy gi l cy khung (hay cy bao trm
ca th).D thy rng vi mt th v hng lin thng c th c nhiu cy khung.
G T1
T2
T3
Hnh 13: th G v mt s v d cy khung T1, T2, T3 ca n
iu kin cn v mt th v hng c cy khung l th phi lin thng
S cy khung ca thy Kn l nn-2.
3. Thut ton xy dng cy khung
Xt th v hng lin thng G = (V, E) c n nh, c nhiu thut ton xy dng cy khung ca Ga) Xy dng cy khung bng thut ton hp nht
Trc ht, t T = (V,); T khng cha cnh no th c th coi T gm n cy ri rc, mi cy ch c1 nh. Sau xt ln lt cc cnh ca G, nu cnh ang xt ni hai cy khc nhau trong T th
thm cnh vo T, ng thi hp nht hai cy li thnh mt cy. C lm nh vy cho ti khikt np n - 1 cnh vo T th ta c T l cy khung ca th. Cc phng php kim tra cnh
-
7/31/2019 File 11143
39/120
L thuyt th
L Minh Hong
38
c ni hai cy khc nhau hay khng cng nh k thut hp nht hai cy sc bn k hn trongthut ton Kruskal 9.b) Xy dng cy khung bng cc thut ton tm kim trn th.p dng thut ton BFS hay DFS bt u tnh S, ti mi bc tnh u ti thm nh v, ta thmvo thao tc ghi nhn lun cnh (u, v) vo cy khung. Do th lin thng nn thut ton s xut
pht t S v ti thm tt c cc nh cn li, mi nh ng mt ln, tc l qu trnh duyt s ghinhn c ng n - 1 cnh. Tt c nhng cnh khng to thnh chu trnh n bi thut tonkhng thm li nhng nh thm. Theo mnh tng ng th hai, ta c nhng cnh ghi nhnc to thnh mt cy khung ca th.
1
2 3
4 5 6 7
8 9 10 11
1
2 3
4 5 6 7
8 9 10 11
S S
Hnh 14: Cy khung DFS v cy khung BFS (Mi tn ch chiu i thm cc nh)
II. TP CC CHU TRNH C BN CA TH
Xt mt th v hng lin thng G = (V, E); gi T = (V, F) l mt cy khung ca n. Cc cnh
ca cy khung c gi l cc cnh trong, cn cc cnh khc l cc cnh ngoi.
Nu thm mt cnh ngoi eE \ F vo cy khung T, th ta c ng mt chu trnh n trong T, khiu chu trnh ny l Ce. Tp cc chu trnh:
= {Ce eE \ F}c gi l tp cc chu trnh csca th G.Cc tnh cht quan trng ca tp cc chu trnh cs:1. Tp cc chu trnh csl ph thuc vo cy khung, hai cy khung khc nhau c th cho hai
tp chu trnh cskhc nhau.2. Nu th lin thng c n nh v m cnh, th trong cy khung c n - 1 cnh, cn li m - n + 1
cnh ngoi. Tng ng vi mi cnh ngoi c mt chu trnh cs, vy s chu trnh csca th lin thng l m - n + 1.
3. Tp cc chu trnh csl tp nhiu nht cc chu trnh tho mn: Mi chu trnh c ng mtcnh ring, cnh khng nm trong bt c mt chu trnh no khc. Bi nu c mt tp gm tchu trnh tho mn iu th vic loi b cnh ring ca mt chu trnh s khng lm mt tnhlin thng ca th, ng thi khng nh hng ti s tn ti ca cc chu trnh khc. Nh vynu loi b tt c cc cnh ring th th vn lin thng v cn m - t cnh. th lin thng th
khng th c t hn n - 1 cnh nn ta c m - t n - 1 hay t m - n + 1.
4. Mi cnh trong mt chu trnh n bt ku phi thuc mt chu trnh cs. Bi nu cmt cnh (u, v) khng thuc mt chu trnh cs no, th khi ta b cnh i th vn linthng v khng nh hng ti s tn ti ca cc chu trnh cs. Li b tip nhng cnh ngoi
-
7/31/2019 File 11143
40/120
L thuyt th
L Minh Hong
39
ca cc chu trnh csth th vn lin thng v cn li m - (m - n + 1) - 1 = n - 2 cnh. iuny v l.
5. i vi th G = (V, E) c n nh v m cnh, c k thnh phn lin thng, ta c th xt ccthnh phn lin thng v xt rng cc cy khung ca cc thnh phn . Khi c th mrngkhi nim tp cc chu trnh cscho th v hng tng qut: Mi khi thm mt cnh khng
nm trong cc cy khung vo rng, ta c ng mt chu trnh n, tp cc chu trnh n tothnh bng cch ghp cc cnh ngoi nh vy gi l tp cc chu trnh csca th G. S ccchu trnh csl m - n + k.
III. NH CHIU TH V BI TON LIT K CU
Bi ton t ra l cho mt th v hng lin thng G = (V, E), hy thay mi cnh ca th bngmt cung nh hng c mt th c hng lin thng mnh. Nu c phng n nh chiunh vy th G c gi l thnh chiu c. Bi ton nh chiu th c ng dng r nhttrong s giao thng ng b. Chng hn nh tr li cu hi: Trong mt h thng ng ph,
liu c th quy nh cc ng ph thnh ng mt chiu m vn m bo si li gia haint giao thng bt k hay khng.
1. Php nh chiu DFS
Xt m hnh duyt th bng thut ton tm kim theo chiu su bt u tnh 1. V th l vhng lin thng nn qu trnh tm kim s thm c ht cc nh.procedure Visit(u V);begin;for ( v: (u, v) E) doif then Visit(v);
end;
begin;Visit(1);
end;
Coi mt cnh ca th tng ng vi hai cung c hng ngc chiu nhau. Thut ton tmkim theo chiu su theo m hnh trn s duyt qua ht cc nh ca th v tt c cc cung na.Qu trnh duyt cho ta mt cy tm kim DFS. Ta c cc nhn xt sau:Nhn xt 1:Qu trnh duyt s khng c cung cho (cung i t mt nhnh DFS thm sau ti nhnh DFS thm
trc). Tht vy, nu qu trnh duyt xt ti mt cung (u, v): Nu u thm trc v c ngha l khi Visit(u) c gi th v cha thm, v th tc Visit(u) s xy
dng nhnh DFS gc u gm nhng nh cha thm n c t u, suy ra v nm trong nhnh
DFS gc u v l hu du ca u, hay (u, v) l cung DFS hoc cung xui.
Nu u thm sau v (v thm trc u), tng t trn, ta suy ra u nm trong nhnh DFS gc v, v l
tin bi ca u (u, v) l cung ngc.Nhn xt 2:Trong qu trnh duyt th theo chiu su, nu c duyt qua cung (u, v) no th ta bi cung (v,u). (Tc l h duyt qua cung (u, v) th ta nh chiu lun cnh (u, v) theo chiu t u ti v), ta c
mt php nh chiu th gi l php nh chiu DFS.
-
7/31/2019 File 11143
41/120
L thuyt th
L Minh Hong
40
1
2
3
4
6
5
7
8
9 10
1
2
3
4
6
5
7
8
9 10
Hnh 15: Php nh chiu DFS
Nhn xt 3:
Vi php nh chiu nh trn, th s ch cn cc cung trn cy DFS v cung ngc, khng cn licung xui. Bi trn th v hng ban u, nu ta coi mt cnh l hai cung c hng ngc chiunhau th vi mt cung xui ta c cung ngc chiu vi n l cung ngc. Do tnh cht DFS, cungngc c duyt trc cung xui tng ng, nn khi nh chiu cnh theo cung ngc th cungxui s b hu v khng b xt ti na.Nhn xt 4:Trong th v hng ban u, cnh bnh hng thnh cung ngc chnh l cnh ngoi ca cykhung DFS. Chnh v vy, mi chu trnh c s trong th v hng ban u vn s l chutrnh trong th c hng to ra. (y l mt phng php hiu qu lit k cc chu trnh cs
ca cy khung DFS: Va duyt DFS va nh chiu, nu duyt phi cung ngc (u, v) th truy vtng i ca DFS tm ng t v n u, sau ni thm cung ngc (u, v) c mt chutrnh cs).nh l: iu kin cn v mt thv hng lin thng c thnh chiu c l micnh ca thnm trn t nht mt chu trnh n (Hay ni cch khc mi cnh ca thukhng phi l cu).Chng minh:Gi G = (V, E) l mt th v hng lin thng.
""Nu G l nh chiu c th sau khi nh hng sc th lin thng mnh G'. Vi mt cnhc nh chiu thnh cung (u, v) th s tn ti mt ng i n trong G' theo cc cnh nhhng t v v u. ng i ni thm cung (u, v) s thnh mt chu trnh n c hng trong G'.Tc l trn th ban u, cnh (u, v) nm trn mt chu trnh n.
""Nu mi cnh ca G u nm trn mt chu trnh n, ta s chng minh rng: php nh chiu DFSs to ra th G' lin thng mnh.
Trc ht ta chng minh rng nu (u, v) l cnh ca G th s c mt ng i t u ti v trongG'. Tht vy, v (u, v) nm trong mt chu trnh n, m mi cnh ca mt chu trnh n u
phi thuc mt chu trnh csno , nn s c mt chu trnh cscha c u v v. Chu trnh
-
7/31/2019 File 11143
42/120
L thuyt th
L Minh Hong
41
csqua php nh chiu DFS vn l chu trnh trong G' nn i theo cc cnh nh hng cachu trnh , ta c thi t u ti v v ngc li.
Nu u v v l 2 nh bt k ca G th do G lin thng, tn ti mt ng i (u=x0, x1, ..., xn=v).V (xi, xi + 1) l cnh ca G nn trong G', t xi c thn c xi+1. Suy ra t u cng c thnc v bng cc cnh nh hng ca G'.
2. Ci t
Vi nhng kt qu chng minh trn, ta cn suy ra c: Nu th lin thng v mi cnh can nm trn t nht mt chu trnh n th php nh chiu DFS s cho mt th lin thng mnh.Cn nu khng, th php nh chiu DFS s cho mt thnh hng c t thnh phn lin thngmnh nht, mt cnh khng nm trn mt chu trnh n no (cu) ca th ban u sc nhhng thnh cung ni gia hai thnh phn lin thng mnh.Ta scit mt thut ton vi mt thv hng: lit k cc cu v nh chiu cc cnh c mt thmi c t thnh phn lin thng mnh nht:nh s cc nh theo th t thm DFS, gi Numbering[u] l s th t ca nh u theo cch nh
s . Trong qu trnh tm kim DFS, duyt qua cnh no nh chiu lun cnh . nh nghathm Low[u] l gi tr Numbering nh nht ca nhng nh n c t nhnh DFS gc u bng mtcung ngc. Tc l nu nhnh DFS gc u c nhiu cung ngc hng ln trn pha gc cy th taghi nhn li cung ngc hng ln cao nht. Nu nhnh DFS gc u khng cha cung ngc th ta
cho Low[u] = +. C th cch cc tiu ho Low[u] nh sau:
Trong th tc Visit(u), trc ht ta nh s th t thm cho nh u (Numbering[u]) v khi gn
Low[u] = +.
Sau , xt tt c nhng nh v k u, nh chiu cnh (u, v) thnh cung (u, v). C hai kh nngxy ra:
v cha thm th ta gi Visit(v) thm v v cc tiu ho Low[u] theo cng thc:Low[u] := min(Low[u]c, Low[v])
v thm th ta cc tiu ho Low[u] theo cng thc:Low[u] := min(Low[u]c, Numbering[v])
D thy cch tnh nh vy l ng n bi nu v cha thm th nhnh DFS gc v nm trongnhnh DFS gc u v nhng cung ngc trong nhnh DFS gc v cng l cung ngc trong nhnhDFS gc u. Cn nu v thm th (u, v) s l cung ngc.
1
2
3
4
6
5
7
8
9 10
1
2
3
4
5
8
9
10
6 7 5
4
4
4
3
3
3
1
1
1
th v hng thnh chiu, Gi tr Numbering[u] ghi trong vng trn,
Gi tr Low[u] ghi bn cnh
Hnh 16: Php nh s v ghi nhn cung ngc ln cao nht
-
7/31/2019 File 11143
43/120
L thuyt th
L Minh Hong
42
Nu t nh u ti thm nh v, (u, v) l cung DFS. Khi nh v c duyt xong, li v th tcVisit(u), ta so snh Low[v] v Numbering[u]. Nu Low[v] > Numbering[u] th tc l nhnh DFSgc v khng c cung ngc thot ln pha trn v. Tc l cnh (u, v) khng thuc mt chu trnh csno c, tc cnh l cu.{ th G = (V, E)}
procedure Visit(u V);begin;for ( v: (u, v) E) dobegin;if thenbeginVisit(v);if Low[v] > Numbering[u] then ;Low[u] := Min(Low[u], Low[v]); {Cc tiu ho Low[u] theo Low[v]}
endelse {v thm}
Low[u] := Min(Low[u], Numbering[v]); {Cc tiu ho Low[u] theo Numbering[v]}end;end;
beginfor ( u V) doif then Visit(u);
;end.
Input: file vn bn GRAPH.INP
Dng 1 ghi snh n (n 100) v s cnh m ca th cch nhau t nht mt du cch
m dng tip theo, mi dng ghi hai s nguyn dng u, v cch nhau t nht mt du cch, chobit th c cnh ni nh u vi nh v
Output: file vn bn GRAPH.OUTThng bo cc cu v php nh chiu c t thnh phn lin thng mnh nht
GRAPH.INP GRAPH.OUT
1
2
4
5
7
6
8
9
10 11
3
11 141 21 32 32 4
4 54 64 95 75 106 87 107 118 910 11
Bridges:(4, 5)(2, 4)Directed Edges:1 -> 2
2 -> 32 -> 43 -> 14 -> 54 -> 65 -> 76 -> 87 -> 108 -> 99 -> 410 -> 510 -> 1111 -> 7
PROG05_1.PAS * Php nh chiu DFS v lit k cu
program Directivity_and_Bridges;
-
7/31/2019 File 11143
44/120
L thuyt th
L Minh Hong
43
constmax = 100;
vara: array[1..max, 1..max] of Boolean; {Ma trn k ca th}Numbering, Low: array[1..max] of Integer;n, Count: Integer;
procedure Enter;varf: Text;i, m, u, v: Integer;
beginFillChar(a, SizeOf(a), False);Assign(f, 'GRAPH.INP'); Reset(f);ReadLn(f, n, m);for i := 1 to m dobeginReadLn(f, u, v);a[u, v] := True;a[v, u] := True;
end;
Close(f);end;
procedure Init;beginFillChar(Numbering, SizeOf(Numbering), 0); {Numbering[u] = 0 u cha thm}Count := 0;
end;
procedure Visit(u: Integer);varv: Integer;
begin
Inc(Count);Numbering[u] := Count; {nh s th t thm chonh u, u tr thnh thm}Low[u] := n + 1; {Khi gn Low[u] bng mt gi tr ln hn tt cNumbering}for v := 1 to n doif a[u, v] then {Xt mi nh v k u}begina[v, u] := False; {nh chiu cnh (u, v) thnh cung (u, v)}if Numbering[v] = 0 then {Nu v cha thm}beginVisit(v); {i thm v}if Low[v] > Numbering[u] then {(u, v) l cu}WriteLn('(', u, ', ', v, ')');
if Low[u] > Low[v] then Low[u] := Low[v]; {Cc tiu ho Low[u] }
endelseif Low[u] > Numbering[v] then Low[u] := Numbering[v]; {Cc tiu ho Low[u] }
end;end;
procedure Solve;varu, v: Integer;
beginWriteLn('Bridges: '); {Dng DFS nh chiu th v lit k cu}for u := 1 to n doif Numbering[u] = 0 then Visit(u);
WriteLn('Directed Edges: '); {Qut li ma trn k in ra cc cnhnh hng}for u := 1 to n dofor v := 1 to n doif a[u, v] then WriteLn(u, ' -> ', v);
-
7/31/2019 File 11143
45/120
L thuyt th
L Minh Hong
44
end;
beginEnter;Init;Solve;
end.
IV. LIT K KHPTrong th v hng, Mt nh C c gi l khp, nu nh ta bi nh C v cc cnh linthuc vi n th s lm tng s thnh phn lin thng ca th. Bi ton t ra l phi lit k htcc khp ca th.R rng theo cch nh ngha trn, cc nh treo v nh c lp s khng phi l khp. th lin
thng c 3 nh, khng c khp (cho d bi nh no th vn lin thng) c gi l thsong lin thng. Gia hai nh phn bit ca th song lin thng, tn ti t nht 2 ng i khngc nh trung gian no chung.Coi mi cnh ca th ban u l hai cung c hng ngc chiu nhau v dng php duyt ththeo chiu su:
{ th G = (V, E)}
procedure Visit(u V): V;begin;for ( v: (u, v) E) doif then Visit(v);
end;
begin;
for ( u V) doif then Visit(u);
end;
Qu trnh duyt cho mt rng cc cy DFS. Cc cung duyt qua c ba loi: cung DFS, cung ngcv cung xui, khng b ri hnh, ta chu tin v cung DFS hoc cung ngc:
1
2
3
4
6
5
7
8
109
11
12
14
13
17
15 16
Hnh 17: Duyt DFS, xc nh cy DFS v cc cung ngc
Hy nhnh DFS gc nh r no Nu mi nhnh con ca nhnh DFS gc ru c mt cung ngc ln ti mt tin bi ca r th r
khng l khp. Bi nu trong th ban u, ta b ri th t mi nh bt k ca nhnh con, ta
-
7/31/2019 File 11143
46/120
L thuyt th
L Minh Hong
45
vn c thi ln mt tin bi ca r, ri i sang nhnh con khc hoc i sang tt c nhng nhcn li ca cy. S thnh phn lin thng ca th khng thay i.
Nu r khng phi l gc ca mt cy DFS, v tn ti mt nhnh con ca nhnh DFS gc rkhng c cung ngc ln mt tin bi ca r th r l khp. Bi khi , tt c nhng cung xut
pht t nhnh con chi ti nhng nh ni b trong nhnh DFS gc r m thi, trn th
ban u, khng tn ti cnh ni t nhng nh thuc nhnh con ti mt tin bi ca r. Vy tnhnh mun i ln mt tin bi ca r, tt phi i qua r. Hu r khi th s lm mt tt ccc ng i , tc l lm tng s thnh phn lin thng ca th.
Nu r l gc ca mt cy DFS, th r l khp khi v ch khi r c t nht hai nhnh con. Bi khi rc 2 nhnh con th ng i gia hai nh thuc hai nhnh con tt phi i qua r.
Vy th thut ton lit k khp li l nhng kthut quen thuc, duyt DFS, nh s, ghi nhncnh ngc ln cao nht tmt nhnh con, chthm vo mt thao tc nh: Nu tnh u gi quy thm nh v ((u, v) l cung DFS) th sau khi duyt xongnh v, li v th tc Visit(u), taso snh Low[v] v Numbering[u]kim tra xem tnhnh con gc v c cnh ngc no ln
tin bi ca u hay khng, nu khng c th tm thinh du u l khp. Cui cng phi kimtra liiu kin: nu u l gc cy DFS th n l khp khi v chkhi n c t nht 2 nhnh con,nu khng tho mn iu kin th nh du li u khng l khp.Input: file vn bn GRAPH.INP vi khun dng nh bi ton lit k cuOutput: Danh sch cc khp ca th
GRAPH.INP GRAPH.OUT
1
3
6 7
2
4
8
1112
5
9
10
13
13 151 32 42 5
3 63 74 84 115 95 106 78 118 129 109 1311 12
Cut vertices:2, 3, 4, 5, 9,
PROG05_2.PAS * Lit k cc khp ca th
program CutVertices;constmax = 100;
vara: array[1..max, 1..max] of Boolean; {Ma trn k ca th}Numbering, Low, nC: array[1..max] of Integer; {nC[u]: S nhnh con ca nhnh DFS gc u}Mark: array[1..max] of Boolean; {Mark[u] = True u l khp}n, Count: Integer;
procedure LoadGraph; {Nhp th (t thit b nhp chun Input)}vari, m, u, v: Integer;
beginFillChar(a, SizeOf(a), False);
-
7/31/2019 File 11143
47/120
L thuyt th
L Minh Hong
46
ReadLn(n, m);for i := 1 to m dobeginReadLn(u, v);a[u, v] := True; a[v, u] := True;
end;end;
procedure Visit(u: Integer); {Tm kim theo chiu su bt u t u}varv: Integer;
beginInc(Count);Numbering[u] := Count; Low[u] := n + 1; nC[u] := 0;Mark[u] := False;for v := 1 to n doif a[u, v] then {Xt mi v k u}if Numbering[v] = 0 then {Nu v cha thm}beginInc(nc[u]); {Tng bin m s con ca u ln 1}Visit(v); {Thm v}
{Nu nhnh DFS gc v khng c cung ngc ln mt tin bi ca u tc l Low[v] Numbering[u]}Mark[u] := Mark[u] or (Low[v] >= Numbering[u]); {Tmnh du u l khp}if Low[u] > Low[v] then Low[u] := Low[v]; {Cc tiu ho Low[u] }
endelseif Low[u] > Numbering[v] then Low[u] := Numbering[v]; {Cc tiu ho Low[u] }
end;
procedure Solve;varu: Integer;
beginFillChar(Numbering, SizeOf(Numbering), 0); {nh s = 0nh cha thm}
FillChar(Mark, SizeOf(Mark), False); {Mngnh du khp cha c g}Count := 0;for u := 1 to n doif Numbering[u] = 0 then {Xt mi nh u cha thm}beginVisit(u); {Thm u, xy dng cy DFS gc u}if nC[u] < 2 then {Nu u c t hn 2 con}
Mark[u] := False; {Th u khng phi l khp}end;
end;
procedure Result; {Da vo mngnh du lit k cc khp}var
i: Integer;beginWriteLn('Cut vertices:');for i := 1 to n doif Mark[i] then Write(i, ', ');
end;
beginAssign(Input, 'GRAPH.INP'); Reset(Input);Assign(Output, 'GRAPH.OUT'); Rewrite(Output);LoadGraph;Solve;Result;
Close(Input);Close(Output);
end.
-
7/31/2019 File 11143
48/120
L thuyt th
L Minh Hong
47
6. CHU TRNH EULER, NG I EULER, TH EULER
I. BI TON 7 CI CU
Thnh ph Konigsberg thuc Ph (nay l Kaliningrad thuc Cng ho Nga), c chia lm 4 vngbng cc nhnh sng Pregel. Cc vng ny gm 2 vng bn bsng (B, C), o Kneiphof (A) vmt min nm gia hai nhnh sng Pregel (D). Vo th k XVIII, ngi ta xy 7 chic cu ni
nhng vng ny vi nhau. Ngi dn y t hi: Liu c cch no xut pht ti mt a imtrong thnh ph, i qua 7 chic cu, mi chic ng 1 ln ri quay trv ni xut pht khng ?
Nh ton hc Thy sLeonhard Euler gii bi ton ny v c th coi y l ng dng u tinca L thuyt th, ng m hnh ho s 7 ci cu bng mt a th, bn vng c biudin bng 4 nh, cc cu l cc cnh. Bi ton tm ng qua 7 cu, mi cu ng mt ln c thtng qut ho bng bi ton: C tn ti chu trnh n trong a th cha tt c cc cnh ?.
A
B
C
DA
B
C
D
Hnh 18: M hnh th ca bi ton by ci cu
II. NH NGHA
1. Chu trnh n cha tt c cc cnh ca thc gi l chu trnh Euler2. ng i n cha tt c cc cnh ca thc gi l ng i Euler3. Mt th c chu trnh Eulerc gi l th Euler4. Mt th c ng i Eulerc gi l th na Euler.R rng mt th Euler th phi l na Euler nhng iu ngc li th khng phi lun ng
III. NH L
1. Mt thv hng lin thng G = (V, E) c chu trnh Euler khi v ch khi mi nh ca n
u c bc chn: deg(v) 0 (mod 2) (vV)2. Mt th v hng lin thng c ng i Euler nhng khng c chu trnh Euler khi v
ch khi n c ng 2 nh bc l3. Mt thi c hng lin thng yu G = (V, E) c chu trnh Euler th mi nh ca n c bn
bc ra bng bn bc vo: deg+(v) = deg-(v) (vV); Ngc li, nu G lin thng yu v minh ca n c bn bc ra bng bn bc vo th G c chu trnh Euler, hay G s l lin thngmnh.
4. Mt th c hng lin thng yu G = (V, E) c ng i Euler nhng khng c chu trnh
Euler nu tn ti ng hai nh u, v V sao cho deg+(u) - deg-(u) = deg-(v) - deg+(v) = 1, cntt c nhng nh khc u v v u c bn bc ra bng bn bc vo.
-
7/31/2019 File 11143
49/120
L thuyt th
L Minh Hong
48
IV. THUT TON FLEURY TM CHU TRNH EULER
1. i vi th v hng lin thng, mi nh u c bc chn.
Xut pht t mt nh, ta chn mt cnh lin thuc vi n i tip theo hai nguyn tc sau:
Xo b cnh i qua
Chi qua cu khi khng cn cnh no khc chnV ta c chn cnh i mt cch thoi mi nh vy cho ti khi khng i tip c na, ng i tmc l chu trnh Euler.V d: Vi th sau:
1
3
2
4
5
6
7
8
1
3
2
4
5
6
7
8
Nu xut pht tnh 1, c hai cch i tip: hoc sang 2 hoc sang 3, gi s ta s sang 2 v xocnh (1, 2) va i qua. T 2 ch c cch duy nht l sang 4, nn cho d (2, 4) l cu ta cng phi isau xo lun cnh (2, 4). n y, cc cnh cn li ca th c th v nh trn bng nt lin,cc cnh b xo c v bng nt t.By giang ng nh 4 th ta c 3 cch i tip: sang 3, sang 5 hoc sang 6. V (4, 3) l cu nnta s khng i theo cnh (4, 3) m si (4, 5) hoc (4, 6). Nu i theo (4, 5) v c tip tc i nhvy, ta sc chu trnh Euler l (1, 2, 4, 5, 7, 8, 6, 4, 3, 1). Cn i theo (4, 6) s tm c chu trnhEuler l: (1, 2, 4, 6, 8, 7, 5, 4, 3, 1).
2. i vi th c hng lin thng yu, mi nh u c bn bc ra bng bn bc vo.
Bng cch "lm dng thut ng", ta c th m tc thut ton tm chu trnh Euler cho c thc hng cng nh v hng:
Th nht, di y nu ta ni cnh (u, v) th hiu l cnh ni nh u v nh v trn th vhng, hiu l cung ni tnh u ti nh v trn th c hng.
Th hai, ta gi cnh (u, v) l "mt i khng trli" nu nh t u ta i ti v theo cnh , sau xo cnh i th khng c cch no t v quay li u.
Vy th thut ton Fleury tm chu trnh Euler c th m t nh sau:
Xut pht t mt nh, ta i mt cch tu theo cc cnh tun theo hai nguyn tc: Xo b cnhva i qua v ch chn cnh "mt i khng trli" nu nh khng cn cnh no khc chn.
V. CI T
Ta s ci t thut ton Fleury trn mt a th v hng. n gin, ta coi th ny c chutrnh Euler, cng vic ca ta l tm ra chu trnh thi. Bi vic kim tra tnh lin thng cng nhkim tra mi nh u c bc chn n gic th coi l chuyn nh.Input: file vn bn EULER.INP
Dng 1: Cha snh n ca th (n 100)
Cc dng tip theo, mi dng cha 3 s nguyn dng cch nhau t nht 1 du cch c dng: uv k cho bit gia nh u v nh v c k cnh niOutput: file vn bn EULER.OUT ghi chu trnh EULER
-
7/31/2019 File 11143
50/120
L thuyt th
L Minh Hong
49
EULER.INP EULER.OUT
1 2
34
41 2 11 3 21 4 12 3 13 4 1
1 2 3 1 3 4 1
PROG06_1.PAS * Thut ton Fleury tm chu trnh Euler
program Euler_Circuit;constmax = 100;
vara: array[1..max, 1..max] of Integer;n: Integer;
procedure Enter; {Nhp d liu t thit b nhp chun Input}var
u, v, k: Integer;beginFillChar(a, SizeOf(a), 0);ReadLn(n);while not SeekEof dobeginReadLn(u, v, k);a[u, v] := k;a[v, u] := k;
end;end;
{Th tc ny kim tra nu xo mt cnh ni (x, y) th y c cn quay li c x hay khng}function CanGoBack(x, y: Integer): Boolean;varQueue: array[1..max] of Integer; {Hng i dng cho Breadth First Search}First, Last: Integer; {First: Ch su hngi, Last: Ch s cui hng i}u, v: Integer;Free: array[1..max] of Boolean; {Mngnh du}
beginDec(a[x, y]); Dec(a[y, x]); {Th xo mt cnh (x, y) S cnh ni (x, y) gim 1}FillChar(Free, n, True); {sau p dng BFS xem t y c quay li xc khng ?}Free[y] := False;First := 1; Last := 1;Queue[1] := y;repeatu := Queue[First]; Inc(First);for v := 1 to n doif Free[v] and (a[u, v] > 0) thenbeginInc(Last);Queue[Last] := v;Free[v] := False;if Free[x] then Break;
end;until First > Last;CanGoBack := not Free[x];Inc(a[x, y]); Inc(a[y, x]); { trn th xo cnh th gi phi phc hi}
end;
procedure FindEulerCircuit; {Thut ton Fleury}varCurrent, Next, v, count: Integer;
-
7/31/2019 File 11143
51/120
L thuyt th
L Minh Hong
50
beginCurrent := 1;Write(1:5); {Bt u tnh Current = 1}count := 1;repeatNext := 0;for v := 1 to n doif a[Current, v] > 0 thenbeginNext := v;if CanGoBack(Current, Next) then Break;
end;if Next 0 thenbeginDec(a[Current, Next]);Dec(a[Next, Current]); {Xo b cnh vai qua}Write(Next:5); {In kt qui ti Next}Inc(count);if count mod 16 = 0 then WriteLn; {In ra ti a 16nh trn mt dng}Current := Next; {Li tip tc vi nhangng l Next}
end;until Next = 0; {Cho ti khi khngi tipc na}WriteLn;
end;
beginAssign(Input, 'EULER.INP'); Reset(Input);Assign(Output, 'EULER.OUT'); Rewrite(Output);Enter;FindEulerCircuit;Close(Input);Close(Output);
end.
VI. THUT TON TT HNTrong trng hp th Euler c s cnh nh, ta c th s dng phng php sau tm chutrnh Euler trong th v hng: Bt u t mt chu trnh n C bt k, chu trnh ny tm c
bng cch xut pht t mt nh, i tu theo cc cnh cho ti khi quay vnh xut pht, lu li qua cnh no xo lun cnh . Nu nh chu trnh C tm c cha tt c cc cnh ca th th l chu trnh Euler. Nu khng, xt cc nh dc theo chu trnh C, nu cn c cnh cha xo linthuc vi mt nh u no th li t u, ta i tu theo cc cnh cng theo nguyn tc trn cho tikhi quay trv u, c mt chu trnh n khc qua u. Loi b v tr u khi chu trnh C v chnvo C chu trnh mi tm c ti ng v tr ca u va xo, ta c mt chu trnh n C' mi ln
hn chu trnh C. C lm nh vy cho ti khi c chu trnh Euler. Vic chng minh tnh ng nca thut ton cng l chng minh nh l viu kin cn v mt th v hng lin thngc chu trnh Euler.
M hnh thut ton c th vit nh sau:;;
while Stack dobeginx := Get;
if then {T x cni hng khc c}beginPush(y);
-
7/31/2019 File 11143
52/120
L thuyt th
L Minh Hong
51
;end
else {T x khngi tip c ti u na}beginx := Pop;;
end;end;
Thut ton trn c th dng tm chu trnh Euler trong th c hng lin thng yu, mi nhc bn bc ra bng bn bc vo. Tuy nhin th t cc nh in ra b ngc so vi cc cung nhhng, ta c tho ngc hng cc cung trc khi thc hin thut t