120

07b6e3d3 6727 489d a0c5 c81f5f24daa1ly Thuyet Do Thi Le Minh Hoang

Embed Size (px)

DESCRIPTION

li thuyet do thi

Citation preview

  • L thuyt th

    L Minh Hong

    \ 1 [

    MC LC

    0. M U.......................................................................................................................................... 31. CC KHI NIM C BN.............................................................................................................. 4

    I. NH NGHA TH (GRAPH)..................................................................................................................4II. CC KHI NIM..........................................................................................................................................5

    2. BIU DIN TH TRN MY TNH............................................................................................ 6I. 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 TRN TH ............................................................................. 10I. BI TON.....................................................................................................................................................10II. THUT TON TM KIM THEO CHIU SU (DEPTH FIRST SEARCH)..........................................11III. 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. TH Y V THUT TON WARSHALL..............................................................................23IV. CC THNH PHN LIN THNG MNH...........................................................................................26

    5. VI NG DNG CA CC THUT TON TM KIM TRN TH ........................................ 36I. XY DNG CY KHUNG CA TH .................................................................................................36II. 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, NG I HAMILTON, TH HAMILTON.................................... 53I. NH NGHA................................................................................................................................................53II. NH L......................................................................................................................................................53III. CI T.....................................................................................................................................................53

    8. BI TON NG I NGN NHT........................................................................................... 57I. TH C TRNG S...............................................................................................................................57II. BI TON NG I 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.............60V. THUT TON DIJKSTRA V CU TRC HEAP.................................................................................63VI. TRNG HP TH KHNG C CHU TRNH - TH T T P ................................................65

  • L thuyt th

    L Minh Hong

    \ 2 [

    VII. NG I NGN NHT GIA MI CP NH - THUT TON FLOYD...................................68VIII. NHN XT..............................................................................................................................................70

    9. BI TON CY KHUNG NH NHT .......................................................................................... 72I. BI TON CY KHUNG NH NHT......................................................................................................72II. THUT TON KRUSKAL (JOSEPH KRUSKAL - 1956) .......................................................................72III. THUT TON PRIM (ROBERT PRIM - 1957).......................................................................................76

    10. BI TON LUNG CC I TRN MNG.............................................................................. 80I. BI TON.....................................................................................................................................................80II. 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 B GHP CC I TRN TH HAI PHA................................................. 89I. TH HAI PHA (BIPARTITE GRAPH).................................................................................................89II. BI TON GHP I KHNG TRNG V CC KHI NIM...........................................................89III. THUT TON NG M ....................................................................................................................90IV. CI T.....................................................................................................................................................90

    12. BI TON TM B GHP CC I VI TRNG S CC TIU TRN TH HAI PHA -THUT TON HUNGARI.................................................................................................................... 95

    I. BI TON PHN CNG ............................................................................................................................95II. PHN TCH .................................................................................................................................................95III. THUT TON ...........................................................................................................................................96IV. CI T...................................................................................................................................................100V. BI TON TM B GHP CC I VI TRNG S CC I TRN TH HAI PHA..........105VI. PHC TP TNH TON..................................................................................................................106

    13. BI TON TM B GHP CC I TRN TH ................................................................ 111I. CC KHI NIM.......................................................................................................................................111II. THUT TON EDMONDS (1965) ..........................................................................................................112III. PHNG PHP LAWLER (1973)..........................................................................................................113IV. CI T...................................................................................................................................................115V. PHC TP TNH TON...................................................................................................................119

  • L thuyt th

    L Minh Hong

    \ 3 [

    0. M UTrn 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 c bnca n c a ra t th k th XVIII bi nh ton hc Thu S Leonhard 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 tr li y, cng vi s ra i ca my tnh in t v spht 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 trongmng c th lin h c 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 nh m hnh th. Hin nay, mn hc ny l mt trong nhng kin thc c s ca 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 c bn nht c th d dng ci t trn my tnh mt s ng dng ca n. Cc khi nimtru tng v cc php chng minh s c 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 lptrnh l c hiu c tng c bn 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 gi vo cc cng vic g ri. Bi vic g ri 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 ranu 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.

  • 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 tnhHnh 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 th v 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 th c hng nu cc cnh trong E l c nh hng, c th c cnh ni tnh u ti nh v nhng cha chc c cnh ni t nh v ti nh u. Hay ni cch khc, tp Egm 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 hngn th a th

    Hnh 2: Phn loi th

  • 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 th nh 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 t y v sau, nu khng ch thch gthm 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 s nh 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 Vs bng 2m:

    m2)vdeg(Vv

    =

    Chng minh: Khi ly tng tt c cc bc nh tc l mi cnh e = (u, v) bt k s c tnh mt lntrong deg(u) v mt ln trong deg(v). T suy ra kt qu.H qu: Trong th v hng, s nh 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 t u, 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 scung 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:

    +

    ==

    VvVvm)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 s ctnh 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.

  • 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 s nh (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 vungA = [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 khngphi 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 02 0 0 0 1 13 1 0 0 0 14 1 1 0 0 05 0 1 1 0 0

    1

    4 3

    5 2

    1 2 3 4 5

    1 0 0 1 0 02 0 0 0 1 03 0 0 0 0 14 1 0 0 0 05 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 tlogic. 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:

  • 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 nh dn 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 ccnh 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). Danhsch c lu trong b nh di 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 din

    bng 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 c bn 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:

  • 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 mnglu 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 4on 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 s ng lin trc on th i. Quy c Head[n + 1] sbng 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 nh ca 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 s nh) 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 cccnh 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;

  • L thuyt th

    L Minh Hong

    \ 9 [var A: array[1..100, 1..100] of Integer; {Ma trn k ca th} n, i, j: Integer;begin Write('Number of vertices'); ReadLn(n); FillChar(A, SizeOf(A), 0); repeat Write('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 then begin {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 mcch 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.

  • 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 t nh u n nh vl 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 ng i n di 3 t nh 1 ti nh 4. Bi (1, 2) (2, 3) v (3,4) u l cc cnh (hay cung). (1, 6, 5, 4) khng phi ng i 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 th n c tmt nh xut pht no . Vn ny a v mt bi ton lit k m yu cu ca n l khng cb st hay lp li bt k nh 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 c bn nht: thut ton tm kim theo chiusu v thut ton tm kim theo chiu rng cng vi mt s ng 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 s c nhp t file vn bn GRAPH.INP. Trong :

    Dng 1 cha s nh 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 th n c t S Dng 2: ng i t S ti F c in ngc theo chiu t F v S

  • L thuyt th

    L Minh Hong

    \ 11 [

    GRAPH.INP GRAPH.OUT

    1

    2

    3 5

    46

    78

    8 7 1 51 21 32 32 43 54 67 8

    1, 2, 3, 5, 4, 6,5; begin Trace[v] := u; {Lu vt ng i, nh m t ti v l u} DFS(v); {Gi quy duyt tng t i 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 b nh du >; DFS(S); < Nu F cha b nh du th khng th c ng i t S ti F >; < Nu F b nh du th truy theo vt tm ng i t S ti F >;end.

    PROG03_1.PAS * Thut ton tm kim theo chiu suprogram Depth_First_Search_1;const max = 100;var a: array[1..max, 1..max] of Boolean; {Ma trn k ca th} Free: array[1..max] of Boolean; {Free[v] = True v cha c thm n} Trace: array[1..max] of Integer; {Trace[v] = nh lin trc v trn ng i t S ti v} n, S, F: Integer;

  • L thuyt th

    L Minh Hong

    \ 12 [procedure Enter; {Nhp d liu t thit b nhp chun (Input)}var i, u, v, m: Integer;begin FillChar(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} begin ReadLn(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 t nh u}var v: Integer;begin Write(u, ', '); {Thng bo ti c u} Free[u] := False; {nh du u thm} for v := 1 to n do if Free[v] and a[u, v] then {Vi mi nh v cha thm k vi u} begin Trace[v] := u; {Lu vt ng i: nh lin trc v trong ng i t S ti v l u} DFS(v); {Tip tc tm kim theo chiu su bt u t v} end;end;

    procedure Result; {In ng i t S ti F}begin WriteLn; {Vo dng th hai ca Output file} if Free[F] then {Nu F cha nh du thm tc l khng c ng} WriteLn('Path from ', S, ' to ', F, ' not found') else {Truy vt ng i, bt u t F} begin while F S do begin Write(F, '

  • 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 t nh 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;begin Write(u, ', '); for v := 1 to n do if (Trace[v] = 0) and A[u, v] then {Trace[v] = 0 thay v Free[v] = True} begin Trace[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 kimDFS sau (Mi tn uv ch thao tc quy: DFS(u) gi DFS(v)).

    1st1

    2

    3 5

    46

    78

    1

    2

    3 5

    46

    78

    2nd

    3rd 4th

    5th

    6th

    Hnh 3: Cy DFSHi: nh 2 v 3 u 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 cc nh k vi 2m cha nh du th d nhin trc ht n tm thy 3 v gi DFS(3), khi 3 b nh du nn khi kt thc qu trnh quy giDFS(2), li v DFS(1) th nh 3 c thm ( b nh du) nn DFS(1) s khng gi DFS(3) na.Hi: Nu F = 5 th ng i 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. Vyng i 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 s c thot cui cng. Vy nn chng, ta c th m t dy chuyn quy bng mt ngn xp (Stack).2. Ci t khng quyKhi 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 ban u ch c mt nh S}repeat ; {ang ng nh u} if then begin ; ; ; {Gi li a ch quay lui} ; {Dy chuyn duyt su c "ni" thm v na} end; {Cn nu u khng c nh k cha thm th ngn xp s ngn li, tng ng vi qu trnh li v ca dy chuyn DFS}until ;

  • L thuyt th

    L Minh Hong

    \ 14 [

    PROG03_2.PAS * Thut ton tm kim theo chiu su khng quyprogram Depth_First_Search_2;const max = 100;var a: 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)}var i, u, v, m: Integer;begin FillChar(a, SizeOf(a), False); ReadLn(n, m, S, F); for i := 1 to m do begin ReadLn(u, v); a[u, v] := True; a[v, u] := True; end;end;

    procedure Init; {Khi to}begin FillChar(Free, n, True); {Cc nh u cha nh du} Last := 0; {Ngn xp rng}end;

    procedure Push(V: Integer); {y mt nh V vo ngn xp}begin Inc(Last); Stack[Last] := V;end;

    function Pop: Integer; {Ly mt nh khi ngn xp, tr v trong kt qu hm}begin Pop := Stack[Last]; Dec(Last);end;

    procedure DFS;var u, v: Integer;begin Write(S, ', '); Free[S] := False; {Thm S, nh du S thm} Push(S); {Khi ng dy chuyn duyt su} repeat {Dy chuyn duyt su ang l S ... u} u := Pop; {u l im cui ca dy chuyn duyt su hin ti} for v := 1 to n do if Free[v] and a[u, v] then {Chn v l nh u tin cha thm k vi u, nu c:} begin Write(v, ', '); Free[v] := False; {Thm v, nh du v thm} Trace[v] := u; {Lu vt ng i} Push(u); Push(v); {Dy chuyn duyt su by gi l S ... u v} Break; end; until Last = 0; {Ngn xp rng}end;

  • L thuyt th

    L Minh Hong

    \ 15 [

    procedure Result; {In ng i t S ti F}begin WriteLn; if Free[F] then WriteLn('Path from ', S, ' to ', F, ' not found') else begin while F S do begin Write(F, '

  • 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 s c tm nh trong hm FindNextdi y:function FindNext(uV): V; {Tm nh s thm sau nh u, tr v 0 nu mi nh ti c t S u thm}begin repeat for (v K(u)) do if then {Nu u c nh k cha thm th chn nh k u tin cha thm thm tip} begin Trace[v] := u; {Lu vt} FindNext := v; Exit; end; u := Trace[u]; {Nu khng, li v mt 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 iC 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 s c 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 BFSGi 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 s c t chc di dng hng i(Queue)Ta s dng gii thut nh sau:Bc 1: Khi to:

    Phi duyt sau xp

  • L thuyt th

    L Minh Hong

    \ 17 [

    Cc nh u trng thi cha nh du, ngoi tr nh 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 s

    c duyt theo th t u tin chiu rngBc 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 ch c 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;const max = 100;var a: array[1..max, 1..max] of Boolean; Free: array[1..max] of Boolean; {Free[v] v cha c 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}var i, u, v, m: Integer;begin FillChar(a, SizeOf(a), False); ReadLn(n, m, S, F); for i := 1 to m do begin ReadLn(u, v); a[u, v] := True; a[v, u] := True; end;end;

    procedure Init; {Khi to}begin FillChar(Free, n, True); {Cc nh u cha nh du} Free[S] := False; {Ngoi tr nh 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}begin Inc(Last); Queue[Last] := V;end;

    function Pop: Integer; {Ly mt nh khi hng i, tr v trong kt qu hm}begin Pop := Queue[First]; Inc(First);end;

    procedure BFS; {Thut ton tm kim theo chiu rng}var

  • L thuyt th

    L Minh Hong

    \ 18 [ u, v: Integer;begin repeat u := Pop; {Ly mt nh u khi hng i} Write(u, ', '); {Thng bo thm u} for v := 1 to n do if Free[v] and a[u, v] then {Xt nhng nh v cha nh du k u} begin Push(v); {a v vo hng i ch thm} Free[v] := False; {nh du v} Trace[v] := u; {Lu vt ng i: nh lin trc v trong ng i t S l u} end; until First > Last; {Cho ti khi hng i rng}end;

    procedure Result; {In ng i t S ti F}begin WriteLn; if Free[F] then WriteLn('Path from ', S, ' to ', F, ' not found') else begin while F S do begin Write(F, '

  • 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 s c duyt trc. V nh vy, ta c nhn xt: nu kthp lu vt tm ng i th ng i t S ti F s l ng i ngn nht (theo ngha qua t cnhnht)2. Ci t bng thut ton loangCch 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 loangGii thut loang c th dng nh sau:Bc 1: Khi toCc nh khc S u cha b nh du, nh S b nh 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 b nh 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 loangprogram Breadth_First_Search_2;const max = 100;var a: 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}var i, u, v, m: Integer;begin FillChar(a, SizeOf(a), False); ReadLn(n, m, S, F);

  • L thuyt th

    L Minh Hong

    \ 20 [ for i := 1 to m do begin ReadLn(u, v); a[u, v] := True; a[v, u] := True; end;end;

    procedure Init;begin FillChar(Free, n, True); Free[S] := False; {Cc nh u cha nh du, ngoi tr nh S nh du} Old := [S]; {Tp "c" khi to ban u ch c mi S}end;

    procedure BFS; {Thut ton loang}var u, v: Byte;begin repeat {Lp: dng Old tnh New} New := []; for u := 1 to n do if u in Old then {Xt nhng nh u trong tp Old, vi mi nh u :} begin Write(u, ', '); {Thng bo thm u} for v := 1 to n do if Free[v] and a[u, v] then {Qut tt c nhng nh v cha b nh du m k vi u} begin Free[v] := False; {nh du v v lu vt ng i} 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 loang c na}end;

    procedure Result;begin WriteLn; if Free[F] then WriteLn('Path from ', S, ' to ', F, ' not found') else begin while F S do begin Write(F, '

  • 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 ti

    vic phi duyt qua ton b danh sch cnh, y l ci t ti nht, n c phc tp tnh tonl O(n.m).

  • 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 th ang xt (Xem v d).

    G1

    G2

    G3

    Hnh 6: th G v cc thnh phn lin thng G1, G2, G3 ca ni 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 vhng 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'

  • 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 c bn nht l: nh du nh 1 v nhng nh c th n t 1, thng bo nhng nh thuc thnh phn lin

    thng th nht. Nu tt c cc nh u b nh du th G l th lin thng, nu khng th s tn ti mt

    nh v no cha b nh du, ta s nh du v v cc nh c th n 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 b nh duprocedure Duyt(u)begin end;begin for v V do ; Count := 0; for u := 1 to n do if then begin Count := 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 ngbng phc tp tnh ton ca thut ton tm kim trn th trong th tc Duyt.

    III. TH Y V THUT TON WARSHALL

    1. nh ngha: th y vi n nh, k hiu Kn, l mt n th v hng m gia hai nh bt k ca nu c cnh ni.

    th y Kn c ng: 2)1.(2

    =

    nnCn cnh v bc ca mi nh u bng n - 1.

    K3 K4 K5

    Hnh 9: th y

    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.

  • L thuyt th

    L Minh Hong

    \ 24 [

    T nh ngha ca th y , ta d dng suy ra mt th y bao gi cng 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 th y Mt n th v hng c k thnh phn lin thng nu v ch nu bao ng ca n c k

    thnh phn lin thng y .

    Hnh 10: n th v hng v bao ng ca nBi vic kim tra mt th c phi th y hay khng c th thc hin kh d dng (m scnh 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 WarshallThut 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 tr thnh ma trn k ca bao ng bng cch: Vi mi nh k xt theo th t t 1 ti n, ta xttt c cc cp nh (u, v): nu c cnh ni (u, k) (auk = True) v c cnh ni (k, v) (akv = True)th ta t ni 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 s nh ca th, ta c th vit thut ton Warshall nh sau:

    for k := 1 to n do for u := 1 to n do if a[u, k] then for v := 1 to n do if a[k, v] then a[u, v] := True;

    hocfor k := 1 to n do for u := 1 to n do for v := 1 to n do a[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

  • 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 c nh 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 s nh 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 trng

    cho 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

    45

    2

    3

    12

    12 91 31 41 52 46 76 89 109 1111 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 thngprogram Connectivity;const max = 100;var a: array[1..max, 1..max] of Boolean; {Ma trn k ca th} Free: array[1..max] of Boolean; {Free[v] = True v cha c lit k vo thnh phn lin thng no} k, u, v, n: Integer; Count: Integer;

    procedure Enter; {Nhp th}var i, u, v, m: Integer;begin FillChar(a, SizeOf(a), False); ReadLn(n, m); for v := 1 to n do a[v, v] := True; {D nhin t v c ng i n chnh v} for i := 1 to m do begin ReadLn(u, v); a[u, v] := True; a[v, u] := True; end;

  • L thuyt th

    L Minh Hong

    \ 26 [end;

    begin Assign(Input, 'GRAPH.INP'); Reset(Input); Assign(Output, 'GRAPH.OUT'); Rewrite(Output); Enter; {Thut ton Warshall} for k := 1 to n do for u := 1 to n do for v := 1 to n do a[u, v] := a[u, v] or a[u, k] and a[k, v]; Count := 0; FillChar(Free, n, True); {Mi nh u cha c lit k vo thnh phn lin thng no} for u := 1 to n do if Free[u] then {Vi mt nh u cha c lit k vo thnh phn lin thng no} begin Inc(Count); WriteLn('Connected Component ', Count, ': '); for v := 1 to n do if a[u, v] then {Xt nhng nh k u (trn bao ng)} begin Write(v, ', '); {Lit k nh vo thnh phn lin thng cha u} Free[v] := False; {Lit k nh no nh du nh } 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 tchThm 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(uV);begin ; for (v: (u, v)E) do if 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:

  • 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 liv 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 t in thut ng tin hc Anh-Vit qu ngho nn nn khng th tm ra nhng t tngng vi cc thut ng trn. Ta c th hiu qua cc v d)

    1st

    2nd

    3rd

    4th

    5th

    6th

    7thu

    v

    1st

    2nd

    3rd

    4th

    5th

    6th

    7thv

    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 mnhnh l 1:Nu a, b l hai nh thuc thnh phn lin thng mnh C th vi mi ng i t a ti b cngnh t b ti a. Tt c nh 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 tia 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 caC u thuc nhnh DFS gc r.Chng minh:

  • 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 Clin thng mnh nn phi tn ti mt ng i t r ti v:

    (r = x0, x1, ..., xk = v)T nh l 1, tt c cc nh x1, x2, ..., xk u 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 iuphi 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 tmkim 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 t a 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 nmtrong 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 th

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

  • 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 nokhc, 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

    9 10

    11

    1

    2

    3

    4

    5

    6

    7

    8

    9 10

    11

    Hnh 12: Thut ton Tarjan "b" cy DFSTrnh by di dng nh vy, nhng iu quan trng nht by gi mi ni ti: Lm th no kimtra mt nh v no c phi l cht hay khng ?Hy nhnh DFS gc nh r no .Nhn xt 1:Nu nh t cc 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 ch n c nhng nh thuc nhnh m thi. Vy:

    Thnh phn lin thng mnh cha r Tp cc nh c th n t r = Nhnh DFS gc rnn r l cht.Nhn xt 2:Nu t mt nh v no ca nhnh DFS gc r c mt cung ngc ti mt nh 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 ul 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

  • 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 nh tmt nh v ca mt nhnh DFS gc r c mt cung cho i ti mt nhnh khc th r khng lcht. chng t iu ny, ta da vo tnh cht ca cy DFS: cung cho s ni t mt nhnh ti nhnhthm trc , ch khng bao gi c 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' s c duyt xong trc khi thm r, tc l khi

    thm 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 thngmnh cha v'. Ta thit lp c chu trnh (r'rvv'r'), suy ra r' v r thuc cng mtthnh 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 t mt 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 t nh 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 th n 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] vNumbering[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 s c 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 lyti nh u l s c nhnh DFS gc u cng chnh l thnh phn lin thng mnh cha u.procedure Visit(uV);begin

  • 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) do if then Low[u] := min(Low[u], Numbering[v]) else begin Visit(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 cathut 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 u

    cha c thm. Mng Stack, th tc Push, hm Pop m t cu trc ngn xp.Input: file vn bn GRAPH.INP: Dng u: Ghi s nh 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 thOutput: file vn bn GRAPH.OUTLit k cc thnh phn lin thng mnh

  • 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 mnhprogram Strong_connectivity;const max = 100;var a: 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)}var i, u, v, m: Integer;begin FillChar(a, SizeOf(a), False); ReadLn(n, m); for i := 1 to m do begin ReadLn(u, v); a[u, v] := True; end;end;

    procedure Init; {Khi to}begin FillChar(Numbering, SizeOf(Numbering), 0); {Mi nh u cha thm} FillChar(Free, SizeOf(Free), True); {Cha nh no b loi} Last := 0; {Ngn xp rng} Count := 0; {Bin nh s th t thm} ComponentCount := 0; {Bin nh s cc thnh phn lin thng}end;

    procedure Push(v: Integer); {y mt nh v vo ngn xp}begin Inc(Last); Stack[Last] := v;end;

    function Pop: Integer; {Ly mt nh khi ngn xp, tr v trong kt qu hm}begin Pop := Stack[Last]; Dec(Last);end;

  • L thuyt th

    L Minh Hong

    \ 33 [

    function Min(x, y: Integer): Integer;begin if x < y then Min := x else Min := y;end;

    procedure Visit(u: Integer); {Thut ton tm kim theo chiu su bt u t u}var v: Integer;begin Inc(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 do if Free[v] and a[u, v] then {Xt nhng nh 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} begin Visit(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; {n y th nh u c duyt xong, tc l cc nh thuc nhnh DFS gc u u 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, ': '); repeat v := Pop; {Ly dn cc nh ra khi ngn xp} Write(v, ', '); {Lit k cc nh } Free[v] := False; {Ri loi lun khi th} until v = u; {Cho ti khi ly ti nh u} WriteLn; end;end;

    procedure Solve;var u: 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 do if 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 s li cc nh t1 ti n theo th t duyt xong, sau o chiu tt c cc cung ca th. Xt ln lt cc nh

  • L thuyt th

    L Minh Hong

    \ 34 [

    theo th t t nh duyt xong sau cng ti nh duyt xong u tin, vi mi nh , ta li dngthut ton tm kim trn th (BFS hay DFS) lit k nhng nh no n c t nh 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 th nh 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 b nh 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 r c 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

    9 8

    7

    1

    2

    4

    5

    8

    9

    10

    3

    6 7

    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 chungcnh 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

  • 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 th i c sang nhau sau mt s hu hn cc bcdi chuyn gia hai ng trn thng nhau.

  • 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 th v 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 cy2. T khng cha chu trnh n v c n - 1 cnh3. T lin thng v mi cnh ca n u l cu4. 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 thphi c n - 1 cnh bng quy np theo s nh 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 nhno 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 ngoicc 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 thnhphn lin thng ca T cng khng cha chu trnh n, tc l cc T1, T2, ..., Tk u l cy. Gi n1, n2,..., nk ln lt l s nh 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 b i 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 b i mt cnh (u, v) nm trn ng i th nhtnhng khng nm trn ng i th hai th t u vn c th n c v bng cch: i t u i theo

  • 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 c thm 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 hainh 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 chutrnh 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 cy2. 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 trmca th).D thy rng vi mt th v hng lin thng c th c nhiu cy khung.

    G T1 T2 T3Hnh 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 th y Kn l nn-2.3. Thut ton xy dng cy khungXt 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 nhtTrc 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 ththm 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

  • L thuyt th

    L Minh Hong

    \ 38 [

    c ni hai cy khc nhau hay khng cng nh k thut hp nht hai cy s c 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 t nh S, ti mi bc t nh 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 xutpht 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 cnhca 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 c s ca th G.Cc tnh cht quan trng ca tp cc chu trnh c s:1. Tp cc chu trnh c s l ph thuc vo cy khung, hai cy khung khc nhau c th cho hai

    tp chu trnh c s khc 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 c s, vy s chu trnh c s ca th lin thng l m - n + 1.

    3. Tp cc chu trnh c s l 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 thkhng 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 k u phi thuc mt chu trnh c s. Bi nu cmt cnh (u, v) khng thuc mt chu trnh c s no, th khi ta b cnh i th vn linthng v khng nh hng ti s tn ti ca cc chu trnh c s. Li b tip nhng cnh ngoi

  • L thuyt th

    L Minh Hong

    \ 39 [

    ca cc chu trnh c s th 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 m rngkhi nim tp cc chu trnh c s cho th v hng tng qut: Mi khi thm mt cnh khngnm 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 c s ca th G. S ccchu trnh c s l 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 th nh 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 s i li gia haint giao thng bt k hay khng.1. Php nh chiu DFSXt m hnh duyt th bng thut ton tm kim theo chiu su bt u t nh 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) do if 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 thmtrc). 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 nhnhDFS 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 ltin 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 b i 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 cmt php nh chiu th gi l php nh chiu DFS.

  • L thuyt th

    L Minh Hong

    \ 40 [

    1

    2

    3

    4

    6

    5

    78

    9 10

    1

    2

    3

    4

    6

    5

    78

    9 10

    Hnh 15: Php nh chiu DFSNhn 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 b nh 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 c sca 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 c s).nh l: iu kin cn v mt th v hng lin thng c th nh chiu c l micnh ca th nm trn t nht mt chu trnh n (Hay ni cch khc mi cnh ca th ukhng 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 s c 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 trong

    G'. Tht vy, v (u, v) nm trong mt chu trnh n, m mi cnh ca mt chu trnh n uphi thuc mt chu trnh c s no , nn s c mt chu trnh c s cha c u v v. Chu trnh

  • L thuyt th

    L Minh Hong

    \ 41 [

    c s qua php nh chiu DFS vn l chu trnh trong G' nn i theo cc cnh nh hng cachu trnh , ta c th i 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 th n c xi+1. Suy ra t u cng c th nc v bng cc cnh nh hng ca G'.

    2. Ci tVi 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 th nh hng c t thnh phn lin thngmnh nht, mt cnh khng nm trn mt chu trnh n no (cu) ca th ban u s c nhhng thnh cung ni gia hai thnh phn lin thng mnh.Ta s ci t mt thut ton vi mt th v hng: lit k cc cu v nh chiu cc cnh c mt th mi 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 nhs . 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 tacho 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 nng

    xy 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

    78

    9 10

    1

    2

    3

    4

    5

    8

    910

    6 7 54

    4

    4

    33

    3

    1

    1

    1

    th v hng th nh 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

  • 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 cs no c, tc cnh l cu.{ th G = (V, E)}procedure Visit(uV);begin ; for (v: (u, v)E) do begin ; if then begin Visit(v); if Low[v] > Numbering[u] then ; Low[u] := Min(Low[u], Low[v]); {Cc tiu ho Low[u] theo Low[v]} end else {v thm} Low[u] := Min(Low[u], Numbering[v]); {Cc tiu ho Low[u] theo Numbering[v]} end;end;

    begin for (uV) do if then Visit(u); ;end.

    Input: file vn bn GRAPH.INP Dng 1 ghi s nh 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, cho

    bit th c cnh ni nh u vi nh vOutput: 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

    89

    10 11

    3

    11 141 21 32 32 44 54 64 95 75 106 87 107 118 910 11

    Bridges:(4, 5)(2, 4)Directed Edges:1 -> 22 -> 32 -> 43 -> 14 -> 54 -> 65 -> 76 -> 87 -> 108 -> 99 -> 410 -> 510 -> 1111 -> 7

    PROG05_1.PAS * Php nh chiu DFS v lit k cuprogram Directivity_and_Bridges;

  • L thuyt th

    L Minh Hong

    \ 43 [const max = 100;var a: array[1..max, 1..max] of Boolean; {Ma trn k ca th} Numbering, Low: array[1..max] of Integer; n, Count: Integer;

    procedure Enter;var f: Text; i, m, u, v: Integer;begin FillChar(a, SizeOf(a), False); Assign(f, 'GRAPH.INP'); Reset(f); ReadLn(f, n, m); for i := 1 to m do begin ReadLn(f, u, v); a[u, v] := True; a[v, u] := True; end; Close(f);end;

    procedure Init;begin FillChar(Numbering, SizeOf(Numbering), 0); {Numbering[u] = 0 u cha thm} Count := 0;end;

    procedure Visit(u: Integer);var v: Integer;begin Inc(Count); Numbering[u] := Count; {nh s th t thm cho nh u, u tr thnh thm} Low[u] := n + 1; {Khi gn Low[u] bng mt gi tr ln hn tt c Numbering} for v := 1 to n do if a[u, v] then {Xt mi nh v k u} begin a[v, u] := False; {nh chiu cnh (u, v) thnh cung (u, v)} if Numbering[v] = 0 then {Nu v cha thm} begin Visit(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] } end else if Low[u] > Numbering[v] then Low[u] := Numbering[v]; {Cc tiu ho Low[u] } end;end;

    procedure Solve;var u, v: Integer;begin WriteLn('Bridges: '); {Dng DFS nh chiu th v lit k cu} for u := 1 to n do if Numbering[u] = 0 then Visit(u); WriteLn('Directed Edges: '); {Qut li ma trn k in ra cc cnh nh hng} for u := 1 to n do for v := 1 to n do if a[u, v] then WriteLn(u, ' -> ', v);

  • L thuyt th

    L Minh Hong

    \ 44 [end;

    begin Enter; Init; Solve;end.

    IV. LIT K KHP

    Trong th v hng, Mt nh C c gi l khp, nu nh ta b i 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 linthng c 3 nh, khng c khp (cho d b i 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) do if then Visit(v);end;

    begin ; for (uV) do if 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 ch u tin v cung DFS hoc cung ngc:

    1

    2

    3

    4

    6

    5

    78

    109

    11

    12

    14

    13

    17

    15 16

    Hnh 17: Duyt DFS, xc nh cy DFS v cc cung ngcHy nhnh DFS gc nh r no Nu mi nhnh con ca nhnh DFS gc r u c mt cung ngc ln ti mt tin bi ca r th r

    khng l khp. Bi nu trong th ban u, ta b r i th t mi nh bt k ca nhnh con, ta

  • L thuyt th

    L Minh Hong

    \ 45 [

    vn c th i 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 xutpht t nhnh con ch i ti nhng nh ni b trong nhnh DFS gc r m thi, trn thban 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 k thut quen thuc, duyt DFS, nh s, ghi nhncnh ngc ln cao nht t mt nhnh con, ch thm vo mt thao tc nh: Nu t nh u gi quy thm nh v ((u, v) l cung DFS) th sau khi duyt xong nh v, li v th tc Visit(u), taso snh Low[v] v Numbering[u] kim tra xem t nhnh con gc v c cnh ngc no lntin bi ca u hay khng, nu khng c th tm thi nh du u l khp. Cui cng phi kimtra li iu kin: nu u l gc cy DFS th n l khp khi v ch khi 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

    910

    13

    13 151 32 42 53 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 thprogram CutVertices;const max = 100;var a: 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)}var i, m, u, v: Integer;begin FillChar(a, SizeOf(a), False);

  • L thuyt th

    L Minh Hong

    \ 46 [ ReadLn(n, m); for i := 1 to m do begin ReadLn(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}var v: Integer;begin Inc(Count); Numbering[u] := Count; Low[u] := n + 1; nC[u] := 0; Mark[u] := False; for v := 1 to n do if a[u, v] then {Xt mi v k u} if Numbering[v] = 0 then {Nu v cha thm} begin Inc(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]); {Tm nh du u l khp} if Low[u] > Low[v] then Low[u] := Low[v]; {Cc tiu ho Low[u] } end else if Low[u] > Numbering[v] then Low[u] := Numbering[v]; {Cc tiu ho Low[u] }end;

    procedure Solve;var u: Integer;begin FillChar(Numbering, SizeOf(Numbering), 0); {nh s = 0 nh cha thm} FillChar(Mark, SizeOf(Mark), False); {Mng nh du khp cha c g} Count := 0; for u := 1 to n do if Numbering[u] = 0 then {Xt mi nh u cha thm} begin Visit(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 mng nh du lit k cc khp}var i: Integer;begin WriteLn('Cut vertices:'); for i := 1 to n do if Mark[i] then Write(i, ', ');end;

    begin Assign(Input, 'GRAPH.INP'); Reset(Input); Assign(Output, 'GRAPH.OUT'); Rewrite(Output); LoadGraph; Solve; Result; Close(Input); Close(Output);end.

  • L thuyt th

    L Minh Hong

    \ 47 [6. CHU TRNH EULER, NG I EULER, TH EULERI. 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 b sng (B, C), o Kneiphof (A) vmt min nm gia hai nhnh sng Pregel (D). Vo th k XVIII, ngi ta xy 7 chic cu ninhng 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 tr v ni xut pht khng ?Nh ton hc Thy s Leonhard 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 th c gi l chu trnh Euler2. ng i n cha tt c cc cnh ca th c gi l ng i Euler3. Mt th c chu trnh Euler c gi l th Euler4. Mt th c ng i Euler c 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 th v hng lin thng G = (V, E) c chu trnh Euler khi v ch khi mi nh ca nu 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 vch khi n c ng 2 nh bc l

    3. Mt thi c hng lin thng yu G = (V, E) c chu trnh Euler th mi nh ca n c bnbc 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 trnhEuler 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.

  • 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 Ch i 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 t nh 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 gi ang 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 s i (4, 5) hoc (4, 6). Nu i theo (4, 5) v c tip tc i nhvy, ta s c 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 t c 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 v

    hng, hiu l cung ni t nh u ti nh v trn th c hng. Th hai, ta gi cnh (u, v) l "mt i khng tr li" 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 tr li" 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 gi c th coi l chuyn nh.Input: file vn bn EULER.INP Dng 1: Cha s nh 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: u

    v k cho bit gia nh u v nh v c k cnh niOutput: file vn bn EULER.OUT ghi chu trnh EULER

  • 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 Eulerprogram Euler_Circuit;const max = 100;var a: 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;begin FillChar(a, SizeOf(a), 0); ReadLn(n); while not SeekEof do begin ReadLn(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;var Queue: array[1..max] of Integer; {Hng i dng cho Breadth First Search} First, Last: Integer; {First: Ch s u hng i, Last: Ch s cui hng i} u, v: Integer; Free: array[1..max] of Boolean; {Mng nh du}begin Dec(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 x c khng ?} Free[y] := False; First := 1; Last := 1; Queue[1] := y; repeat u := Queue[First]; Inc(First); for v := 1 to n do if Free[v] and (a[u, v] > 0) then begin Inc(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}var Current, Next, v, count: Integer;

  • L thuyt th

    L Minh Hong

    \ 50 [begin Current := 1; Write(1:5); {Bt u t nh Current = 1} count := 1; repeat Next := 0; for v := 1 to n do if a[Current, v] > 0 then begin Next := v; if CanGoBack(Current, Next) then Break; end; if Next 0 then begin Dec(a[Current, Next]); Dec(a[Next, Current]); {Xo b cnh va i qua} Write(Next:5); {In kt qu i ti Next} Inc(count); if count mod 16 = 0 then WriteLn; {In ra ti a 16 nh trn mt dng} Current := Next; {Li tip tc vi nh ang ng l Next} end; until Next = 0; {Cho ti khi khng i tip c na} WriteLn;end;

    begin Assign(Input, 'EULER.INP'); Reset(Input); Assign(Output, 'EULER.OUT'); Rewrite(Output); Enter; FindEulerCircuit; Close(Input); Close(Output);end.

    VI. THUT TON TT HN

    Trong 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 cbng cch xut pht t mt nh, i tu theo cc cnh cho ti khi quay v nh 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 tr v 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 lnhn 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 v iu kin cn v mt th v hng lin thngc chu trnh Euler.M hnh thut ton c th vit nh sau:;;while Stack dobegin x := Get; if then {T x cn i hng khc c} begin Push(y);

  • L thuyt th

    L Minh Hong

    \ 51 [ ; end else {T x khng i tip c ti u na} begin x := 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 th o ngc hng cc cung trc khi thc hin thut ton c th t ng.Thut ton hot ng vi hiu qu cao, d ci t, nhng trng hp xu nht th Stack s phi chaton b danh sch nh trn chu trnh Euler chnh v vy m khi a th c s cnh qu ln th skhng khng gian nh m t Stack (Ta c th vi th ch gm 2 nh nhng gia hai nh c ti 106 cnh ni s thy ngay). L do thut ton ch c th p dng trong trng hp s cnh cgii hn bit trc nh l nh vy.

    PROG06_2.PAS * Thut ton hiu qu tm chu trnh Eulerprogram Euler_Circuit;const max = 100; maxE = 20000; {S cnh ti a}var a: array[1..max, 1..max] of Integer; stack: array[1..maxE] of Integer; n, last: Integer;

    procedure Enter; {Nhp d liu}var u, v, k: Integer;begin FillChar(a, SizeOf(a), 0); ReadLn(n); while not SeekEof do begin ReadLn(u, v, k); a[u, v] := k; a[v, u] := k; end;end;

    procedure Push(v: Integer); {y mt nh v vo ngn xp}begin Inc(last); Stack[last] := v;end;

    function Pop: Integer; {Ly mt nh khi ngn xp, tr v trong kt qu hm}begin Pop := Stack[last]; Dec(last);end;

    function Get: Integer; {Tr v phn t nh (Top) ngn xp}begin Get := Stack[last];end;

    procedure FindEulerCircuit;var

  • L thuyt th

    L Minh Hong

    \ 52 [ u, v, count: Integer;begin Stack[1] := 1; {Khi to ngn xp ban u ch gm nh 1} last := 1; count := 0; while last 0 do {Chng no ngn xp cha rng} begin u := Get; {Xc nh u l phn t nh ngn xp} for v := 1 to n do if a[u, v] > 0 then {Xt tt c cc cnh lin thuc vi u, nu thy} begin Dec(a[u, v]); Dec(a[v, u]); {Xo cnh khi th} Push(v); {y nh tip theo vo ngn xp} Break; end; if u = Get then {Nu phn t nh ngn xp vn l u vng lp trn khng tm thy nh no k vi u} begin Inc(count);