You are on page 1of 124

HC VIN CNG NGH BU CHNH VIN THNG

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

KHOA CNG NGH THNG TIN 1

IT

BI GING

PT

TON RI RC 2

H Ni 2013

LI GII THIU
Ton ri rc l mt lnh vc nghin cu v x l cc i tng ri rc dng
m cc i tng, v nghin cu mi quan h gia cc tp ri rc. Mt trong nhng yu
t lm Ton ri rc tr nn quan trng l vic lu tr, x l thng tin trong cc h thng
my tnh v bn cht l ri rc. Chnh v l do , Ton hc ri rc l mt mn hc bt
buc mang tnh cht kinh in ca cc ngnh Cng ngh thng tin v in t Vin thng.
Ti liu hng dn mn hc Ton hc ri rc c xy dng c xy dng da trn c
s kinh nghim ging dy mn hc v k tha t gio trnh [1, 2].
Ti liu c trnh by thnh hai phn. Trong , phn I trnh by nhng kin thc
c bn v l thuyt t hp thng qua vic gii quyt bn bi ton c bn l: Bi ton

IT

m, Bi ton tn ti, Bi ton lit k v Bi ton ti u. Phn II trnh by nhng kin


thc c bn v L thuyt th: khi nim, nh ngha, cc thut ton trn th, th
Euler, th Hamilton. Mt s bi ton c ng dng thc tin quan trng khc ca l

PT

thuyt th cng c ch trng gii quyt l Bi ton t mu th, Bi ton tm


ng i ngn nht v Bi ton lung cc i trong mng.
Trong mi phn ca ti liu, chng ti c gng trnh by ngn gn trc tip vo
bn cht ca vn , ng thi ci t hu ht cc thut ton bng ngn ng lp trnh C
nhm t c hai mc tiu chnh cho ngi hc: Nng cao t duy ton hc trong phn
tch, thit k thut ton v rn luyn k nng lp trnh vi nhng thut ton phc tp. Mc
d rt cn trng trong qu trnh bin son, tuy nhin ti liu khng trnh khi nhng
thiu st v hn ch. Chng ti rt mong c s gp qu bu ca tt c c gi v cc
bn ng nghip.

H ni, thng 11 nm 2013

MC LC

CHNG 1. MT S KHI NIM C BN CA TH ........................... 7


1.1. nh ngha v khi nim ....................................................................................... 7
1.2. Mt s thut ng c bn trn th v hng ..................................................... 10
1.2.1. Bc ca nh................................................................................................. 10
1.2.2. ng i, chu trnh, th lin thng........................................................... 11
1.3. Mt s thut ng c bn trn th c hng ..................................................... 13
1.3.1. Bn bc ca nh.......................................................................................... 13
1.3.2. th c hng lin thng mnh, lin thng yu ......................................... 13
1.4. Mt s dng th c bit ................................................................................. 15
1.5. Nhng im cn ghi nh ..................................................................................... 16

CHNG II. BIU DIN TH TRN MY TNH .................................. 17

PT

IT

2.1.Biu din th bng ma trn k .......................................................................... 17


2.1.1. Ma trn k ca th v hng .................................................................... 17
2.1.2. Ma trn k ca th c hng .................................................................... 18
2.1.3. Ma trn trng s ........................................................................................... 19
2.1.4. Qui c khun dng lu tr ma trn k ........................................................ 20
2.2. Biu din th bng danh sch cnh (cung )...................................................... 20
2.2.1. Biu din th v hng bng danh sch cnh ........................................... 20
2.2.2. Biu din th c hng bng danh sch cnh ........................................... 21
2.2.3. Biu din th trng s bng danh sch cnh ............................................. 22
2.2.4. Qui c khun dng lu tr danh sch cnh ................................................. 22
2.2.5. Cu trc d liu biu din danh sch cnh .................................................... 23
2.3. Biu din th bng danh sch k ..................................................................... 24
2.3.1. Biu din danh sch k da vo mng .......................................................... 25
2.3.2. Biu din danh sch k bng danh sch lin kt............................................ 25
2.3.3. Qui c khun dng lu tr danh sch k: ................................................... 26
2.4. Nhng im cn ghi nh ..................................................................................... 26

BI TP........................................................................................................... 27
CHNG 3. TM KIM TRN TH......................................................... 31
3.1. Thut ton tm kim theo chiu su (Depth First Search) .................................... 31
3.1.1.Biu din thut ton DFS(u) .......................................................................... 31
3.1.2. phc tp thut ton ................................................................................. 32
3.1.3. Kim nghim thut ton ............................................................................... 33
3.1.4. Ci t thut ton ......................................................................................... 35
3.2. Thut ton tm kim theo chiu rng (Breadth First Search)................................ 37
3.2.1. Biu din thut ton ..................................................................................... 37
3.2.2. phc tp thut ton ................................................................................. 38
3

3.2.3. Kim nghim thut ton ............................................................................... 38


3.2.4. Ci t thut ton ......................................................................................... 39
3.3. ng dng ca thut ton DFS v BFS................................................................. 41
3.3.1. Xc nh thnh phn lin thng ca th.................................................... 41
a) t bi ton................................................................................................................41
b) M t thut ton .........................................................................................................41
c) Kim nghim thut ton..............................................................................................42
d) Ci t thut ton .......................................................................................................43

3.3.2. Tm ng i gia cc nh trn th......................................................... 44


a) t bi ton................................................................................................................44
b) M t thut ton .........................................................................................................44
c) Kim nghim thut ton..............................................................................................46
d) Ci t thut ton .......................................................................................................47

3.3.3. Tnh lin thng mnh trn th c hng................................................... 49

IT

a) t bi ton................................................................................................................49
b) M t thut ton .........................................................................................................49
c) Kim nghim thut ton..............................................................................................49
d) Ci t thut ton .......................................................................................................51

3.3.4. Duyt cc nh tr ........................................................................................ 53


a) t bi ton................................................................................................................53
b) M t thut ton .........................................................................................................53
c) Kim nghim thut ton..............................................................................................53
d) Ci t thut ton .......................................................................................................54

PT

3.3.5. Duyt cc cnh cu....................................................................................... 56


a) t bi ton................................................................................................................56
b) M t thut ton .........................................................................................................56
c) Kim nghim thut ton..............................................................................................57
d) Ci t thut ton .......................................................................................................58

3.4. Mt s bi ton quan trng khc ......................................................................... 61


2.4.1. Duyt cc thnh phn lin thng mnh ca th......................................... 61
2.4.2. Bi ton nh chiu th............................................................................. 61
3.5. Mt s im cn ghi nh..................................................................................... 62

BI TP........................................................................................................... 63
CHNG 4. TH EULER, TH HAMIL TON.................................... 67
4.1. th Euler, th na Euler.......................................................................... 67
4.2. Thut ton tm chu trnh Euler......................................................................... 67
4.2.1. Chng minh th l Euler .......................................................................... 68
4.2.2. Biu din thut ton tm chu trnh Euler ....................................................... 69
4.2.3. Kim nghim thut ton ............................................................................... 70
4.2.4. Ci t thut ton ......................................................................................... 70
4.3. Thut ton tm ng i Euler......................................................................... 72
4.3.1. Chng minh th l na Euler.................................................................... 72
4.3.2. Thut ton tm ng i Euler...................................................................... 74

4.3.3. Kim nghim thut ton ............................................................................... 74


4.3.4. Ci t thut ton ......................................................................................... 76
4.4. th Hamilton .............................................................................................. 77
4.4.1. Thut ton tm tt c cc chu trnh Hamilton ................................................ 78
4.4.2. Kim nghim thut ton ............................................................................... 79
4.4.3. Ci t thut ton ......................................................................................... 79
4.4.3. Ci t thut ton ......................................................................................... 81
4.5. Nhng im cn ghi nh ................................................................................. 82

BI TP........................................................................................................... 83
CHNG 5. CY KHUNG CA TH ..................................................... 86

PT

IT

5.1. Cy v mt s tnh cht c bn........................................................................ 86


5.2. Xy dng cy khung ca th da vo thut ton DFS ................................. 87
5.2.1. M t thut ton ........................................................................................... 87
5.2.2. Kim nghim thut ton ............................................................................... 88
5.2.3. Ci t thut ton ......................................................................................... 89
5.3. Xy dng cy khung ca th da vo thut ton BFS.................................. 90
5.3.1. Ci t thut ton ......................................................................................... 91
5.3.2. Kim nghim thut ton ............................................................................... 91
5.3.3. Ci t thut ton ......................................................................................... 92
5.4. Bi ton xy dng cy khung c di nh nht............................................. 94
5.4.1. t bi ton.................................................................................................. 94
5.4.2. Thut ton Kruskal ....................................................................................... 95
a) M t thut ton .........................................................................................................95
b) Kim nghim thut ton .............................................................................................96
c) Ci t thut ton .......................................................................................................97

5.4.2. Thut ton Prim............................................................................................ 99


a) M t thut ton.......................................................................................................100
b) Kim nghim thut ton ..........................................................................................100
c) Ci t thut ton .....................................................................................................101

5.5. Nhng ni dung cn ghi nh ......................................................................... 103

BI TP......................................................................................................... 104
CHNG 6. BI TON TM NG I NGN NHT ........................... 106
6.1. Pht biu bi ton.......................................................................................... 106
6.2. Thut ton Dijkstra........................................................................................ 106
6.2.1. M t thut ton ......................................................................................... 107
6.2.2. Kim nghim thut ton ............................................................................. 107
6.2.3. Ci t thut ton ....................................................................................... 109
6.3.Thut ton Bellman-Ford ............................................................................... 111
6.3.1. M t thut ton ......................................................................................... 111
6.3.2. Kim nghim thut ton ............................................................................. 112
6.3.3. Ci t thut ton ....................................................................................... 114
5

6.4.Thut ton Floy.............................................................................................. 116


6.4.1. M t thut ton ......................................................................................... 116
6.4.2. Ci t thut ton ....................................................................................... 117
6.5. Nhng ni dung cn ghi nh ......................................................................... 119

PT

IT

BI TP......................................................................................................... 120

CHNG 1. MT S KHI NIM C BN CA TH

Ni dung chnh ca chng ny cp n nhng khi nim c bn nht ca th, bao


gm:
nh ngha v v d.
Phn loi th v hng, th c hng, n th, a th.
Khi nim v bc v bn bc ca nh.
Khi nim v ng i, chu trnh v tnh lin thng ca th.
Bi tp.
Bn c c th tm thy nhng kin thc su hn v rng hn trong cc ti liu
[1], [2], [3].

IT

1.1. nh ngha v khi nim

PT

th (Graph) l mt cu trc d liu ri rc bao gm cc nh v cc cnh ni


cc cp nh ny. Chng ta phn bit th thng qua kiu v s lng cnh v hng
ca mi cnh ni gia cc cp nh ca th. minh chng cho cc loi th, chng
ta xem xt mt s v d v cc loi mng my tnh bao gm: mi my tnh l mt nh,
mi cnh l nhng knh in thoi c ni gia hai my tnh vi nhau. Hnh 1.1, l s
ca mng my tnh loi 1.
San Francisco

Detroit

Chicago

New York

Denver
Los Angeles

Washington
Hnh 1.1. n th v hng.

Trong mng my tnh ny, mi my tnh l mt nh ca th, mi cnh v


hng biu din cc nh ni hai nh phn bit, khng c hai cp nh no ni cng mt
cp nh. Mng loi ny c th biu din bng mt n th v hng.
nh ngha 1. n th v hng G = <V, E> bao gm V l tp cc nh, E l
tp cc cp khng c th t gm hai phn t khc nhau ca V gi l cc cnh.

Trong trng hp gia hai my tnh no thng xuyn truyn ti nhiu thng
tin, ngi ta ni hai my tnh bi nhiu knh thoi khc nhau. Mng my tnh a knh
thoi c th c biu din nh Hnh 1.2.
San Francisco

Detroit
Chicago

New York

Denver
Los Angeles

Washington
Hnh 1.2. a th v hng.

Trn Hnh 1.2, gia hai my tnh c th c ni vi nhau bi nhiu hn mt knh


thoi. Vi mng loi ny, chng ta khng th dng n th v hng biu din.
th loi ny l a th v hng.

IT

nh ngha 2. a th v hng G = <V, E> bao gm V l tp cc nh, E l h


cc cp khng c th t gm hai phn t khc nhau ca V gi l tp cc cnh. e1E,
e2E c gi l cnh bi nu chng cng tng ng vi mt cp nh.

PT

R rng, mi n th u l a th, nhng khng phi a th no cng l


n th v gia hai nh c th c nhiu hn mt cnh ni gia chng vi nhau. Trong
nhiu trng hp, c my tnh c th ni nhiu knh thoi vi chnh n. Vi loi mng
ny, ta khng th dng a th biu din m phi dng gi th v hng. Gi
th v hng c m t nh trong Hnh 1.3.
nh ngha 3. Gi th v hng G = <V, E> bao gm V l tp nh, E l h cc
cp khng c th t gm hai phn t (hai phn t khng nht thit phi khc nhau) trong
V c gi l cc cnh. Cnh e c gi l khuyn nu c dng e =(u, u), trong u l
nh no thuc V.
San Francisco

Detroit

Chicago

New York

Denver
Los Angeles

Washington
Hnh 1.3. Gi th v hng.

Trong nhiu mng, cc knh thoi ni gia hai my tnh c th ch c php


truyn tin theo mt chiu. Chng hn my tnh t ti San Francisco c php truy nhp
ti my tnh t ti Los Angeles, nhng my tnh t ti Los Angeles khng c php

truy nhp ngc li San Francisco. Hoc my tnh t ti Denver c th truy nhp c
ti my tnh t ti Chicago v ngc li my tnh t ti Chicago cng c th truy nhp
ngc li my tnh ti Denver. m t mng loi ny, chng ta dng khi nim n
th c hng. n th c hng c m t nh trong Hnh 1.4.
San Francisco

Detroit
Chicago

New York

Denver
Los Angeles

Washington
Hnh 1.4. n th c hng.

IT

nh ngha 4. n th c hng G = <V, E> bao gm V l tp cc nh, E l


tp cc cp c th t gm hai phn t ca V gi l cc cung.
th c hng trong Hnh 1.4 khng cha cc cnh bi. Nn i vi cc mng
a knh thoi mt chiu, th c hng khng th m t c m ta dng khi nim a
th c hng. Mng c dng a th c hng c m t nh trong Hnh 1.5.
San Francisco

Detroit

PT

Chicago

New York

Denver

Los Angeles

Washington

Hnh 5.5. a th c hng.

nh ngha 5. a th c hng G = <V, E> bao gm V l tp nh, E l cp c


th t gm hai phn t ca V c gi l cc cung. Hai cung e1, e2 tng ng vi cng
mt cp nh c gi l cung lp.
T nhng dng khc nhau ca th k trn, chng ta thy s khc nhau gia cc
loi th c phn bit thng qua cc cnh ca th c th t hay khng c th t,
cc cnh bi, khuyn c c dng hay khng. Ta c th tng kt cc loi th thng
qua Bng 1.
Bng 1. Phn bit cc loi th
Loi th

Cnh

C cnh bi

C khuyn

1. n th v hng

V hng

Khng

Khng

2. a th v hng

V hng

Khng

3. Gi th v hng

V hng

4. n th c hng

C hng

Khng

Khng

5. a th c hng

C hng

1.2. Mt s thut ng c bn trn th v hng


Cho th v hng G = <V,E>, trong V l tp nh, E l tp cnh. Ta bt u
lm quen vi mt s khi nim c bn di y.
1.2.1. Bc ca nh
nh ngha 1. Hai nh u v v ca th v hng G =<V, E> c gi l k
nhau nu (u,v) l cnh thuc th G. Nu e =(u, v) l cnh ca th G th ta ni cnh
ny lin thuc vi hai nh u v v, hoc ta ni cnh e ni nh u vi nh v, ng thi cc
nh u v v s c gi l nh u ca cnh (u,v).
nh ngha 2. Ta gi bc ca nh v trong th v hng l s cnh lin thuc
vi n v k hiu l deg(v).
d

IT

PT

Hnh 1.6 th v hng G.

V d 1. Xt th trong Hnh 1.6, ta c:

deg(a) = 2, deg(b) =deg(c) = deg(f) = 4;


deg(e) = 3, deg(d) = 1, deg(g)=0.

nh c bc 0 c gi l nh c lp. nh bc 1 c gi l nh treo. V vy :
nh g l nh c lp ca th
nh d l nh treo ca th.
nh l 1. Gi s G = <V, E> l th v hng vi m
2m deg(v ) .

cnh. Khi

vV

Chng minh. R rng mi cnh e=(u,v) bt k, c tnh mt ln trong deg(u) v


mt ln trong deg(v). T suy ra s tng tt c cc bc bng hai ln s cnh.
H qu. Trong th v hng G=<V, E>, s cc nh bc l l mt s chn.
Chng minh. Gi O l tp cc nh bc chn v V l tp cc nh bc l. T nh
l 1 ta suy ra:
10

2m deg(v ) deg(v) deg(v)


vV

vO

vU

Do deg(v) l chn vi v l nh trong O nn tng th hai trong v phi cng l mt


s chn.
1.2.2. ng i, chu trnh, th lin thng
nh ngha 1. ng i di n t nh u n nh v trn th v hng
G=<V,E> l dy x0, x1, . . ., xn-1, xn , trong n l s nguyn dng, x0=u, xn=v, (xi,
xi+1)E, i =0, 1, 2, . . ., n-1.
ng i nh trn cn c th biu din thnh dy cc cnh
(x0, x1), (x1,x2) , . . ., (xn-1, xn).
nh u l nh u, nh v l nh cui ca ng i. ng i c nh u trng
vi nh cui (u=v) c gi l chu trnh. ng i hay chu trnh c gi l n nu
nh khng c cnh no lp li.

IT

V d 1. Tm cc ng i, chu trnh trong th v hng nh trong Hnh 1.7.


a, d, c, f, e l ng i n di 4. d, e, c, a khng l ng i v (e,c) khng phi l
cnh ca th. Dy b, c, f, e, b l chu trnh di 4. ng i a, b, e, d, a, b c di 5
khng phi l ng i n v cnh (a,b) c mt hai ln.
b

PT

Hnh 1.7. ng i trn th.

nh ngha 2. th v hng c gi l lin thng nu lun tm c ng i


gia hai nh bt k ca n.
Trong trng hp th G=<V, E> khng lin thng, ta c th phn r G thnh
mt s th con lin thng m chng i mt khng c nh chung. Mi th con nh
vy c gi l mt thnh phn lin thng ca G. Nh vy, th lin thng khi v ch
khi s thnh phn lin thng ca n l 1.
i vi th v hng, ng i t nh u n nh v cng ging nh ng i
t nh v n nh u. Chnh v vy, nu tn ti nh uV sao cho u c ng i n tt c
cc nh cn li ca th th ta kt lun c th l lin thng.

11

V d 2. Tm cc thnh phn lin thng ca th Hnh 1.8 di y.


S thnh phn lin thng ca G l 3. Thnh phn lin thng th nht gm cc nh
1, 2, 3, 4, 6, 7. Thnh phn lin thng th hai gm cc nh 5, 8, 9, 10. Thnh phn lin
thng th ba gm cc nh 11, 12, 13.
nh ngha 3. Cnh eE c gi l cu nu loi b e lm tng thnh phn lin
thng ca th. nh uV c gi l nh tr nu loi b u cng vi cc cnh ni vi
u lm tng thnh phn lin thng ca th.
V d 3. Tm cc cnh cu v nh tr ca th Hnh 1.8.
2

6
8
7
4

11

13
12

10

IT

Hnh 1.8. th v hng G

PT

Li gii.
Cnh (5, 9) l cu v nu loi b (5, 9) th s thnh phn lin thng ca
th tng t 3 ln 4.
Cnh (5, 10) l cu v nu loi b (5, 10) th s thnh phn lin thng ca
th tng t 3 ln 4.
Cnh (6, 7) l cu v nu loi b (6, 7) th s thnh phn lin thng ca
th tng t 3 ln 4.
Cnh (8, 10) l cu v nu loi b (8, 10) th s thnh phn lin thng ca
th tng t 3 ln 4.
Cc cnh cn li khng l cu v nu loi b cnh khng lm tng thnh
phn lin thng ca th.
nh 5 l nh tr v nu loi b nh 5 cng vi cc cnh ni vi nh 5 s
thnh phn lin thng ca th tng t 3 ln 4.
nh 6 l nh tr v nu loi b nh 6 cng vi cc cnh ni vi nh 6 s
thnh phn lin thng ca th tng t 3 ln 4.
nh 10 l nh tr v nu loi b nh 10 cng vi cc cnh ni vi nh 10
s thnh phn lin thng ca th tng t 3 ln 4.
Cc nh cn li khng l tr v nu loi b nh cng vi cc cnh ni vi
nh khng lm tng thnh phn lin thng ca th.

12

1.3. Mt s thut ng c bn trn th c hng


Cho th c hng G = <V,E>, trong V l tp nh, E l tp cnh. Ta bt u
lm quen vi mt s khi nim c bn di y.
1.3.1. Bn bc ca nh
nh ngha 1. Nu e=(u,v) l cung ca th c hng G th ta ni hai nh u v v
l k nhau, v ni cung (u, v) ni nh u vi nh v, hoc ni cung ny i ra khi nh u
v i vo nh v. nh u c gi l nh u, nh v c gi l nh cui ca cung
(u,v).
nh ngha 2. Ta gi bn bc ra ca nh v trn th c hng l s cung ca
th i ra khi v v k hiu l deg+(v). Ta gi bn bc vo ca nh v trn th c
hng l s cung ca th i vo v v k hiu l deg-(v).

IT

PT

Hnh 1.9. th c hng G.


V d 2. Xt th c hng trong Hnh 1.10, ta c

deg+(a) = 2, deg+(b) = 2, deg+(c) = 0, deg+(d) = 1, deg+(e) = 1.


deg-(a) = 1, deg-(b) = 1, deg-(c) = 2, deg-(d) = 2, deg-(e) = 1.
Do mi cung (u,v) c tnh mt ln trong bn bc vo ca nh v v mt ln
trong bn bc ra ca nh u nn ta c:
nh l 1. Gi s G = <V, E> l th c hng. Khi
deg (v) deg (v) | E | .

vV

vV

Rt nhiu tnh cht ca th c hng khng ph thuc vo hng trn cc cung


ca n. V vy, trong nhiu trng hp, ta b qua cc hng trn cung ca th. th
v hng nhn c bng cch b qua hng trn cc cung c gi l th v hng
tng ng vi th c hng cho.
1.3.2. th c hng lin thng mnh, lin thng yu
Khi nim ng i v chu trnh trn th c hng c nh ngha hon ton
tng t, ch c iu khc bit duy nht l ta phi ch ti cc cung ca th.

13

nh ngha 1. ng i di n t nh u n nh v trong th c hng


G=<V,A> l dy x0, x1, . . ., xn , trong , n l s nguyn dng, u = x0, v = xn, (xi, xi+1)
E.
ng i nh trn c th biu din thnh dy cc cung :
(x0, x1), (x1, x2), . . ., (xn-1, xn).
nh u c gi l nh u, nh v c gi l nh cui ca ng i. ng i
c nh u trng vi nh cui (u=v) c gi l mt chu trnh. ng i hay chu trnh
c gi l n nu nh khng c hai cnh no lp li.
i vi th v hng, ng i t nh u n nh v cng ging nh ng i
t nh v n nh u. i vi th c hng, ng i t nh u n nh v c th
khng phi l ng i t v n u. Chnh v vy, th v hng a ra hai khi nim
lin thng mnh v lin thng yu nh sau.
nh ngha 2. th c hng G=<V,E> c gi l lin thng mnh nu gia
hai nh bt k uV, vV u c ng i t u n v.

IT

Nh vy, chng t mt th c hng lin thng mnh ta cn chng t mi


cp nh ca th u c ng i n nhau. iu ny hon ton khc bit vi tnh lin
thng ca th v hng.

PT

nh ngha 3. Ta gi th v hng tng ng vi th c hng G=<V,E> l


th to bi G v b hng ca cc cnh trong G. Khi , th c hng G=<V,E>
c gi l lin thng yu nu th v hng tng ng vi n l lin thng.
V d 1. Hnh 1.10: th G1 l lin thng mnh, th G2 l lin thng yu.
a

G1

G2

Hnh 1.10. th c hng lin thng mnh, lin thng yu


nh ngha 4. th v hng G=<V,E> c gi l nh chiu c nu ta c
th bin i cc cnh trong G thnh cc cung tng ng nhn c mt th c
hng lin thng mnh.
nh l 1. th v hng G=<V,E> nh chiu c khi v ch khi cc cnh
ca n khng phi l cu.
Bn c c th tm hiu phn chng minh nh l trong cc ti liu [1, 2, 3].

14

1.4. Mt s dng th c bit


Di y l mt s dang n th v hng c bit c nhiu ng dng khc
nhau ca thc t.
th y . th y n nh, k hiu l Kn, l n th v hng m
gia hai nh bt k ca n u c cnh ni. V d th K3, K4, K5 trong Hnh 1.11.
1

1
2

K3

K4

K5

Hnh 1.11. th K3, K4, K5.

IT

th vng. th vng Cn (n3) c cc cnh (1,2), (2,3),..,(n-1,n), (n,1). V d


th C3, C4, C5 trong Hnh 1.12.
2

PT

C3

C4

C5

Hnh 1.12. th C3, C4, C5.

th bnh xe. th bnh xe Wn thu c bng cch b sung mt nh ni vi


tt c cc nh ca Cn. V d th W3, W4, W5 trong Hnh 1.13.
1

51

Hnh 1.13. th C3, C4, C5.


th hai pha. th G =<V,E> c gi l th hai pha nu tp nh V ca
n c th phn hoch thnh hai tp X v Y sao cho mi cnh ca th ch c dng (x,
y), trong xX v yY. V d th K2,3, K33, K3,5 trong Hnh 1.14.

15

3
1

6
1

5
4

Hnh 1.13. th K2,3, K3,3, K3,5.


1.5. Nhng im cn ghi nh
Nm vng v phn bit r cc loi th: n th, a th, th v hng,
th c hng, th trng s.
Nm vng nhng khi nim c bn trn th v hng.

IT

Nm vng nhng khi nim c bn trn th c hng.v th.


Nm vng cc khi nim ng i, chu trnh, lin thng, lin thng mnh, lin
thng yu.

PT

Nm vng cc loi th : th y , th vng, th bnh xe, th hai


pha...

16

CHNG II. BIU DIN TH TRN MY TNH

lu tr th v thc hin cc thut ton khc nhau, ta cn phi biu din


th trn my tnh, ng thi s dng nhng cu trc d liu thch hp m t th.
Vic chn cu trc d liu no biu din th c tc ng rt ln n hiu qu thut
ton. V vy, la chn cu trc d liu thch hp biu din th s ph thuc vo tng
bi ton c th. Ni dung chnh ca chng bao gm:
Biu din th bng ma trn k.
Biu din th bng danh sch cnh.
Biu din th bng danh sch k.
Biu din th bng ma trn lin thuc.

IT

Bi tp Chng 2.
Bn c c th tm thy nhng kin thc su hn v rng hn trong cc ti liu
[1], [2], [3].
2.1.Biu din th bng ma trn k

PT

Cu trc d liu ph dng nht biu din th l biu din th bng ma


trn. V l thuyt, ngi ta chng minh c mi ma trn vung (0,1) cp n u ng
cu vi mt n th v hng hoc c hng. Mc ny, chng ta s xem xt phng
php biu din cc loi th khc nhau bng ma trn k.
2.1.1. Ma trn k ca th v hng

Xt th n v hng G =<V, E>, vi tp nh V = {1, 2, . . ., n}, tp cnh E =


{e1, e2,.., em}. Ta gi ma trn k ca th G l ma trn c cc phn t hoc bng 0 hoc
bng 1 theo qui nh nh sau:
A = { aij: aij = 1 nu (i, j) E, aij = 0 nu (i,j) E; i, j =1, 2, . . ., n}.
V d 1. Biu din th trong Hnh 2.1 di y bng ma trn k.
2

Hnh 2.1. Ma trn k biu din th v hng.


17

Tnh cht ma trn k i vi th v hng:


n

a) Tng cc phn t ca ma trn bng hai ln s cnh :

ij

2m (m l s

i 1 j 1

cnh ca th.
n

b) Tng cc phn t ca hng u l bc ca nh u: deg(u ) auj . V d vi ma


j 1

trn k biu din th Hnh 2.1, tng cc phn t ca hng 1 l bc ca nh


1, v vy deg(1)=2; tng cc phn t ca hng 2 l bc ca nh 2, v vy
deg(2)=3.
n

c) Tng cc phn t ca ct u l bc ca nh u: deg(u ) a ju . V d vi ma


j 1

trn k biu din th Hnh 2.1, tng cc phn t ca ct 1 l bc ca nh 1,


v vy deg(1)=2; tng cc phn t ca ct 2 l bc ca nh 2, v vy deg(2)=3.

IT

d) Nu k hiu aijp , i, j 1,2,..., n l cc phn t ca ma trn. Khi ,


Ap = A.A. . . A (p ln); aijp , i, j 1,2,..., n ,

cho ta s ng i khc nhau t nh i n nh j qua p-1 nh trung gian.

PT

2.1.2. Ma trn k ca th c hng

Ma trn k ca th c hng cng c nh ngha hon ton tng t, chng


ta ch cn lu ti hng ca cnh. Ma trn k ca th c hng l khng i xng.
V d 2. Tm ma trn k ca th c hng trong Hnh 2.2.
2

Hnh 2.2. Ma trn k ca th c hng.


Tnh cht ca ma trn k ca th c hng:
n

a) Tng cc phn t ca ma trn bng s cnh :

a
i 1 j 1

th.

18

ij

m (m l s cnh ca

b) Tng cc phn t ca hng u l bn nh bc ra ca nh u: deg (u ) auj .


j 1

V d vi ma trn k biu din th Hnh 2.2, tng cc phn t ca hng 1 l


bn nh bc a ca nh 1, v vy deg+(1)=1; tng cc phn t ca hng 2 l
bn nh bc ra ca nh 3, v vy deg+(2)=3.
n

c) Tng cc phn t ca ct u l bn nh bc vo ca nh u: deg (u ) a ju .


j 1

V d vi ma trn k biu din th Hnh 2.2, tng cc phn t ct 1 l bn


nh bc vo ca nh 1, v vy deg-(1)=1; tng cc phn t ca ct 2 l bn
nh bc vo ca nh 2, v vy deg-(2)=1.
d) Nu k hiu aijp , i, j 1,2,..., n l cc phn t ca ma trn. Khi , Ap = A.A. . .
A (p ln); aijp , i, j 1,2,..., n , cho ta s ng i khc nhau t nh i n nh j
qua p-1 nh trung gian.

IT

2.1.3. Ma trn trng s

PT

Trong rt nhiu ng dng khc nhau ca l thuyt th, mi cnh e =(u,v) ca n


c gn bi mt s c(e) = c(u,v) gi l trng s ca cnh e. th trong trng hp nh
vy gi l th trng s. Trong trng hp , ma trn k ca th c thay bi ma
trn trng s c= c[i,j], i, j= 1, 2, . . ., n. c[i,j] = c(i,j) nu (i, j) E, c[i,j] = nu (i, j)
E. Trong , nhn cc gi tr: 0, , - tu theo tng tnh hung c th ca thut ton.
V d 3. Ma trn k ca th c trng s trong Hnh 2.3.
3

1
2

Hnh 2.3. Ma trn k ca th c hng.


u im ca ma trn k:
n gin d ci t trn my tnh bng cch s dng mt mng hai chiu
biu din ma trn k;
D dng kim tra c hai nh u, v c k vi nhau hay khng bng ng
mt php so snh (a[u][v]0?);v chng ta ch mt ng mt php so snh.

19

Nhc im ca ma trn k:
Lng ph b nh: bt k s cnh nhiu hay t ta cn n2 n v b nh
biu din;
Khng th biu din c vi cc th c s nh ln (v d triu nh);
xem xt nh nh u c nhng nh k no cn mt n php so snh k c
nh u l nh c lp hoc nh treo.
2.1.4. Qui c khun dng lu tr ma trn k
thun tin cho nhng ni dung k tip, ta qui c khun dng d liu biu din
th di dng ma trn k hoc ma trn trng s trong file nh sau:
Dng u tin ghi li s nh ca th;
N dng k tip ghi li ma trn k ca th. Hai phn t khc nhau ca ma trn
k c vit cch nhau mt vi khong trng.
sau:

0
1
0
0
1

0
1
1
1
1

0
1
0
0
0

PT

dothi.in
5
0
1
1
0
1
1
0
1
0
0

IT

V d ma trn k gm 6 nh ca Hnh 2.1 c t chc trong file dothi.in nh

0
0
0
1
0

2.2. Biu din th bng danh sch cnh (cung )


Trong trng hp th tha ( th c s cnh m 6n), ngi ta thng biu
din th di dng danh sch cnh. Trong php biu din ny, chng ta s lu tr danh
sch tt c cc cnh (cung) ca th v hng (c hng). Mi cnh (cung) e(x, y)
c tng ng vi hai bin dau[e], cuoi[e]. Nh vy, lu tr th, ta cn 2m n v
b nh. Nhc im ln nht ca phng php ny l nhn bit nhng cnh no k
vi cnh no chng ta cn m php so snh trong khi duyt qua tt c m cnh (cung) ca
th. Nu l th c trng s, ta cn thm m n v b nh lu tr trng s ca cc
cnh.
2.2.1. Biu din th v hng bng danh sch cnh
i vi th v hng, mi cnh l b khng tnh n th t cc nh. V d
cnh (u,v) v cnh (v, u) c xem l mt. Do vy, trong khi biu din th v hng
bng danh sch cnh ta ch cn lit k cc cnh (u,v) m khng cn lit k cnh (v,u).
trnh nhm ln, ta nn lit k cc cnh theo th t tng dn ca nh u mi cnh. Trong

20

trng hp biu din a th v hng, ta b sung thm mt ct l s cnh (socanh) ni


gia hai nh ca th. Hnh 2.4 di y m t chi tit phng php biu din th
v hng bng danh sch cnh.
Tnh cht danh sch cnh ca th v hng:
nh u nh hn nh cui mi cnh.
S nh c gi tr u thuc c v phi v v tri ca danh sch cnh l bc
ca nh u. V d gi tr u=1 xut hin 2 ln t ta suy ra deg(1)=2, s
2 xut hin 4 ln v vy deg(2) = 4.
2

nh u
1
1
2
2
2
3
4
4
5

IT

nh cui
2
3
3
4
5
4
5
6
6

Hnh 2.4. Biu din th v hng bng danh sch cnh.

PT

2.2.2. Biu din th c hng bng danh sch cnh

Trong trng hp th c hng, mi cnh l b c tnh n th t cc nh. V


d cnh (u,v) khc vi cnh (v, u). Do vy, trong khi biu din th v hng bng
danh sch cnh ta c bit ch n hng ca cc cnh. Hnh 2.5 di y m t chi
tit phng php biu din th c hng bng danh sch cnh.
2

nh u nh Cui
1
2
2
3
2
4
2
5
3
1
4
3
4
5
5
6
6
4

Hnh 2.5. Biu din th c hng bng danh sch cnh.


Tnh cht danh sch cnh ca th v hng:
nh u khng nht thit phi nh hn nh cui mi cnh.

21

S nh c gi tr u thuc c v phi cc cnh l deg+(u). V d gi tr


u=1 xut hin 1 ln v phi ca tt c cc cnh nn deg+(1) =1, gi tr
u=2 xut hin 3 ln v phi ca tt c cc cnh nn deg+(2) =3.
S nh c gi tr u thuc c v tri cc cnh l deg-(u). V d gi tr u=1
xut hin 1 ln v tri ca tt c cc cnh nn deg-(1) =1, gi tr u=2
xut hin 1 ln v tri ca tt c cc cnh nn deg-(2) =1.
2.2.3. Biu din th trng s bng danh sch cnh
Trong trng hp th c hng (hoc v hng) c trng s, ta b sung thm
mt ct l trng s ca mi cnh. Hnh 2.6 di y m t chi tit phng php biu din
th trng s bng danh sch cnh.
3

nh u nh Cui
1
2
2
3
2
4
2
5
3
1
4
3
4
5
5
6
6
4

3
7

PT

IT

Trng S
5
8
6
3
2
7
5
4
3

Hnh 2.6. Biu din th c hng bng danh sch cnh.

u im ca danh sch cnh:

Trong trng hp th tha (m<6n), biu din bng danh sch cnh tit
kim c khng gian nh;
Thun li cho mt s thut ton ch quan tm n cc cnh ca th.
Nhc im ca danh sch cnh:

Khi cn duyt cc nh k vi nh u bt buc phi duyt tt c cc cnh


ca th. iu ny lm cho thut ton c chi ph tnh ton cao.
2.2.4. Qui c khun dng lu tr danh sch cnh
thun tin cho nhng ni dung k tip, ta qui c khun dng d liu biu din
th di dng danh sch cnh trong file nh sau:
Dng u tin ghi li s N, M tng ng vi s nh v s cnh ca th. Hai
s c vit cnh nhau mt vi khong trng;
M dng k tip, mi dng gi li mt cnh ca th, nh u v nh cui mi
cnh c vit cch nhau mt vi khong trng.

22

V d vi th trng s cho bi Hnh 2.6 gm 6 nh v 9 cnh c lu tr


trong file dothi.in nh sau:
dothi.in
6
9
1
2
2
3
2
4
2
5
3
1
4
3
4
5
5
6
6
4

5
8
6
3
2
7
5
4
3

2.2.5. Cu trc d liu biu din danh sch cnh

IT

Phng php tt hn c biu din mi cnh ca th l s dng cu trc. Mi


cu trc gm c hai thnh vin dau[e] v cui cuoi[e]. Khi , danh sch cnh ca th
d dng c biu din bng mng hoc danh sch lin kt nh di y.
Biu din danh danh sch cnh ca th bng mng:
typedef struct { //nh ngha mt cnh ca th
dau;

int

cuoi;

PT

int

} Edge;

Edge G[MAX]; //Danh sch cc cnh c biu din trong mng G.


2

nh u
1
1
2
2
2
3
4
4
5

nh cui
2
3
3
4
5
4
5
6
6

Hnh 2.7. Biu din th bng danh sch cnh

23

V d vi danh danh sch cnh ca th Hnh 2.7, biu din danh sch cnh da
vo mng ca th c dng sau:
Cnh:

G[1]

G[2]

G[3]

G[4]

G[5]

G[6]

G[7]

G[8]

G[9]

G[i].dau

G[i].cuoi
2
3
3
4
5
4
5
6
6
i vi th c hng cng c biu din nh trn nhng ta cn ch n
hng ca mi cung. i vi th trng s ta ch cn b sung vo cu trc Edge mt
thnh vin l trng s ca cnh nh sau:
typedef struct { //nh ngha mt cnh c trng s ca th
int

dau;

int

cuoi;

int

trongso;

IT

} Edge;
Edge G[MAX]; //Danh sch trng s cc cnh biu din trong mng G.
Biu din danh danh sch cnh ca th bng danh sch lin kt:
typedef struct canh{ //nh ngha mt cnh ca th
dau;

int

cuoi;

PT

int

struct node *next;

} *Edge;
Edge *G; //Cc cnh c ca th biu din bng danh danh sch lin kt G.
V d vi danh danh sch cnh ca th Hnh 2.7, biu din danh sch cnh da
vo danh sch lin kt c dng sau:
1
2

next

1
3

next

4
6

next

5
6

Null

2.3. Biu din th bng danh sch k


Trong rt nhiu ng dng, cch biu din th di dng danh sch k thng
c s dng. Trong biu din ny, vi mi nh u ca th chng ta lu tr danh sch
cc nh k vi n m ta k hiu l Ke(u), ngha l
Ke(u) = { v V: (u, v)E},
Vi cch biu din ny, mi nh u ca th, ta lm tng ng vi mt danh sch
tt c cc nh k vi n v c k hiu l List(u). biu din List(u), ta c th dng
cc kiu d liu kiu tp hp, mng hoc danh sch lin kt. Hnh 2.8 di y a ra v
d chi tit v biu din th bng danh sch k.
24

Ke(1) = { 2, 3).
Ke(2) = {1, 3, 4, 5}.

Ke(3) = {1, 2, 4}.

Ke(4) = {2, 3, 5, 6}.


Ke(5) = {2, 4, 6}.
3

Ke(6) = { 4, 5}.

Hnh 2.8. Biu din th bng danh sch k.


u im ca danh sch k:
D dng duyt tt c cc nh ca mt danh sch k;
D dng duyt cc cnh ca th trong mi danh sch k;

IT

Ti u v phng php biu din.


Nhc im ca danh sch k:

Kh khn cho ngi c c k nng lp trnh yu.


2.3.1. Biu din danh sch k da vo mng

A[i]=?

PT

S dng mt mng lu tr danh sch k cc nh. Trong , mng c chia


thnh n on, on th i trong mng lu tr danh sch k ca nh th iV. V d vi
th c cho trong Hnh 2.8 ta t chc mng A[] gm 18 phn t, trong mng A[]
c chia thnh 6 on, mi on lu tr danh sch k ca nh tng ng nh di y.
1

10 11 12 13 14 15 16 17 18

on 1

on 2

on 3

on 4

4
on 5

on 6

bit mt on thuc mng bt u t phn t no n phn t no ta s dng


mt mng khc dng lu tr v tr cc phn t bt u v kt thc ca on. V d vi
danh sch k gm 6 on nh trn, ta cn xy dng mt mng VT[6] = {0, 2, 6, 9, 13, 16,
18} lu tr v tr cc on trong mng A[]. Da vo mng VT[] ta c th thy: Ke(1)
l A[1], A[2]; Ke(2) l A[3], A[4], A[5], A[6] .. ..
2.3.2. Biu din danh sch k bng danh sch lin kt
Vi mi nh uV, ta biu din mi danh sch k ca nh bng mt danh sch
lin kt List(u). V d vi th trong Hnh 2.8 s c biu din bng 6 danh sch lin
kt List[1], List[2],.., List[6] nh di y.
25

List[1]:

3 Null

List[2]:

List[3]:

4 Null

List[4]:

List[5]:

6 Null

List[6]:

5 Null

5 Null

6 Null

2.3.3. Qui c khun dng lu tr danh sch k:

IT

Dng u tin ghi li s nh ca th;

N dng k tip ghi li danh sch k ca nh tng ng theo khun


dng: Phn t u tin l v tr kt thc ca on, tip n l danh sch
cc nh ca danh sch k. Cc phn t c ghi cch nhau mt vi
khong trng

PT

V d khun dng lu tr danh sch k ca Hnh 2.7 trong file dothi.in nh sau:
dothi.in
6
2
2
6
1
9
1
13
2
16
2
18
4

3
3
2
3
4
5

4
4
5
6

5
6

2.4. Nhng im cn ghi nh


Nm vng v phn bit r cc loi th: n th, a th, th v hng,
th c hng, th trng s.
Nm vng nhng khi nim c bn v th: ng i, chu trnh, th lin
thng.
Hiu v nm r bn cht ca cc phng php biu din th trn my tnh. Phn
tch u, nhc im ca tng phng php biu din.
Chuyn i cc phng php biu din qua li ln nhau gip ta hiu c cch
biu din th trn my tnh.

26

BI TP

1. Trong mt bui gp mt, mi ngi u bt tay nhau. Hy ch ra rng s lt ngi bt


tay nhau l mt s chn.
2. Mt n th vi n nh c nhiu nht l bao nhiu cnh?
3. Hy biu din cc th G1, G2, G3 di y di dng: ma trn k, danh sch cnh,
danh sch k.
2

6
C

5
4

b. th c hng G2.

PT

a. th v hng G1.

IT

9
F

c. th trng s G3
4. Hy to mt file d liu theo khun dng nh sau:
a. Ma trn k:
-

Dng u tin l s t nhin n l s cc nh ca th.

N dng k tip l ma trn k ca th.

b. Danh sch cnh:

27

Dng u tin ghi li s t nhin n v m l s cc nh v cc cnh ca


th.

M dng k tip ghi li th t nh u, cui ca cc cnh.

Hy vit chng trnh chuyn i mt th cho di dng ma trn k thnh mt


th cho di dng danh sch cnh v danh sch k. Ngc li, chuyn i mt th
cho di dng danh sch cnh thnh th di dng ma trn k v danh sch cnh.
c. Danh sch k:
Dng u tin ghi li s nh ca th;
N dng k tip ghi li danh sch k ca nh tng ng theo khun
dng: Phn t u tin l v tr kt thc ca on, tip n l danh sch
cc nh ca danh sch k. Cc phn t c ghi cch nhau mt vi
khong trng.
M dng k tip ghi li th t nh u, cui ca cc cnh.

IT

Hy vit chng trnh chuyn i mt th cho di dng ma trn k thnh mt


th cho di dng danh sch cnh v danh sch k. Ngc li, chuyn i mt th
cho di dng danh sch cnh thnh th di dng ma trn k v danh sch cnh.
5. Mt bn c 88 c nh s theo cch sau:
2

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

PT

Mi c th coi l mt nh ca th. Hai nh c coi l k nhau nu mt con


vua t ny c th nhy sang kia sau mt bc i. V d : 1 k vi 2, 9, 10, 11
k vi 2, 3, 4, 10, 12, 18, 19, 20. Hy vit chng trnh to ma trn k ca th, kt qu
in ra file king.out.
6. Bn c 88 c nh s nh bi trn. Mi c th coi l mt nh ca th . Hai
nh c gi l k nhau nu mt con m t ny c th nhy sang kia sau mt
nc i. V d 1 k vi 11, 18, 11 k vi 1, 5, 17, 21, 26, 28. Hy vit chng
trnh lp ma trn k ca th, kt qu ghi vo file matran.out.
28

7. Hy biu din th di y di dng ma trn k, danh sch cnh, danh sch k.


2

10

13

11

12

8. Hy biu din th di y di dng ma trn k, danh sch cnh, danh sch k.


6

10

13

IT

12

11

9. Hy biu din th di y di dng ma trn trng s, danh sch cnh - trng s.


9

2
2

12

PT

9
6

6
7

10

13
7

11

10. Hy biu din th di y di dng ma trn k, danh sch cnh, danh sch k.

10

12

13

11

29

30

IT

PT

CHNG 3. TM KIM TRN TH

C nhiu thut ton trn th c xy dng duyt tt c cc nh ca th sao


cho mi nh c ving thm ng mt ln. Nhng thut ton nh vy c gi l thut
ton tm kim trn th. Chng ta cng s lm quen vi hai thut ton tm kim c bn,
l duyt theo chiu su DFS (Depth First Search) v duyt theo chiu rng BFS
(Breath First Search). Trn c s ca hai php duyt c bn, ta c th p dng chng
gii quyt mt s bi ton quan trng ca l thuyt th. Ni dung chnh c cp
trong chng ny bao gm:
Thut ton tm kim theo chiu su trn th.
Thut ton tm kim theo chiu rng trn th.
ng dng ca thut ton tm kim theo chiu su.
ng dng ca thut ton tm kim theo chiu rng.

IT

Bn c c th tm hiu su hn v tnh ng n, phc tp ca cc thut ton


trong cc ti liu [1, 2, 3].
3.1. Thut ton tm kim theo chiu su (Depth First Search)

PT

T tng c bn ca thut ton tm kim theo chiu su l bt u ti mt nh v0


no , chn mt nh u bt k k vi v0 v ly n lm nh duyt tip theo. Cch duyt
tip theo c thc hin tng t nh i vi nh v0 vi nh bt u l u.
kim tra vic duyt mi nh ng mt ln, chng ta s dng mt mng
chuaxet[] gm n phn t (tng ng vi n nh), nu nh th u c duyt, phn t
tng ng trong mng chuaxet[u] c gi tr FALSE. Ngc li, nu nh cha c
duyt, phn t tng ng trong mng c gi tr TRUE.
3.1.1.Biu din thut ton DFS(u)

Thut ton DFS(u) c th c m t bng th tc qui nh sau:


Thut ton DFS (u): //u l nh bt u duyt
Begin
<Thm nh u>;//Duyt nh u
chuaxet[u] := FALSE;//Xc nhn nh u duyt
for each v ke(u) do //Ly mi nh vKe(u).
if (chuaxet[v] ) then //Nu nh v cha duyt
DFS(v); //Duyt theo chiu su bt t nh v
EndIf;
EndFor;
End.

31

Thut ton DFS(u) c th kh qui bng cch s dng ngn xp nh Hnh 3.1
di y:

PT

IT

Thut ton DFS(u):


Begin
Bc 1 (Khi to):
stack = ; //Khi to stack l
Push(stack, u); //a nh u vo ngn xp
<Thm nh u>; //Duyt nh u
chuaxet[u] = False; //Xc nhn nh u duyt
Bc 2 (Lp) :
while ( stack ) do
s = Pop(stack); //Loi nh u ngn xp
for each t Ke(s) do //Ly mi nh tKe(s)
if ( chuaxet[t] ) then //Nu t ng l cha duyt
<Thm nh t>; // Duyt nh t
chuaxet[t] = False; // Xc nhn nh t duyt
Push(stack, s);//a s vo stack
Push(stack, t); //a t vo stack
break;
//Ch ly mt nh t
EndIf;
EndFor;
EndWhile;
Bc 3 (Tr li kt qu):
Return(<Tp nh duyt>);
End.
Hnh 3.1. Thut ton DFS(u) da vo ngn xp.

3.1.2. phc tp thut ton


phc tp thut ton DFS(u) ph thuc vo phng php biu din th.
phc tp thut ton DFS(u) theo cc dng biu din th nh sau:
phc tp thut ton l O(n2) trong trng hp th biu din di dng
ma trn k, vi n l s nh ca th.
phc tp thut ton l O(n.m) trong trng hp th biu din di dng
danh sch cnh, vi n l s nh ca th, m l s cnh ca th.
phc tp thut ton l O(max(n, m)) trong trng hp th biu din di
dng danh sch k, vi n l s nh ca th, m l s cnh ca th.

32

Bn c t chng minh hoc c th tham kho trong cc ti liu [1, 2, 3].


3.1.3. Kim nghim thut ton
V d 1. Kim nghim thut ton DFS(1) trn th gm 13 nh trong Hnh 3.2 di
y?
2

6
8
7

10

11

12

IT

13
Hnh 3.2. th v hng G.
Cc nh duyt:
chuaxet[u]=False

nh bt u
duyt
DFS(2)

PT

DFS(1)

Cc nh cha duyt
chuaxet[u]=True

2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

1, 2

3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

1, 2, 4

3, 5, 6, 7, 8, 9, 10, 11, 12, 13

1,2,4, 3

5, 6, 7, 8, 9, 10, 11, 12, 13

1,2,4,3, 6

5, 7, 8, 9, 10, 11, 12, 13

1,2,4,3, 6,7

5, 8, 9, 10, 11, 12, 13

DFS(8)

1,2,4,3, 6,7,8

5, 9, 10, 11, 12, 13

DFS(10)

1,2,4,3, 6,7,8,10

5, 9, 11, 12, 13

DFS(5)

1,2,4,3, 6,7,8,10,5

9, 11, 12, 13

DFS(9)

1,2,4,3, 6,7,8,10,5,9

11, 12, 13

DFS(13)

1,2,4,3, 6,7,8,10,5,9,13

11, 12

DFS(11)

1,2,4,3, 6,7,8,10,5,9,13,11

12

DFS(11)

1,2,4,3, 6,7,8,10,5,9,13,11,12

Kt qu duyt:

1, 2, 4, 3, 6, 7, 8, 10, 5, 9, 13, 11, 12

DFS(4)
DFS(3)
DFS(6)
DFS(7)

33

bn c lm quen vi phng php kim nghim thut ton da vo d liu,


chng ti s dng biu din ca th bng ma trn k nh c trnh by trong
Chng 2. Vic kim nghim thut ton bng cc biu din khc (danh sch cnh, danh
sch k) xem nh nhng bi tp bn c t tm ra li gii.
V d 2. Cho th gm 13 nh c
biu din di dng ma trn k nh hnh
bn phi. Hy cho bit kt qu thc hin
thut ton trong Hnh 3.1 bt u ti nh
u=1? Ch r trng thi ca ngn xp v
tp nh c duyt theo mi bc thc
hin ca thut ton?

0
1
1
1
0
0
0
0
0
0
0
0
0

1
0
1
1
0
1
0
0
0
0
0
0
0

1
1
0
1
1
0
0
0
0
0
0
0
0

1
1
1
0
0
0
1
0
0
0
0
0
0

0
0
1
0
0
1
1
1
0
0
0
1
0

0
1
0
0
1
0
1
0
0
0
0
1
0

0
0
0
1
1
1
0
1
0
0
0
0
0

0
0
0
0
1
0
1
0
0
0
0
1
0

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
1
0
1
1
1

0
0
0
0
0
0
0
0
1
1
0
0
1

0
0
0
0
1
1
0
1
0
1
0
0
0

0
0
0
0
0
0
0
0
1
1
1
0
0

IT

Li gii. Trng thi ca ngn xp v tp nh c duyt theo thut ton c th


hin trong Bng 3.1 di y.
Bng 3.1. Kim nghim thut ton DFS(1).
STT

Trng thi stack

Cc nh c duyt

1, 2

1, 2, 3

1, 2, 3

1, 2, 3, 4

1, 2, 3, 4

1, 2, 3, 4, 7

1, 2, 3, 4, 7

1, 2, 3, 4, 7, 5

1, 2, 3, 4, 7, 5

1, 2, 3, 4, 7, 5, 6

1, 2, 3, 4, 7, 5, 6

1, 2, 3, 4, 7, 5, 6, 12

1, 2, 3, 4, 7, 5, 6, 12

1, 2, 3, 4, 7, 5, 6, 12, 8

1, 2, 3, 4, 7, 5, 6, 12, 8

10

1, 2, 3, 4, 7, 5, 6, 12, 10

1, 2, 3, 4, 7, 5, 6, 12, 8, 10

11

1, 2, 3, 4, 7, 5, 6, 12, 10, 9

1, 2, 3, 4, 7, 5, 6, 12, 8, 10, 9

12

1, 2, 3, 4, 7, 5, 6, 12, 10, 9, 11

1, 2, 3, 4, 7, 5, 6, 12, 8, 10, 9, 11

13

1, 2, 3, 4, 7, 5, 6, 12, 10, 9, 11, 13

1, 2, 3, 4, 7, 5, 6, 12, 8, 10, 9, 11, 13

14

PT

1, 2

Kt qu duyt DFS(1) = { 1, 2, 3, 4, 7, 5, 6, 12, 8, 10, 9, 11, 13}.


34

Ch .
i vi th v hng, nu DFS(u) = V ta c th kt lun th lin thng.
i vi th c hng, nu DFS(u) = V ta c th kt lun th lin thng
yu.
3.1.4. Ci t thut ton
Thut ton c ci t theo khun dng d liu t chc trong file dothi.in c
qui c nh c trnh by trong Mc 2.1.3 nh sau:
Dng u tin ghi li s nh ca th;
N dng k tip ghi li ma trn k ca th. Hai phn t khc nhau ca ma trn
k c vit cch nhau mt vi khong trng.

IT

Chng trnh c thc hin vi cc th tc nh sau:

Hm Init() : c d liu theo khun dng t file dothi.in v thit lp mng


chuaxet[u] =True (u=1, 2,..,n).
Hm DFS_Dequi : Ci t thut ton DFS(u) bng qui.

PT

Hm DFS_Stack : Ci t thut ton DFS(u) da vo stack.


V d vi file dothi.in di y vi u = 3 s cho ta kt qu thc hin chng trnh
nh sau:
dothi.in
10
0
1
1
1
0
0
0
0
0
0
1
0
0
1
1
0
0
0
0
0
1
0
0
1
0
1
0
0
0
0
1
1
1
0
1
1
0
0
1
0
0
1
0
1
0
0
0
1
0
0
0
0
1
1
0
0
1
0
0
0
0
0
0
0
0
1
0
0
1
1
0
0
0
0
1
0
0
0
1
1
0
0
0
1
0
0
1
1
0
1
0
0
0
0
0
0
1
1
1
0
DFS(3) = 3, 1, 2, 4, 5, 8, 9, 7, 6, 10.

35

PT

IT

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int A[MAX][MAX], n,chuaxet[MAX];
void Init(void){
int i,j;FILE *fp;
fp=fopen("DOTHI.IN","r");
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d",n);
for(i=1; i<=n; i++){
printf("\n");chuaxet[i]=TRUE;
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
}
void DFS_Dequi(int u){
int v;
printf("%3d",u);chuaxet[u]=FALSE;
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v])
DFS_Dequi(v);
}
}
void DFS_Stack(int u){
int Stack[MAX], dau=1, s, t;
Stack[dau]=u;chuaxet[u]=FALSE;
printf("%3d",u);
while(dau>0){
s=Stack[dau];dau--;
for(t =1;t<=n; t++){
if(chuaxet[t] && A[s][t]){
printf("%3d",t);
chuaxet[t] = FALSE;
Stack[++dau]=s;
Stack[++dau]=t;break;
}
}
}
}
36

void main(void){
int u ;clrscr();Init();
cout<<"\n Dinh bat dau duyet:";
cin>>u;
DFS_Stack(u);
//DFS_Dequi(u);
getch();
}
3.2. Thut ton tm kim theo chiu rng (Breadth First Search)
3.2.1. Biu din thut ton

IT

rng, vi thut ton tm kim theo chiu su, nh thm cng mun s tr
thnh nh sm c duyt xong. l kt qu tt yu v cc nh thm c np vo
stack trong th tc qui. Khc vi thut ton tm kim theo chiu su, thut ton tm
kim theo chiu rng thay th vic s dng stack bng hng i (queue). Trong th tc
ny, nh c np vo hng i u tin l u, cc nh k vi u l ( v1, v2, . . ., vk) c
np vo hng i nu nh n cha c xt n. Qu trnh duyt tip theo c bt u
t cc nh cn c mt trong hng i.

PT

ghi nhn trng thi duyt cc nh ca th, ta cng vn s dng mng


chuaxet[] gm n phn t thit lp gi tr ban u l TRUE. Nu nh u ca th c
duyt, gi tr chuaxet[u] s nhn gi tr FALSE. Thut ton dng khi hng i rng. Hnh
3.3. di y m t chi tit thut ton BFS(u).
Thut ton BFS(u):
Bc 1(Khi to):
Queue = ; Push(Queue,u); chuaxet[u] = False;
Bc 2 (Lp):
while (Queue ) do
s = Pop(Queue); <Thm nh s>;
for each tKe(s) do
if ( chuaxet[t] ) then
Push(Queue, t); chuaxet[t] = False;
EndIf ;
EndFor ;
EndWhile ;
Bc 3 (Tr li kt qu) :
Return(<Tp nh c duyt>) ;
End.
Hnh 3.3. Thut ton BFS(u).

37

3.2.2. phc tp thut ton


phc tp thut ton BFS(u) ph thuc vo phng php biu din th.
phc tp thut ton BFS(u) theo cc dng biu din th nh sau:
phc tp thut ton l O(n2) trong trng hp th biu din di dng
ma trn k, vi n l s nh ca th.
phc tp thut ton l O(n.m) trong trng hp th biu din di dng
danh sch cnh, vi n l s nh ca th, m l s cnh ca th.
phc tp thut ton l O(max(n, m)) trong trng hp th biu din di
dng danh sch k, vi n l s nh ca th, m l s cnh ca th.
Bn c t chng minh hoc c th tham kho trong cc ti liu [1, 2, 3].
3.2.3. Kim nghim thut ton
0
1
1
1
0
0
0
0
0
0
0
0
0

1
0
1
1
0
1
0
0
0
0
0
0
0

1
1
0
1
1
0
0
0
0
0
0
0
0

1
1
1
0
0
0
1
0
0
0
0
0
0

0
0
1
0
0
1
1
1
0
0
0
1
0

0
1
0
0
1
0
1
0
0
0
0
1
0

PT

IT

V d 3. Cho th gm 13 nh c
biu din di dng ma trn k nh hnh
bn phi. Hy cho bit kt qu thc hin
thut ton trong Hnh 3.3 bt u ti nh
u=1? Ch r trng thi ca hng i v tp
nh c duyt theo mi bc thc hin
ca thut ton?

0
0
0
1
1
1
0
1
0
0
0
0
0

0
0
0
0
1
0
1
0
0
0
0
1
0

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
1
0
1
1
1

0
0
0
0
0
0
0
0
1
1
0
0
1

0
0
0
0
1
1
0
1
0
1
0
0
0

0
0
0
0
0
0
0
0
1
1
1
0
0

Li gii. Trng thi ca hng i v tp nh c duyt theo thut ton c th


hin trong Bng 3.2 di y.
STT
1
2
3
4
5
6
7
8
9
10

Bng 3.2. Kim nghim thut ton BFS(1).


Trng thi Queue
Cc nh c duyt
1

2, 3, 4
1
3, 4, 6
1, 2
4, 6, 5
1, 2, 3
6, 5, 7
1, 2, 3, 4
5, 7, 12
1, 2, 3, 4, 6
7, 12, 8
1, 2, 3, 4, 6, 5
12, 8
1, 2, 3, 4, 6, 5, 7
8, 10
1, 2, 3, 4, 6, 5, 7, 12
10
1, 2, 3, 4, 6, 5, 7, 12, 8

38

11
12
13
14

9, 11, 13
11, 13
13

1, 2, 3, 4, 6, 5, 7, 12, 8,10
1, 2, 3, 4, 6, 5, 7, 12, 8,10, 9
1, 2, 3, 4, 6, 5, 7, 12, 8,10, 9, 11
1, 2, 3, 4, 6, 5, 7, 12, 8,10, 9, 11, 13

Kt qu duyt BFS(1) = { 1, 2, 3, 4, 6, 5, 7, 12, 8,10, 9, 11, 13}.


Ch .
i vi th v hng, nu BFS(u) = V ta c th kt lun th lin thng.
i vi th c hng, nu BFS(u) = V ta c th kt lun th lin thng
yu.
3.2.4. Ci t thut ton
Thut ton c ci t theo khun dng d liu t chc trong file dothi.in c
qui c nh c trnh by trong Mc 2.1.3 nh sau:

IT

Dng u tin ghi li s nh ca th;


N dng k tip ghi li ma trn k ca th. Hai phn t khc nhau ca ma trn
k c vit cch nhau mt vi khong trng.
Chng trnh c thc hin vi cc th tc nh sau:

PT

Hm Init() : c d liu theo khun dng t file dothi.in v thit lp mng


chuaxet[u] =True (u=1, 2,..,n).
Hm BFS_Dequi : Ci t thut ton BFS(u) bng hng i.
V d vi file dothi.in di y vi u = 3 s cho ta kt qu thc hin chng trnh
nh sau:
dothi.in
10
0
1
1
1
0
0
0
0
0
0
1
0
0
1
1
0
0
0
0
0
1
0
0
1
0
1
0
0
0
0
1
1
1
0
1
1
0
0
1
0
0
1
0
1
0
0
0
1
0
0
0
0
1
1
0
0
1
0
0
0
0
0
0
0
0
1
0
0
1
1
0
0
0
0
1
0
0
0
1
1
0
0
0
1
0
0
1
1
0
1
0
0
0
0
0
0
1
1
1
0
BFS(3) = 3, 1, 4, 6, 2, 5, 9, 7, 8, 10.

39

PT

IT

#include <stdio.h>
#include <conio.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int A[MAX][MAX], n,chuaxet[MAX];FILE *fp;
void Init(void){
int i,j;
fp= fopen("dothi.in","r");
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d",n);
for(i=1; i<=n; i++){
printf("\n");chuaxet[i]=TRUE;
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
}
void BFS(int u){
int queue[MAX], low=1, high=1, v;
queue[low]=u;chuaxet[u]=FALSE;
printf("\n Ket qua:");
while(low<=high){
u = queue[low];low=low+1;
printf("%3d", u);
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v]){
high = high+1;
queue[high]=v;
chuaxet[v]=FALSE;
}
}
}
}
void main(void){
int u;
Init();
printf("\n Dinh bat dau duyet:");
scanf("%d",&u);
BFS(u);
}

40

3.3. ng dng ca thut ton DFS v BFS


C rt nhiu ng dng khc nhau ca thut ton DFS v BFS trn th. Trong
khun kh ca gio trnh ny, chng ti cp n mt vi ng dng c bn. Nhng ng
dng c th hn bn c c th tm thy rt nhiu trong cc ti liu khc nhau hoc
Internet. Nhng ng dng c bn ca thut ton DFS v BFS c cp bao gm:
o Duyt tt c cc nh ca th.
o Duyt tt c cc thnh phn lin thng ca th.
o Tm ng i t nh s n nh t trn th.
o Duyt cc nh tr trn th v hng.
o Duyt cc nh tr trn th v hng.
o Duyt cc cnh cu trn th v hng.
o nh chiu th v hng.

IT

o Duyt cc nh r nhnh ca cp nh s, t.

o Xc nh tnh lin thng mnh trn th c hng.


o Xc nh tnh lin thng yu trn th c hng.
o Thut ton tm kim theo chiu rng trn th.

PT

o Xy dng cy khung ca th v hng lin thng


3.3.1. Xc nh thnh phn lin thng ca th
a) t bi ton

Cho th th v hng G=<V,E>, trong V l tp nh, E l tp cnh. Bi


ton t ra l xc nh cc thnh phn lin thng ca G =<V,E>?
b) M t thut ton

Mt th c th lin thng hoc khng lin thng. Nu th lin thng th s


thnh phn lin thng ca n l 1. iu ny tng ng vi php duyt theo th tc
DFS(u) hoc BFS(u) c gi n ng mt ln. Ni cch khc, DFS(u)=V v
BFS(u)=V.
Nu th khng lin thng (s thnh phn lin thng ln hn 1) chng ta c th
tch chng thnh nhng th con lin thng. iu ny cng c ngha l trong php
duyt th, s thnh phn lin thng ca n bng ng s ln gi ti th tc DFS() hoc
BFS(). xc nh s cc thnh phn lin thng ca th, chng ta s dng thm bin
solt nghi nhn cc nh cng mt thnh phn lin thng. Khi , thut ton xc nh
cc thnh phn lin thng ca th c m t trong Hnh 3.4.

41

IT

Thut ton Duyet-TPLT:


Bc 1 (Khi to):
solt = 0; //Khi to s thnh phn lin thng ban u l 0
Bc 2 (Lp):
for ( u =1; u n; u++) do //lp trn tp nh
if (chuaxet[u] ) then
solt = solt + 1; //Ghi nhn s thnh phn lin thng
<Ghi nhn cc nh thuc TPLT>;
BFS (u); //DFS(u); //
endif;
endfor;
Bc 3 (Tr li kt qu):
Return(solt);
end.
Hnh 3.4. Thut ton duyt cc thnh phn lin thng ca th.
c) Kim nghim thut ton

PT

V d ta cn kim nghim thut ton trn Hnh 3.4 cho th c biu din di
dng ma trn k nh di y.
0
0
1
0
1
0
1
0
0
0
0
0
0

0
0
0
1
0
1
0
0
0
0
0
0
0

1
0
0
0
1
0
1
0
0
0
1
0
0

0
1
0
0
0
1
0
1
0
1
0
0
0

1
0
1
0
0
0
1
0
1
0
1
0
1

0
1
0
1
0
0
0
1
0
1
0
0
0

1
0
1
0
1
0
0
0
1
0
0
0
0

0
0
0
1
0
1
0
0
0
1
0
1
0

0
0
0
0
1
0
1
0
0
0
1
0
1

0
0
0
1
0
1
0
1
0
0
0
1
0

0
0
1
0
1
0
0
0
1
0
0
0
1

0
0
0
0
0
0
0
1
0
1
0
0
0

0
0
0
0
1
0
0
0
1
0
1
0
0

Thc hin thut ton DFS v BFS nh c m t trn ta nhn c :


Thnh phn lin thng 1: BFS(1) = { 1, 3, 5, 7, 9, 11, 13}.
Thnh phn lin thng 2: BFS(2) = {2, 4, 6, 8, 10, 12}.

42

d) Ci t thut ton
Chng trnh duyt cc thnh phn lin thng ca th c ci t theo khun
dng d liu biu din di dng ma trn k trong Mc 2.3.1 vi cc th tc sau:
Hm Init() : c d liu theo khun dng v khi u mng chuaxet[u] = True
(1in).

PT

IT

Hm BFS (u), DFS(u) : Hai thut ton duyt theo chiu rng v duyt theo
chiu su c s dng xc nh cc thnh phn lin thng.
#include <stdio.h>
#include <conio.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int A[MAX][MAX], n,chuaxet[MAX], solt=0;
void Init(void){
int i,j;FILE *fp;
fp=fopen("dothi.in","r");
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d",n);
for(i=1; i<=n; i++){
printf("\n");chuaxet[i]=TRUE;
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
}
void BFS(int u){
int queue[MAX],low=1,high=1, s,t;
queue[low]=u;chuaxet[u]=FALSE;
while(low<=high){
s = queue[low];low=low+1;
printf("%3d", s);
for(t=1; t<=n; t++){
if(A[s][t] && chuaxet[t]){
high = high+1;
queue[high]=t;
chuaxet[t]=FALSE;
}
}
}
}

43

IT

void DFS(int u){


int v;printf("%3d",u);
chuaxet[u]=FALSE;
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v])
DFS(v);
}
}
void main(void){
int u ; clrscr();Init();
for(u=1;u<=n; u++){
if(chuaxet[u]){ solt++;
printf("\n TP.Lien thong %d:", solt);
BFS(u);//DFS(u);
}
}
}
3.3.2. Tm ng i gia cc nh trn th
a) t bi ton

PT

Cho th G =<V, E> (v hng hoc c hng), trong V l tp nh, E l tp


cnh. Bi ton t ra l hy tm ng i t nh sV n nh tV?
b) M t thut ton

Cho th G =<V, E>, s, t l hai nh thuc V. Khi , d dng nhn thy, nu


tDFS(s) hoc tBFS(s) th ta c th kt lun c ng i t s n t trn th. Nu
tDFS(s) hoc tBFS(s) th ta c th kt lun khng c ng i t s n t trn th.
Vn cn li l ta ghi nhn th no ng i t s n t?
ghi nhn ng i t s n t da vo hai thut ton DFS(s) hoc BFS(s) ta s
dng mt mng truoc[] gm n phn t (n=|V|). Khi to ban u truoc[u]=0 vi mi u =
1, 2, .., n. Trong qu trnh thc hin hai thut ton DFS (s) v BFS(s), mi khi ta a nh
vKe(s) vo ngn xp (trong trng hp ta s dng thut ton DFS) hoc hng
i(trong trng hp ta s dng thut ton DFS) ta ghi nhn truoc[v] = s. iu ny c
ngha, i c n v ta phi qua nh s. Khi hai thut ton DFS v BFS duyt n nh
t th truoc[t] s nhn gi tr l mt nh no thuc V hay tDFS(s) hoc tBFS(s).
Trong trng hp hai th tc DFS v BFS khng duyt c n nh t, khi truoc[t]
=0 v ta kt lun khng c ng i t s n t. Hnh 3.5 di y m t thut ton tm
ng i t nh s n nh t trn th bng thut ton DFS. Hnh 3.6 di y m t
thut ton tm ng i t nh s n nh t trn th bng thut ton BFS. Hnh 3.7
di y m t thut ton ghi nhn ng i t nh s n nh t trn th.

44

PT

IT

Thut ton DFS(s):


Begin
Bc 1 (Khi to):
stack = ; //Khi to stack l
Push(stack, s); //a nh s vo ngn xp
chuaxet[s] = False; //Xc nhn nh u duyt
Bc 2 (Lp) :
while ( stack ) do
u = Pop(stack); //Loi nh u ngn xp
for each v Ke(u) do //Ly mi nh uKe(v)
if ( chuaxet[v] ) then //Nu v ng l cha duyt
chuaxet[v] = False; // Xc nhn nh v duyt
Push(stack, u);//a u vo stack
Push(stack, v); //a v vo stack
truoc[v] = u; //Ghi nhn truoc[v] l u
break;
//Ch ly mt nh t
EndIf;
EndFor;
EndWhile;
Bc 3 (Tr li kt qu):
Return(<Tp nh duyt>);
End.
Hnh 3.5. Thut ton DFS tm ng i t s n t.

Thut ton BFS(s):


Bc 1(Khi to):
Queue = ; Push(Queue,s); chuaxet[s] = False;
Bc 2 (Lp):
while (Queue ) do
u = Pop(Queue);
for each vKe(u) do
if ( chuaxet[v] ) then
Push(Queue, v);chuaxet[v]=False;truoc[v]=u;
EndIf ;
EndFor ;
EndWhile ;
Bc 3 (Tr li kt qu) :
Return(<Tp nh c duyt>) ;
End.
Hnh 3.6. Thut ton BFS tm ng i t s n t.

45

Thut ton Ghi-Nhan-Duong-Di (s, t) {


if ( truoc[t] == 0 ) {
<Khng c ng i t s n t>;
}
else {
<a ra nh t>; //a ra trc nh t
u = truoc[t]; //u l nh trc khi n c t
while (u s ) { //Lp nu u cha phi l s
<a ra nh u>; //a ra nh u
u = truoc[u]; // Ln ngc li nh truoc[u].
}
<a ra nt nh s>;
}
}

c) Kim nghim thut ton

IT

Hnh 3.7. Th tc ghi nhn ng i t s n t

PT

Gi s ta cn xc nh ng i t nh 1 n nh 13 trn th c biu din


di dng ma trn k. Khi , th t cc bc thc hin theo thut ton DFS c th
hin trong Bng 3.3, th t cc bc thc hin theo thut ton BFS c th hin trong
Bng 3.4.
Bng 3.3. Kim nghim thut ton DFS(1).

STT

Trng thi stack

1, 2

1, 2, 3

truoc[3] = 2

1, 2, 3, 4

truoc[4] =3

1, 2, 3, 4, 7

truoc[7] =4

1, 2, 3, 4, 7, 5

truoc[5] =7

1, 2, 3, 4, 7, 5, 6

truoc[6] =5

1, 2, 3, 4, 7, 5, 6, 12

truoc[12] =6

1, 2, 3, 4, 7, 5, 6, 12, 8

truoc[8] =12

10

1, 2, 3, 4, 7, 5, 6, 12, 10

truoc[10] =12

11

1, 2, 3, 4, 7, 5, 6, 12, 10, 9

truoc[9] =10

truoc[2] =1

46

Truoc[s]=?

12

1, 2, 3, 4, 7, 5, 6, 12, 10, 9, 11

truoc[11] =9

13

1, 2, 3, 4, 7, 5, 6, 12, 10, 9, 11, 13

truoc[13] =11

14

Kt qu ng i t nh 1 n nh 13: 13->11-9-10-12-6-5-7-4-3-2-1.

IT

PT

STT
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Bng 3.4. Kim nghim thut ton BFS(1).


Trng thi Queue
Truoc[s]=?
1
truoc[1]=0
2, 3, 4
truoc[2]=1; truoc[3]=1; truoc[4]=1;
3, 4, 6
truoc[6]= 2
4, 6, 5
truoc[5]=3
6, 5, 7
truoc[7]= 4
5, 7, 12
truoc[12]=6
7, 12, 8
truoc[8]=12
12, 8
8, 10
truoc[10]=12;
10
9, 11, 13
truoc[9]=10; truoc[11]=10; truoc[13]=10;
11, 13
13

Kt qu ng i: 13-10-12-6-2-1.
Ch .

ng i t nh s n nh t theo thut ton BFS i qua t nht cc cnh ca


th (c di nh nht).
d) Ci t thut ton

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int A[MAX][MAX], n,chuaxet[MAX], truoc[MAX], s, t;
void Init(void){//c d liu v khi u cc bin
int i,j;FILE *fp;
fp=fopen("dothi.in","r");
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d",n);
for(i=1; i<=n; i++){
47

printf("\n");chuaxet[i]=TRUE;truoc[i]=0;
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
printf("%3d",A[i][j]);
}

PT

IT

}
}
void DFS(int u){//Thut ton DFS
int v;
printf("%3d",u);chuaxet[u]=FALSE;
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v]){
truoc[v]=u;DFS(v);
}
}
}
void BFS(int i){//Thut ton BFS
int queue[MAX], low=1, high=1, u, v;
queue[low]=i;chuaxet[i]=FALSE;
while(low<=high){
u = queue[low];low=low+1;
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v]){
high = high+1;queue[high]=v;
truoc[v]=u; chuaxet[v]=FALSE;
}
}
}
}
void Duongdi (void){
if (truoc[t]==0){
printf("\n Khong ton tai duong di");
getch(); return;
}
printf("\n Duong di:");
int j = t;printf("%3d<=",j);
while(truoc[j]!=s){
printf("%3d<=",truoc[j]);j=truoc[j];
}
printf("%3d",s); getch();
}

48

void main (void){


Init();
printf("\n Dinh dau:");scanf("%d",&s);
printf("\n Dinh cuoi:");scanf("%d",&t);
DFS(s); //BFS(s);
Duongdi ();
}

3.3.3. Tnh lin thng mnh trn th c hng


a) t bi ton
th c hng G=<V,E> lin thng mnh nu gia hai nh bt k ca n u
tn ti ng i. Cho trc th c hng G = <V,E>. Nhim v ca ta l kim tra xem
G c lin thng mnh hay khng?

IT

b) M t thut ton

PT

i vi th v hng, nu hai th tc DFS(u) = V hoc BFS(u) = V th ta kt


lun th v hng lin thng. i vi th c hng, nu DFS(u)=V hoc BFS(u)=V
th ta mi ch c kt lun c ng i t u n tt c cc nh cn li ca th. Nhim
v ca ta l phi kim tra DFS(u)=V hoc BFS(u)=V vi mi uV. Hnh 3.8 di y
m t chi tit thut ton kim tra tnh lin thng mnh ca th.
Boolean
Strong-Connective ( G =<V, E>) {
ReInit(); //uV: chuaxet[u] = True;
for each uV do {//Ly mi nh thuc V
if (DFS(u)V ) then //Nu DFS(u) V hoc BFS(u) V
return(False); // th khng lin thng mnh
endif;
ReInit();//Khi to li cc mng chuaxet[]
endfor;
return(True);// th lin thng mnh
}
Hnh 3.8. Thut ton kim tra tnh lin thng mnh.
c) Kim nghim thut ton
Gi s ta cn xc nh th c hng G =<V,E> c biu din di dng ma
trn k di y c lin thng mnh hay khng? Khi cc bc thc hin theo thut
ton Hnh 3.8 c thc hin theo Bng 3.5 di y.
49

0
0
0
1
0
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0
0
1
1
0
0

0
1
0
0
0
0
0
0
0
1
0
0
0

0
0
0
0
0
0
0
1
0
0
0
1
0

0
0
0
0
0
0
0
0
1
0
0
0
0

1
0
0
1
0
0
0
0
0
0
0
0
0

0
0
0
0
1
0
0
0
1
0
0
0
0

0
1
0
0
0
0
0
0
0
0
1
0
0

0
0
1
0
0
0
0
0
0
0
0
0
1

0
0
0
0
0
1
0
0
0
0
0
1
0

0
0
0
0
0
0
1
0
0
0
0
0
1

0
0
0
0
0
1
0
1
0
0
0
0
0

0
0
1
0
0
0
1
0
0
0
0
0
0

Bng 3.5. Kim nghim thut ton kim tra tnh lin thng mnh.
DFS(u)=?//BFS(u)=?

IT

nh uV

DFS(u) =V?

DFS(1) = 1, 6, 10, 2, 3, 9, 5, 7, 11, 8, 4, 12, 13

Yes

2V

DFS(2) = 2, 3, 9, 5, 7, 11, 8, 4, 1, 6, 10, 12, 13

Yes

3V

DFS(3) = 3, 9, 5, 7, 11, 2, 8, 4, 1, 6, 10, 12, 13

Yes

4V

DFS(4) = 4, 1, 6, 10, 2, 3, 9, 5, 7, 11, 8, 12, 13

Yes

PT

1V

5V

DFS(5) = 5, 7, 11, 2, 3, 9, 13, 8, 4, 1, 6, 10, 12

Yes

6V

DFS(6) = 6, 10, 2, 3, 9, 5, 7, 11, 8, 4, 1, 12, 13

Yes

7V

DFS(7) = 7, 11, 2, 3, 9, 5, 13, 8, 4, 1, 6, 10, 12

Yes

8V

DFS(8) = 8, 4, 1, 6, 10, 2, 3, 9, 5, 7, 11, 13, 12

Yes

9V

DFS(8) = 9, 5, 7, 11, 2, 3, 13, 8, 4, 1, 6, 10, 12

Yes

10V

DFS(10) = 10, 2, 3, 9, 5, 7, 11, 8, 4, 1, 6, 12, 13

Yes

11V

DFS(11) = 11, 2, 3, 9, 5, 7, 13, 8, 4, 1, 6, 10, 12

Yes

12V

DFS(12) = 12, 4, 1, 6, 10, 2, 3, 9, 5, 7, 11, 8, 13

Yes

13V

DFS(13) = 13, 9, 5, 7, 11, 2, 3, 8, 4, 1, 6, 10, 12

Yes

Ct ngoi cng ca Bng c DFS(u) = V vi mi uV nn ta kt lun G lin


thng mnh. Nu ti mt hng no c DFS(u) V th ta kt lun th khng lin
thng mnh v khng cn phi kim tra tip cc nh cn li.

50

d) Ci t thut ton
Thut ton c ci t theo khun dng th c qui c trong Mc 2.3.1 vi
cc th tc sau:
Th tc Read-Data()

: c ma trn k biu din th trong file dothi.in.

Th tc ReInit()

: Khi to li gi tr cho mng chuaxet[].

Th tc DFS(u)

: Thut ton DFS bt u ti nh u.

Th tc BFS(u)

: Thut ton BFS bt u ti nh u.

Hm Strong-Conective(): Kim tra tnh lin thng mnh ca th.

PT

IT

Chng trnh kim tra tnh lin thng mnh ca th c th hin nh di y.


#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int A[MAX][MAX], n,chuaxet[MAX], solt=0;
//Doc du lieu
void Read_Data(void){
int i,j;FILE *fp;
fp=fopen("dothi.IN","r");
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d",n);
for(i=1; i<=n; i++){
printf("\n");
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
}
//Thuat toan BFS
void BFS(int u){
int queue[MAX],low=1,high=1, s,t;
queue[low]=u;chuaxet[u]=FALSE;
while(low<=high){
s = queue[low];low=low+1;
//printf("%3d", s);
for(t=1; t<=n; t++){
if(A[s][t] && chuaxet[t]){
high = high+1;
51

queue[high]=t;
chuaxet[t]=FALSE;
}
}
}

PT

IT

}
//Thuat toan DFS
void DFS(int u){
int v;//printf("%3d",u);
chuaxet[u]=FALSE;
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v])
DFS(v);
}
}
//Khoi dau lai mang chuaxet[]
void ReInit(void) {
for (int i=1; i<=n; i++)
chuaxet[i]=TRUE;
}
//Kiem tra so lien thong >1?
int Test_So_Lien_Thong(void) {
for(int u=1; u<=n; u++)
if(chuaxet[u]) return(1);
return(0);
}
//Kiem tra tinh lien thong manh
int Strong_Conective (void) {
Read_Data(); ReInit();
for (int u=1; u<=n; u++){
chuaxet[u]=FALSE;
if(u==1) DFS(2);//BFS(2);
esle DFS(1); //BFS(1);
if(Test_So_Lien_Thong()) return(0);
ReInit();
}
return(1);
}
void main(void){
if(Test_LT_Manh())
printf("\n Do thi lien thong manh");
else
printf("\n Do thi khong lien thong manh");
}
52

3.3.4. Duyt cc nh tr
a) t bi ton
Cho th v hng lin thng G =<V, E>. nh uV c gi tr nu loi b
nh u cng vi cc cnh ni vi u lm tng thnh phn lin thng ca th. Bi ton
t ra l xy dng thut ton duyt cc nh tr ca th v hng G =<V, E> cho
trc?
b) M t thut ton
Khng hn ch tnh tng qut ca bi ton ta c th gi thit th cho ban u
l lin thng. Trong trng hp th khng lin thng, bi ton duyt tr thc cht gii
quyt cho mi thnh phn lin thng ca th.

IT

i vi th c biu din di dng ma trn k, vic loi b nh u cng vi


cc cnh ni vi u tng ng vi vic loi b hng u v ct u tng ng trong ma trn k.
thc hin vic ny trong cc th tc DFS() hoc BFS() ta ch cn thit lp gi tr
chuaxet[u] = False. Qu trnh duyt s c thc hin ti mt nh bt k vu. Nu
DFS(v) = V\{u} hoc BFS(v) = V\{u} th th mi nhn c cng ch c 1 thnh phn
lin thng v ta kt lun v khng l tr. Trng hp DFS(v) V\{u} hoc BFS(v)
V\{u} th v chnh l tr v s thnh phn lin thng ca th tng ln. Thut ton
duyt cc nh tr ca th c m t chi tit trong Hnh 3.9.

PT

Thut ton Duyet-Tru ( G =<V, E>) {


ReInit(); //uV: chuaxet[u] = True;
for each vV do {//Ly mi nh u tp nh V
chuaxet[v] = False; //Cm DFS hoc BFS duyt vo nh v
if (DFS(u) V\{v} ) then //Duyt DFS hoc BFS ti nh uv
<Ghi nhn v l tr>;
endif ;
ReInit();//Khi to li cc mng chuaxet[]
endfor;
}
Hnh 3.9. Thut ton duyt cc nh tr ca th.
c) Kim nghim thut ton
Gi s ta cn xc nh th v hng G =<V,E> c biu din di dng ma
trn k di y c nhng nh tr no? Khi cc bc thc hin theo thut ton Hnh
3.9 c thc hin theo Bng 3.6 di y.

53

0
1
1
1
0
0
0
0
0
0
0
0
0

1
0
1
1
0
0
0
0
0
0
0
0
0

1
1
0
1
1
0
0
0
0
0
0
0
0

1
1
1
0
0
0
0
0
0
0
0
0
0

0
0
1
0
0
1
1
1
1
0
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
0
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
1
0
0
0

0
0
0
0
0
0
0
0
1
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

Bng 3.6. Kim nghim thut ton duyt cc nh tr ca th.


DFS(u)=?//BFS(u)=? uv.

IT

nh vV

DFS(u) V\v?

DFS(2) = 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

2V

DFS(1) = 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

3V

DFS(1) = 1, 2, 4

Yes

4V

DFS(1) = 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

PT

1V

5V

DFS(1) = 1, 2, 3, 4

Yes

6V

DFS(1) = 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13

No

7V

DFS(1) = 1, 2, 3, 4, 5, 6, 9, 8, 10, 11, 12, 13

No

8V

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13

No

9V

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8

Yes

10V

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9

Yes

11V

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13

No

12V

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13

No

13V

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13

No

nh hng u c gi tr ct s 3 l Yes l nhng nh tr, cc nh c gi tr No


khng l nh tr.
d) Ci t thut ton
Thut ton c ci t theo khun dng th c qui c trong Mc 2.3.1 vi
cc th tc sau:

54

Th tc Read-Data()

: c ma trn k biu din th trong file dothi.in.

Th tc ReInit()

: Khi to li gi tr cho mng chuaxet[].

Th tc DFS(u)

: Thut ton DFS bt u ti nh u.

Th tc BFS(u)

: Thut ton BFS bt u ti nh u.

Vn bn chng trnh c th hin nh di y.

PT

IT

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int A[MAX][MAX], n,chuaxet[MAX], solt=0;
//Doc du lieu
void Read_Data(void){
int i,j;FILE *fp;
fp=fopen("dothi.IN","r");
fscanf(fp,"%d",&n);
for(i=1; i<=n; i++){
printf("\n");
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
}
}
}
//Thuat toan BFS
void BFS(int u){
int queue[MAX],low=1,high=1, s,t;
queue[low]=u;chuaxet[u]=FALSE;
while(low<=high){
s = queue[low];low=low+1;
//printf("%3d", s);
for(t=1; t<=n; t++){
if(A[s][t] && chuaxet[t]){
high = high+1;
queue[high]=t;
chuaxet[t]=FALSE;
}
}
}
}

55

PT

IT

//Thuat toan DFS


void DFS(int u){
int v;//printf("%3d",u);
chuaxet[u]=FALSE;
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v])
DFS(v);
}
}
//Khoi dau lai mang chuaxet[]
void ReInit(void) {
for (int i=1; i<=n; i++)
chuaxet[i]=TRUE;
}
//Kiem tra so lien thong >1?
int Test_So_Lien_Thong(void) {
for(int u=1; u<=n; u++)
if(chuaxet[u]) return(1);
return(0);
}
//Duyt cc nh tr
void main(void) {
Read_Data(); ReInit();
for (int u=1; u<=n; u++){
DFS(1);//BFS(1);
if(Test_So_Lien_Thong())
printf("\n Dinh %d la tru", u);
ReInit();
}
}
3.3.5. Duyt cc cnh cu
a) t bi ton
Cho th v hng G =<V,E>. Cnh eE c gi l cu nu loi b e lm tng
thnh phn lin thng ca th. Bi ton t ra l cho trc th v hng G = <V,E>,
hy lit k tt c cc cnh cu ca th.
b) M t thut ton
Khng hn ch tnh tng qut ca bi ton ta cng gi thit th G=<V,E>
cho l lin thng. Trong trng hp th khng lin thng, bi ton duyt cu thc hin
trn mi thnh phn lin thng ca th.

56

Trong trng hp th c biu din di dng ma trn k, ehi loi b cnh


e=(u,v)E ra khi th ta thc hin bng cch cho cc phn t A[u][v]=0 v A[v][u]=0
(A[][] l ma trn k biu din th G). i vi th c biu din di dng danh
sch k, danh sch k ca nh u ta bt i nh v v danh sch k ca nh v ta bt i nh
u ( Ke(u) = Ke(u)\{v}, Ke(v) = Ke(v)\{u}). Thut ton duyt cc cnh cu ca th
c t chi tit trong Hnh 3.10.

IT

Thut ton Duyet-Cau ( G =<V, E>) {


ReInit(); //uV: chuaxet[u] = True;
for each eE do {//Ly mi cnh thuc th
E = E\{e}; //Loi b cnh e ra khi th
if (DFS(1) V ) then //Nu tng thnh phn lin thng ca th
<Ghi nhn e l cu>;
endif ;
E = E{e} ; //Hon tr li cnh e
ReInit();//Khi to li cc mng chuaxet[]
endfor;
}

Hnh 3.10. Thut ton duyt cc cnh cu ca th.

PT

c) Kim nghim thut ton

Gi s ta cn xc nh th v hng G =<V,E> c biu din di dng ma


trn k di y c nhng cnh cu? Khi cc bc thc hin theo thut ton Hnh
3.10 c thc hin theo Bng 3.7 di y.
0
1
1
1
0
0
0
0
0
0
0
0
0

1
0
1
1
0
0
0
0
0
0
0
0
0

1
1
0
1
1
0
0
0
0
0
0
0
0

1
1
1
0
0
0
0
0
0
0
0
0
0

0
0
1
0
0
1
1
1
1
0
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
0
0
0
0

57

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
1
0
0
0

0
0
0
0
0
0
0
0
1
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

Bng 3.7. Kim nghim thut ton duyt cc cnh cu ca th.


DFS(u)=?//BFS(u)=?

Cnh eE

DFS(u) V?

DFS(1) = 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(1,3)E

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(1,4)E

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(2,3)E

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(2,4)E

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(3,4)E

DFS(1) = 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 4

No

(3,5)E

DFS(1) = 1, 2, 3, 4, 5

Yes

(5,6)E

DFS(1) = 1, 2, 3, 4, 5, 7, 6, 8, 9, 10, 11, 12, 13

No

(5,7)E

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(5,8)E

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(5,9)E

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(6,7)E

DFS(1) = 1, 2, 3, 4, 5, 6, 9, 8, 7, 10, 11, 12, 13

No

(6,9) E

DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(7,8) E

DFS(1) =1, 2, 3, 4, 5, 6, 7, 9, 8, 10, 11, 12, 13

No

(8,9) E

DFS(1) =1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(9,10) E

DFS(1) =1, 2, 3, 4, 5, 6, 7, 8, 9

Yes

(10,11) E DFS(1) =1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 11, 13

No

(10,12) E DFS(1) =1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(10,13) E DFS(1) =1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(11,12) E DFS(1) =1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 12

No

(11,13) E DFS(1) =1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

(12,13) E DFS(1) =1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

No

PT

IT

(1,2)E

Kt lun: cnh (35), (9,10) l cu


d) Ci t thut ton
Thut ton c ci t theo khun dng th c qui c trong Mc 2.3.1 vi
cc th tc sau:

58

Th tc Read-Data()

: c ma trn k biu din th trong file dothi.in.

Th tc ReInit()

: Khi to li gi tr cho mng chuaxet[].

Th tc DFS(u)

: Thut ton DFS bt u ti nh u.

Th tc BFS(u)

: Thut ton BFS bt u ti nh u.

PT

IT

Chng trnh kim tra tnh lin thng mnh ca th c th hin nh di y.


#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int A[MAX][MAX], n,chuaxet[MAX], solt=0;
//Doc du lieu
void Read_Data(void){
int i,j;FILE *fp;
fp=fopen("dothi.IN","r");
fscanf(fp,"%d",&n);
for(i=1; i<=n; i++){
printf("\n");
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
}
}
}
//Thuat toan BFS
void BFS(int u){
int queue[MAX],low=1,high=1, s,t;
queue[low]=u;chuaxet[u]=FALSE;
while(low<=high){
s = queue[low];low=low+1;
//printf("%3d", s);
for(t=1; t<=n; t++){
if(A[s][t] && chuaxet[t]){
high = high+1;
queue[high]=t;
chuaxet[t]=FALSE;
}
}
}
}

59

PT

IT

//Thuat toan DFS


void DFS(int u){
int v;//printf("%3d",u);
chuaxet[u]=FALSE;
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v])
DFS(v);
}
}
//Khoi dau lai mang chuaxet[]
void ReInit(void) {
for (int i=1; i<=n; i++)
chuaxet[i]=TRUE;
}
//Kiem tra so lien thong >1?
int Test_So_Lien_Thong(void) {
for(int u=1; u<=n; u++)
if(chuaxet[u]) return(1);
return(0);
}
//Duyt cnh cu
void main(void) {
Read_Data(); ReInit();
for (int u=1; u<n; u++){
for(int v=u+1;v<=n; v++){
if(A[u][v]) { //Neu (u,v) la mot canh
A[u][v]=0; A[v][u]=0;//Loai canh
DFS(1);//BFS(1);
if(Test_So_Lien_Thong())
printf("\n Canh %d%5d ",u, v);
A[u][v]=1; A[v][u]=1;
ReInit();//Khoi tao lai mang chuaxet
}
}
}
}

60

3.4. Mt s bi ton quan trng khc


2.4.1. Duyt cc thnh phn lin thng mnh ca th
i vi th c hng ngi ta quan tm n vic duyt cc thnh phn lin
thng mnh ca th. Mi thnh phn lin thng mnh ca th l mt th con ca
G m gia hai nh bt k ca th con u c ng i. Bi ton t ra l hy lit k
tt c cc thnh phn lin thng mnh ca th c hng G=<V,E>. V d vi th
trong Hnh 3.11 di y s cho ta bn thnh phn lin thng mnh.
Thnh phn lin thng mnh 1: 7, 5, 6.
Thnh phn lin thng mnh 2: 4, 3, 2.
Thnh phn lin thng mnh 3: 11, 10, 9, 8.

PT

IT

Thnh phn lin thng mnh 4: 1.

Hnh 3.11. th c hng G =<V,E>

2.4.2. Bi ton nh chiu th


Mt trong nhng ng dng quan trng ca th l biu din th cho cc h
thng giao thng. i vi h thng giao thng ngi ta quan tm n liu h thng c th
nh chiu c hay khng.
nh ngha. Php nh chiu th v hng lin thng l php bin i th v
hng lin thng thnh th c hng lin thng mnh. th v hng G =<V,E> c
th dch chuyn c thnh th c hng lin thng mnh bng cch nh chiu mi
cnh v hng thnh mt cung c hng c gi l th nh chiu c.
V d th v hng trong Hnh 3.12 di y c gi l nh chiu c.

61

Hnh 3.12. Php nh chiu th v hng lin thng.


nh l. th v hng lin thng G =<V, E> nh chiu c khi v ch khi tt
c cc cnh eE ca G u khng phi l cu.
Bn c t tm hiu cch chng minh nh l trong cc ti liu [1, 2].

3.5. Mt s im cn ghi nh

IT

Bi ton. Cho th v hng lin thng G = <V,E>. Hy nh chiu th G sao


cho ta c th nhn c th c hng vi t nht thnh phn lin thng mnh.

Thut ton duyt theo chiu su bt u ti nh uV.

PT

Thut ton duyt theo rng su bt u ti nh uV.

Duyt tt c cc nh ca th da vo DFS(u), BFS(u).


Duyt tt c cc thnh phn lin thng ca th da vo DFS(u), BFS(u).
Tm ng i t n s n t trn th da vo DFS(u), BFS(u).
Kim tra tnh lin thng mnh ca th da vo DFS(u), BFS(u).
Duyt cc nh tr ca th DFS(u), BFS(u).
Duyt cc cnh cu ca th DFS(u), BFS(u).
Mt s ng dng quan trng khc ca DFS v BFS.

62

BI TP

1. Cho th v hng c biu din di


dng ma trn k nh Hnh bn phi. Hy
thc hin:
a) Trnh by thut ton BFS(u)?
b) Kim nghim thut ton BFS(u) bt
u ti nh u=1? Ch r kt qu trung
gian theo mi bc thc hin ca thut
ton.
c) Kim nghim thut ton BFS(u) bt
u ti nh u=7? Ch r kt qu trung
gian theo mi bc thc hin ca thut
ton.

1
0
1
1
0
0
0
0
0
0
0
0
0

1
1
0
1
0
0
0
0
0
0
0
0
0

1
1
1
0
0
0
0
0
0
0
0
0
0

1
0
0
0
0
1
1
1
1
0
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
1
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
0
0
0
0

0
0
0
0
0
0
1
0
0
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
1
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
0
0
0
0

0
0
0
0
0
0
1
0
0
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

0
1
0
1
0
0
0
1
0
1
0
0
0

1
0
1
0
1
0
0
0
1
0
0
0
0

0
0
0
1
0
1
0
0
0
1
0
1
0

0
0
0
0
1
0
1
0
0
0
1
0
1

0
0
0
1
0
1
0
1
0
0
0
1
0

0
0
1
0
1
0
0
0
1
0
0
0
1

IT

0
1
1
1
1
0
0
0
0
0
0
0
0

2. Cho th v hng c biu din di


dng ma trn k nh Hnh bn phi. Hy
thc hin:
a) Trnh by thut ton DFS(u)?
b) Kim nghim thut ton DFS(u) bt
u ti nh u=1? Ch r kt qu trung
gian theo mi bc thc hin ca thut
ton.
c) Kim nghim thut ton DFS(u) bt
u ti nh u=7? Ch r kt qu trung
gian theo mi bc thc hin ca thut
ton.

1
0
1
1
0
0
0
0
0
0
0
0
0

PT

0
1
1
1
1
0
0
0
0
0
0
0
0

3. Cho th v hng c biu din di


dng ma trn k nh Hnh bn phi. Hy
thc hin:
a) Trnh by thut ton duyt cc thnh
phn lin thng ca th?
b) Kim nghim thut ton trn th
cho? Ch r kt qu trung gian theo
mi bc thc hin ca thut ton.

0
0
1
0
1
0
1
0
0
0
0
0
0

63

0
0
0
1
0
1
0
0
0
0
0
0
0

1
1
0
1
0
0
0
0
0
0
0
0
0

1
0
0
0
1
0
1
0
0
0
1
0
0

1
1
1
0
0
0
0
0
0
0
0
0
0

0
1
0
0
0
1
0
1
0
1
0
0
0

1
0
0
0
0
1
1
1
1
0
0
0
0

1
0
1
0
0
0
1
0
1
0
1
0
1

0
0
0
0
0
0
0
1
0
1
0
0
0

0
0
0
0
1
0
0
0
1
0
1
0
0

0
1
1
1
1
0
0
0
0
0
0
0
0

1
0
1
1
0
0
0
0
0
0
0
0
0

1
1
0
1
0
0
0
0
0
0
0
0
0

1
1
1
0
0
0
0
0
0
0
0
0
0

1
0
0
0
0
1
1
1
1
0
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
1
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
0
0
0
0

0
0
0
0
0
0
1
0
0
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

5. Cho th v hng c biu din di


dng ma trn k nh Hnh bn phi. Hy
thc hin:
a) Da vo thut ton DFS, xy dng
thut ton tm ng i t nh s n
nh t trn th?
b) Tm ng i t nh s=1 n nh t
=13 trn th cho? Ch r kt qu
trung gian theo mi bc thc hin ca
thut ton.
c) Vit chng trnh tm ng i t s
n t da vo biu din th di dng
ma trn k.

0
1
1
1
1
0
0
0
0
0
0
0
0

1
0
1
1
0
0
0
0
0
0
0
0
0

1
1
0
1
0
0
0
0
0
0
0
0
0

1
1
1
0
0
0
0
0
0
0
0
0
0

1
0
0
0
0
1
1
1
1
0
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
1
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
0
0
0
0

0
0
0
0
0
0
1
0
0
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

6. Cho th c hng c biu din di


dng ma trn k nh Hnh bn phi. Hy
thc hin:
a) Da vo thut ton DFS, xy dng
thut ton kim tra tnh lin thng mnh
ca th?
b) Kim nghim thut ton trn th
cho? Ch r kt qu trung gian theo
mi bc thc hin ca thut ton.
c) Vit chng trnh kim tra tnh lin
thng mnh ca th da vo biu
din ma trn k.

0
0
0
1
0
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0
0
1
1
0
0

0
1
0
0
0
0
0
0
0
1
0
0
0

0
0
0
0
0
0
0
1
0
0
0
1
0

0
0
0
0
0
0
0
0
1
0
0
0
0

1
0
0
1
0
0
0
0
0
0
0
0
0

0
0
0
0
1
0
0
0
1
0
0
0
0

0
1
0
0
0
0
0
0
0
0
1
0
0

0
0
1
0
0
0
0
0
0
0
0
0
1

0
0
0
0
0
1
0
0
0
0
0
1
0

0
0
0
0
0
0
1
0
0
0
0
0
1

0
0
0
0
0
1
0
1
0
0
0
0
0

0
0
1
0
0
0
1
0
0
0
0
0
0

PT

IT

4. Cho th v hng c biu din di


dng ma trn k nh Hnh bn phi. Hy
thc hin:
a) Da vo thut ton BFS, xy dng
thut ton tm ng i t nh s n
nh t trn th?
b) Tm ng i t nh s=1 n nh t
=13 trn th cho? Ch r kt qu
trung gian theo mi bc thc hin ca
thut ton.
c) Vit chng trnh tm ng i t s
n t da vo biu din th di dng
ma trn k.

64

0
0
0
1
0
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0
0
1
1
0
0

0
1
0
0
0
0
0
0
0
1
0
0
0

0
0
0
0
0
0
0
1
0
0
0
1
0

0
0
0
0
0
0
0
0
1
0
0
0
0

1
0
0
1
0
0
0
0
0
0
0
0
0

0
0
0
0
1
0
0
0
1
0
0
0
0

0
1
0
0
0
0
0
0
0
0
1
0
0

0
0
1
0
0
0
0
0
0
0
0
0
1

0
0
0
0
0
1
0
0
0
0
0
1
0

0
0
0
0
0
0
1
0
0
0
0
0
1

0
0
0
0
0
1
0
1
0
0
0
0
0

0
0
1
0
0
0
1
0
0
0
0
0
0

8. Cho th v hng c biu din di


dng ma trn k nh Hnh bn phi. Hy
thc hin:
a) Da vo thut ton BFS, xy dng
thut ton duyt cc nh tr ca th?
b) Kim nghim thut ton trn th
cho? Ch r kt qu trung gian theo
mi bc thc hin ca thut ton.
c) Vit chng trnh kim tra tnh lin
thng mnh ca th da vo biu
din ma trn k.

0
1
0
0
0
0
1
1
1
1
0
0
0

1
0
1
0
0
0
1
0
1
0
0
0
0

0
1
0
1
1
1
0
0
0
0
0
0
0

0
0
1
0
1
1
0
0
0
0
0
0
0

0
0
1
1
0
1
0
0
0
0
0
0
0

0
0
1
1
1
0
0
0
0
0
0
0
0

1
1
0
0
0
0
0
1
0
0
0
0
0

1
0
0
0
0
0
1
0
1
0
0
0
0

1
1
0
0
0
0
0
1
0
0
0
0
0

1
0
0
0
0
0
0
0
0
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

9. Cho th v hng c biu din di


dng ma trn k nh Hnh bn phi. Hy
thc hin:
a) Da vo thut ton DFS, xy dng
thut ton duyt cc nh tr ca th?
b) Kim nghim thut ton trn th
cho? Ch r kt qu trung gian theo
mi bc thc hin ca thut ton.
c) Vit chng trnh kim tra tnh lin
thng mnh ca th da vo biu
din ma trn k.

0
1
0
0
0
0
1
1
1
1
0
0
0

1
0
1
0
0
0
1
0
1
0
0
0
0

0
1
0
1
1
1
0
0
0
0
0
0
0

0
0
1
0
1
1
0
0
0
0
0
0
0

0
0
1
1
0
1
0
0
0
0
0
0
0

0
0
1
1
1
0
0
0
0
0
0
0
0

1
1
0
0
0
0
0
1
0
0
0
0
0

1
0
0
0
0
0
1
0
1
0
0
0
0

1
1
0
0
0
0
0
1
0
0
0
0
0

1
0
0
0
0
0
0
0
0
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

PT

IT

7. Cho th c hng c biu din di


dng ma trn k nh Hnh bn phi. Hy
thc hin:
a) Da vo thut ton BFS, xy dng
thut ton kim tra tnh lin thng mnh
ca th?
b) Kim nghim thut ton trn th
cho? Ch r kt qu trung gian theo
mi bc thc hin ca thut ton.
c) Vit chng trnh kim tra tnh lin
thng mnh ca th da vo biu
din ma trn k.

65

10. Cho th v hng c biu din


di dng ma trn k nh Hnh bn phi.
Hy thc hin:
a) Da vo thut ton BFS, xy dng
thut ton duyt cc cnh cu ca
th?
b) Kim nghim thut ton trn th
cho? Ch r kt qu trung gian theo
mi bc thc hin ca thut ton.
c) Vit chng trnh kim tra tnh lin
thng mnh ca th da vo biu
din ma trn k.

0
1
0
0
0
0
1
1
1
1
0
0
0

1
0
1
0
0
0
1
0
1
0
0
0
0

0
1
0
1
1
1
0
0
0
0
0
0
0

0
0
1
0
1
1
0
0
0
0
0
0
0

0
0
1
1
0
1
0
0
0
0
0
0
0

0
0
1
1
1
0
0
0
0
0
0
0
0

1
1
0
0
0
0
0
1
0
0
0
0
0

1
0
0
0
0
0
1
0
1
0
0
0
0

1
1
0
0
0
0
0
1
0
0
0
0
0

1
0
0
0
0
0
0
0
0
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

b) Tm BFS(5) =?

PT

a) Tm BFS(1) =?

IT

11. Cho th v hng lin thng G =<V, E> nh di y:


Ke(1) = { 2, 3, 4}.
Ke(5) = {3, 6, 7, 8, 12}. Ke(9) = {10, 11, 13}.
Ke(2) = {1, 3, 4, 6}.
Ke(6) = {2, 5, 7, 12}.
Ke(10) = {9, 11, 12, 13}.
Ke(3) = {1, 2, 4, 5}.
Ke(7) = {4, 5, 6, 8}.
Ke(11) = {9, 10, 13}.
Ke(4) = {1, 2, 3, 7}.
Ke(8) = {5, 7, 12}.
Ke(12) = {5, 6, 8, 10}.
Ke(13) = {9, 10, 11}.
Hy thc hin:
c) Tm DFS(1) =?

d) Tm DFS(5) =?

d) Tm ng i t 1 n 13 bng thut ton BFS?


e) Tm ng i t 1 n 13 bng thut ton DFS?

12. Cho th v hng lin thng G =<V, E>. Ta gi nh sV l nh tht ca cp


nh u, vV nu mi ng i t u n v u phi qua s. Da vo thut ton duyt theo
chiu su (hoc chiu rng), hy thc hin:
a) Xy dng thut ton tm tt c cc nh tht sV ca cp nh u, vV?
b) Tm tp nh tht sV ca cp nh u=1, v=12 trn th cho, ch r kt qu
theo mi bc thc hin ca thut ton?
c) Tm tp nh tht sV ca cp nh u =1, v =13 trn th c biu din di
dng danh sch k di y, ch r kt qu theo mi bc thc hin ca thut ton?
Ke(1) = { 2, 3, 4}.
Ke(5) = {3, 6, 7, 8, 12}. Ke(9) = {10, 11, 13}.
Ke(2) = {1, 3, 4, 6}.
Ke(6) = {2, 5, 7, 12}.
Ke(10) = {9, 11, 12, 13}.
Ke(3) = {1, 2, 4, 5}.
Ke(7) = {4, 5, 6, 8}.
Ke(11) = {9, 10, 13}.
Ke(4) = {1, 2, 3, 7}.
Ke(8) = {5, 7, 12}.
Ke(12) = {5, 6, 8, 10}.
Ke(13) = {9, 10, 11}.
66

CHNG 4. TH EULER, TH HAMIL TON

4.1. th Euler, th na Euler


nh ngha. Chu trnh n trong th G i qua mi cnh ca th ng mt ln
c gi l chu trnh Euler. ng i n trong G i qua mi cnh ca n ng mt ln
c gi l ng i Euler. th c gi l th Euler nu n c chu trnh Euler.
th c ng i Euler c gi l na Euler.
R rng, mi th Euler u l na Euler nhng iu ngc li khng ng.
V d 1. Xt cc th G1, G2, G3 trong Hnh 4.1.
a

e
c

IT

G1

G2

G3

Hnh 6.1. th v hng G1, G2, G3.

PT

th G1 l th Euler v n c chu trnh Euler a, e, c, d, e, b, a. th G3


khng c chu trnh Euler nhng cha ng i Euler a, c, d, e, b, d, a, b v th G3 l na
Euler. G2 khng c chu trnh Euler cng nh ng i Euler.
V d 2. Xt cc th c hng H1, H2, H3 trong Hnh 4.2.
a

c
H1

H2

H3

Hnh 4.2. th c hng H1, H2, H3.


th H2 l th Euler v n cha chu trnh Euler a, b, c, d, e, a v vy n l th
Euler. th H3 khng c chu trnh Euler nhng c ng i Euler a, b, c, a, d, c nn n
l th na Euler. th H1 khng cha chu trnh Euler cng nh chu trnh Euler.
4.2. Thut ton tm chu trnh Euler
tm mt chu trnh Euler ca th ta s dng kt qu ca nh l sau.
nh l 1. iu kin cn v th G=<V,E> l Euler. th v hng lin
thng G=<V, E> l th Euler khi v ch khi mi nh ca G u c bc chn. th c
67

hng lin thng yu G=<V, E> l th Euler khi v ch khi tt c cc nh ca n u


c bn nh bc ra bng bn nh bc vo (iu ny lm cho th l lin thng mnh).
4.2.1. Chng minh th l Euler
i vi th v hng, chng minh thi c l Euler hay khng ta ch cn
thc hin:
Kim tra th c lin thng hay khng? iu ny d dng thc hin bng
cch kim tra DFS(u) = V hoc BFS(u) = V th ta kt lun th l lin thng
(u l nh bt k ca th).
S dng tnh cht ca ma trn k biu th v hng tnh ton bc ca cc
nh.
0
1
0
0
0
1
0
0
0
0
0
0
0

1
0
1
0
1
1
0
0
0
0
0
0
0

0
1
0
1
1
0
0
0
0
0
1
0
0

0
0
1
0
0
0
1
1
0
0
1
0
0

0
1
1
0
0
1
1
0
0
0
0
0
0

1
1
0
0
1
0
1
0
0
0
0
0
0

PT

IT

- V BFS(1) = { 1, 2, 6, 3, 5, 7, 4, 11, 8,
10, 12, 9, 13} = V. Do vy, G lin
thng.
- Ta li c :
deg(1) = deg(13) = 2.
deg (2) = deg(3) = 4
deg(4) = deg(5) = 4
deg(6) = deg(7) = 4
deg(8) = deg(9) = 4
deg(10) = deg(11) = deg(12) = 4
Ch : Tng cc phn t ca hng u (ct
u) l bc ca nh u. V d tng cc
phn t ca hng 1 l 2 nn deg(1) = 2.

0
0
0
1
1
1
0
1
0
0
0
0
0

0
0
0
1
0
0
1
0
1
1
0
0
0

0
0
0
0
0
0
0
1
0
1
0
1
1

0
0
0
0
0
0
0
1
1
0
1
1
0

0
0
1
1
0
0
0
0
0
1
0
1
0

0
0
0
0
0
0
0
0
1
1
1
0
1

0
0
0
0
0
0
0
0
1
0
0
1
0

i vi th c hng, chng minh thi c l Euler hay khng ta ch cn


thc hin:
Kim tra th c lin thng yu hay khng? iu ny d dng thc hin bng
cch kim tra nu tn ti nh u V DFS(u) = V hoc BFS(u) = V th ta kt
lun th l lin thng yu.
S dng tnh cht ca ma trn k biu th c hng tnh bn nh bc ra
v bn nh bc vo ca cc nh. Bn nh bc ra ca nh u l deg+(u) l s
cc s 1 ca hng u. Bn nh bc vo ca nh u l deg-(u) l s cc s 1 ca
ct u.
V d chng minh th c hng c biu din di dng ma trn k nh
di y ta thc hin nh sau:

68

+ V BFS(1) = { 1, 2, 3, 5, 4, 11, 6, 7, 10, 12,


8, 9, 13} = V. Do vy, G lin thng yu.
+ Ta li c:
deg+(2)= deg-(2)=deg+(3)= eg-(3) =2
deg+(4)=deg-(4)=deg+(5)=deg-(5) =2
deg+(6)=deg-(6)=deg+(7)=deg-(7) =2
deg+(8)=deg-(8)=deg+(9)=deg-(9) =2
deg+(10) = deg-(10) = 2
deg+(11) = deg-(11) =2
deg+(12) = deg-(12) =2
deg+(1)=deg-(1)=deg-(13)=deg+(13) =1

0
0
0
0
0
1
0
0
0
0
0
0
0

1
0
0
0
0
1
0
0
0
0
0
0
0

0
1
0
0
1
0
0
0
0
0
0
0
0

0
0
1
0
0
0
0
1
0
0
0
0
0

0
1
0
0
0
0
1
0
0
0
0
0
0

0
0
0
0
1
0
1
0
0
0
0
0
0

0
0
0
1
0
0
0
1
0
0
0
0
0

0
0
0
0
0
0
0
0
1
1
0
0
0

0
0
0
0
0
0
0
0
0
0
0
1
1

0
0
0
0
0
0
0
0
1
0
1
0
0

0
0
1
1
0
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0
0
1
1
0
0

0
0
0
0
0
0
0
0
0
0
0
1
0

G lin thng yu v c bn nh bc ra bng bn nh bc vo nn G l th


Euler.
4.2.2. Biu din thut ton tm chu trnh Euler

IT

tm mt chu trnh Euler trn th, ta thc hin theo thut ton trong Hnh 4.3
di y:

PT

Thut ton Euler-Cycle(u):


Bc 1 (Khi to) :
stack = ; //Khi to mt stack bt u l
CE = ;
//Khi to mng CE bt u l
Push (stack, u) ; //a nh u vo ngn xp
Bc 2 (Lp ):
while (stack ) do { //Lp cho n khi stack rng
s = get(stack); //Ly nh u ngn xp
if ( Ke(s) ) then { // Nu danh sch Ke(s) cha rng
t =< nh u tin trong Ke(s)>;
Push(stack, t) //a t vo stack;
E = E \ (s,t); // Loi b cnh (s,t);
}
else { //Trng hp Ke(s)=
s = Pop(stack);// a s ra khi ngn xp
s CE; //a s sang CE
}
}
Bc 3 (Tr li kt qu) :
<Lt ngc li cc nh trong CE ta c chu trnh Euler> ;
Hnh 4.3. Thut ton tm chu trnh Euler bt u ti nh u

69

4.2.3. Kim nghim thut ton


V d ta cn tm mt chu trnh Euler bt u ti nh u=1 trn th G = <V, E>
c biu din di dng ma trn k nh di y. Khi , cc bc thc hin ca thut
ton c thc hin nh Bng 4.1 (ch phn chng minh ta thc hin trn).
Trng thi Stack

Bc

IT

1, 2

1, 2, 3

1, 2, 3, 4

1, 2, 3, 4,7

1, 2, 3, 4,7,5

1, 2, 3, 4,7,5,2

1, 2, 3, 4,7,5,2,6

1, 2, 3, 4,7,5,2,6,1

1, 2, 3, 4,7,5,2,6
1
1, 2, 3, 4,7,5,2,6,5
1
1, 2, 3, 4,7,5,2,6,5,3
1
1, 2, 3, 4,7,5,2,6,5,3,11
1
1, 2, 3, 4,7,5,2,6,5,3,11,4
1
1, 2, 3, 4,7,5,2,6,5,3,11,4,8
1
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,7
1
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,7,6
1
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,7
1,6
1, 2, 3, 4,7,5,2,6,5,3,11,4,8
1,6,7
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9
1,6,7
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10
1,6,7
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,8
1,6,7
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10
1,6,7,8
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,11
1,6,7,8
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,11,12
1,6,7,8
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,11,12,9
1,6,7,8
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,11,12,9,13
1,6,7,8
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,11,12,9,13,12
1,6,7,8
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,11,12,9,13,12,10
1,6,7,8
a ln lt cc nh trong Stack sang CE cho n khi stack=
30 -..
CE = 1, 6, 7, 8, 10, 12, 13, 9, 12, 11, 10, 9, 8, 4, 11, 3, 5, 6, 2, 5, 7, 4, 3, 2, 1
Lt ngc li cc nh trong CE ta c chu trnh Euler
1- 2- 3- 4- 7-5-2-6-5-3-11-4-8-9-10-11-12-9-13-12-10-8-7-6-1

PT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

Gi tr CE

4.2.4. Ci t thut ton

70

Chng trnh tm mt chu trnh Euler ca th bt u to nh u trn th v


hng lin thng c ci t theo khun dng th biu din di dng ma trn k.
Cc th tc chnh bao gm:
Th tc Init() : c d liu theo khun dng biu din ma trn k.
Th tc Kiemtra(): Kim tra xem G c l Euler hay khng.

PT

IT

Th tc Euler-Cycle (u) : Xy dng chu trnh Euler bt u ti nh u.


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 50
#define
TRUE 1
#define FALSE
0
int A[MAX][MAX], n, u=1;
void Init(void){
int i, j;FILE *fp;
fp = fopen("CTEULER.IN", "r");
fscanf(fp,"%d", &n);
printf("\n So dinh do thi:%d",n);
printf("\n Ma tran ke:");
for(i=1; i<=n;i++){
printf("\n");
for(j=1; j<=n;j++){
fscanf(fp,"%d", &A[i][j]);
printf("%3d", A[i][j]);
}
}
fclose(fp);
}
int Kiemtra(void){
int i, j, s, d; d=0;
for(i=1; i<=n;i++){
s=0;
for(j=1; j<=n;j++)
s+=A[i][j];
if(s%2) d++;
}
if(d>0) return(FALSE);
return(TRUE);
}
void Euler-Cycle( int u){

71

IT

int v, x, top, dCE;


int stack[MAX], CE[MAX];
top=1; stack[top]=u;dCE=0;
do {
v = stack[top];x=1;
while (x<=n && A[v][x]==0)
x++;
if (x>n) {
dCE++; CE[dCE]=v; top--;
}
else {
top++; stack[top]=x;
A[v][x]=0; A[x][v]=0;
}
} while(top!=0);
printf("\n Co chu trinh Euler:");
for(x=dCE; x>0; x--)
printf("%3d", CE[x]);

PT

}
void main(void){
clrscr(); Init();
if(Kiemtra())
Tim();
else printf("\n Khong co chu trinh Euler");
}

4.3. Thut ton tm ng i Euler

Mt th khng c chu trnh Euler nhng vn c th c ng i Euler. tm


mt ng i Euler trn th v hng ta s dng kt qu ca nh l 2. tm mt
ng i Euler trn th c hng ta s dng kt qu ca nh l 3.
nh l 2. th v hng lin thng G =<V,E> l th na Euler khi v ch
khi G c 0 hoc 2 nh bc l. Trong trng hp G c hai nh bc l, ng i Euler
xut pht ti mt nh bc l v kt thc ti nh bc l cn li. Trong trng hp G c 0
nh bc l G chnh l th Euler.
nh l 3. th c hng lin thng yu G =<V,E> l th na Euler khi v
ch khi tn ti ng hai nh u, v V sao cho deg+(u) - deg-(u)= deg-(v) - deg+(v)=1, cc
nh s u, s v cn li c deg+(s) =deg-(s). ng i Euler s xut pht ti nh u v kt
thc ti nh v.
4.3.1. Chng minh th l na Euler
chng t th v hng G =<V,E> l na Euler ta cn thc hin:
72

Chng t th cho lin thng. iu ny d rng thc hin c bng cch


s dng hai th tc DFS(u) hoc BFS(u).
C 0 hoc hai nh bc l. S dng tnh cht ca cc phng php biu din
th tm ra bc ca mi nh.
V d. Chng minh rng, th v hng lin thng G =<V,E> c biu din
di dng ma trn k di y l th na Euler.
0
1
0
0
1
1
0
0
0
0
0
0
0

1
0
1
0
1
1
0
0
0
0
0
0
0

0
1
0
1
1
0
0
0
0
0
1
0
0

0
0
1
0
1
0
1
1
0
1
1
0
0

1
1
1
1
0
1
1
0
0
0
0
0
0

IT

Chng minh. Theo tnh cht ca ma trn


k, tng cc phn t hng u l bc ca nh
u. V vy ta c:
deg(1) = deg(13) = 3
deg (2) = deg(3) = deg(11) = 4
deg(12) = deg(6) = deg(7) = 4
deg(8) = deg(9) = 4
deg(5) = deg(4) = deg(10) = 6
G lin thng v c 2 nh bc l u=1 v
u=13 nn G l na Euler.

1
1
0
0
1
0
1
0
0
0
0
0
0

0
0
0
1
1
1
0
1
0
0
0
0
0

0
0
0
1
0
0
1
0
1
1
0
0
0

0
0
0
0
0
0
0
1
0
1
0
1
1

0
0
0
1
0
0
0
1
1
0
1
1
1

0
0
1
1
0
0
0
0
0
1
0
1
0

0
0
0
0
0
0
0
0
1
1
1
0
1

0
0
0
0
0
0
0
0
1
1
0
1
0

chng t th c hng G =<V,E> l na Euler ta cn thc hin:

PT

Chng t th cho lin thng yu. iu ny d rng thc hin c bng


cch s dng hai th tc DFS(u) hoc BFS(u).
C hai nh u v v tha mn deg+(u) - deg-(u)= deg-(v) - deg+(v)=1.
Cc nh s u, s v cn li c deg+(s) =deg-(s).
V d. Chng minh rng, th c hng lin thng yu G =<V,E> c biu din di
dng ma trn k di y l th na Euler?
Chng minh. Theo tnh cht ca ma trn k,
deg+(u) l tng cc phn t hng u, deg-(u) l
tng cc phn t ct u. V vy ta c:
deg+(2) = deg-(2) = deg+(3) = deg-(3) =2
deg+(6) = deg-(6) = deg+(7) = deg-(7) =2
deg+(8) = deg-(8) = deg+(9) = deg-(9) =2
deg+(11) = deg-(11) = deg+(12) = deg-(12) =2
deg+(5) =deg-(5)= deg+(4) = deg-(4) =
deg+(10) = deg-(10)=3
deg+(1) - deg-(1) = deg-(13) deg+(13) =1
G lin thng yu v c 2 nh u=1 v u=13 tha
mn iu kin nn G l na Euler.

73

0
0
0
0
0
1
0
0
0
0
0
0
0

1
0
0
0
0
1
0
0
0
0
0
0
0

0
1
0
0
1
0
0
0
0
0
0
0
0

0
0
1
0
1
0
0
1
0
0
0
0
0

1
1
0
0
0
0
1
0
0
0
0
0
0

0
0
0
0
1
0
1
0
0
0
0
0
0

0
0
0
1
0
0
0
1
0
0
0
0
0

0
0
0
0
0
0
0
0
1
1
0
0
0

0
0
0
0
0
0
0
0
0
0
0
1
1

0
0
0
1
0
0
0
0
1
0
1
0
0

0
0
1
1
0
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0
0
1
1
0
0

0
0
0
0
0
0
0
0
0
1
0
1
0

4.3.2. Thut ton tm ng i Euler


Thut ton tm ng i Euler v chu trnh Euler ch khc nhau duy nht mt
im l u vo ca thut ton. i vi thut ton tm chu trnh Euler, u vo thut
ton l nh uV bt k. i vi thut ton tm ng i trnh Euler, u vo thut ton
l nh uV l nh bc l u tin trong trng hp th v hng. i vi th c
hng, nh uV l nh c deg+(u)-deg-(u)=1. Thut ton tm ng i Euler trn th
v hng hoc c hng c m t chi tit trong Hnh 4.4.

PT

IT

Thut ton Euler-Path (u ):


- u l nh bc l u tin nu G l th v hng
- u l nh c deg+(u) - deg-(u) =1.
Bc 1 (Khi to) :
stack = ; //Khi to mt stack bt u l
dCE = ; //Khi to mng dCE bt u l
Push (stack, u) ; //a nh u vo ngn xp
Bc 2 (Lp ):
while (stack ) do { //Lp cho n khi stack rng
s = get(stack); //Ly nh u ngn xp
if ( Ke(s) ) then { // Nu danh sch Ke(s) cha rng
t =< nh u tin trong Ke(s)>;
Push(stack, t) //a t vo stack;
E = E \ (s,t); // Loi b cnh (s,t);
}
else { //Trng hp Ke(s)=
s = Pop(stack);// a s ra khi ngn xp
s dCE; //a s sang dCE
}
}
Bc 3 (Tr li kt qu) :
<Lt ngc li cc nh trong dCE ta c ng i Euler> ;

Hnh 4.4. Thut ton tm ng i Euler trn th.


4.3.3. Kim nghim thut ton
V d ta cn tm ng i Euler trn th c hng lin thng yu c biu
din di dng ma trn k trong Mc 4.3.1. Khi , nh u c deg+(u)-deg-(u)=1 l nh
1. Kt qu thc hin ca thut ton Hnh 4.4 c th hin trong Bng 4.2 di y.

74

1
1, 2
1, 2, 3
1, 2, 3, 4
1, 2, 3, 4,7
1, 2, 3, 4,7,5
1, 2, 3, 4,7,5,3
1, 2, 3, 4,7,5,3,11
1, 2, 3, 4,7,5,3,11,10
1, 2, 3, 4,7,5,3,11,10,8
1, 2, 3, 4,7,5,3,11,10,8,4
1, 2, 3, 4,7,5,3,11,10,8,4,10
1, 2, 3, 4,7,5,3,11,10,8,4,10,12
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13,9
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13,9,10
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13,9,10,13
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13,9,10
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13,9
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,6
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,6,2
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,6,2,5

Gi tr dCE

IT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

Trng thi Stack

PT

Bc

13,
13,10
13,10,9
13,10,9,13
13,10,9,13,12
13,10,9,13,12,11
13,10,9,13,12,11,4
13,10,9,13,12,11,4
13,10,9,13,12,11,4
13,10,9,13,12,11,4

a ln lt cc nh trong Stack sang dCE


37 ...
dCE = 13,10,9,13,12,11,4, 5, 2, 6, 5, 1, 6, 7, 8, 9, 12, 10, 4, 8, 10, 11, 3, 5, 7, 4, 3, 2, 1
Lt ngc li cc nh trong CE ta c ng i Euler
1- 2- 3- 4- 7- 5- 3- 11- 10- 8 -4- 10- 12- 9- 8- 7- 6- 1-5- 6- 2- 5- 4-11- 12- 13-9-10-13

75

4.3.4. Ci t thut ton


Chng trnh tm mt ng i Euler ca th bt u to nh u trn th v
hng lin thng c ci t theo khun dng th biu din di dng ma trn k.
Cc th tc chnh bao gm:
Th tc Init() : c d liu theo khun dng biu din ma trn k.
Th tc Kiemtra(): Kim tra xem G c l na Euler hay khng.
Th tc Euler-Cycle (u) : Xy dng ng i Euler bt u ti nh u (nh bc
l u tin).

PT

IT

Chng trnh tm ng i Euler c th hin nh sau:


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
void Init(int A[][MAX], int *n){
int i, j;FILE *fp;
fp = fopen("DDEULER.IN", "r");
fscanf(fp,"%d", n);
printf("\n So dinh do thi:%d",*n);
printf("\n Ma tran ke:");
for(i=1; i<=*n;i++){
printf("\n");
for(j=1; j<=*n;j++){
fscanf(fp,"%d", &A[i][j]);
printf("%3d", A[i][j]);
}
}
fclose(fp);
}
int Kiemtra(int A[][MAX], int n, int *u){
int i, j, s, d;
d=0;
for(i=1; i<=n;i++){
s=0;
for(j=1; j<=n;j++)
s+=A[i][j];
if(s%2){

76

d++;*u=i;
}
}
if(d!=2) return(FALSE);
return(TRUE);

PT

IT

}
void DDEULER(int A[][MAX], int n, int u){
int v, x, top, dCE;
int stack[MAX], CE[MAX];
top=1; stack[top]=u;dCE=0;
do {
v = stack[top];x=1;
while (x<=n && A[v][x]==0)
x++;
if (x>n) {
dCE++; CE[dCE]=v; top--;
}
else {
top++; stack[top]=x;
A[v][x]=0; A[x][v]=0;
}
} while(top!=0);
printf("\n Co duong di Euler:");
for(x=dCE; x>0; x--)
printf("%3d", CE[x]);
}
void main(void){
int A[MAX][MAX], n, u;
clrscr(); Init(A, &n);
if(Kiemtra(A,n,&u))
DDEULER(A,n,u);
else printf("\n Khong co duong di Euler");
getch();
}
4.4. th Hamilton

Vi th Euler, chng ta quan tm ti vic duyt cc cnh ca th mi cnh


ng mt ln, th trong mc ny, chng ta xt n mt bi ton tng t nhng ch khc
nhau l ta ch quan tm ti cc nh ca th, mi nh ng mt ln. S thay i ny
tng nh khng ng k, nhng thc t c nhiu s khc bit trong khi gii quyt bi
ton.

77

nh ngha. ng i qua tt c cc nh ca th mi nh ng mt ln c
gi l ng i Hamilton. Chu trnh bt u ti mt nh v no qua tt c cc nh cn
li mi nh ng mt ln sau quay tr li v c gi l chu trnh Hamilton. th c
chu trnh Hamilton c gi l th Hamilton. th c ng i Hamilton c gi l
th na Hamilton.
Nh vy, mt th Hamilton bao gi cng l th na Hamilton nhng iu ngc
li khng lun lun ng. V d sau s minh ha cho nhn xt ny.
V d. th thi hamilton G3, na Hamilton G2 v G1.

c
G1

G2

IT

G3

Hnh 4.5. th thi hamilton G3, na Hamilton G2 v G1.


4.4.1. Thut ton tm tt c cc chu trnh Hamilton

PT

Cho n nay, vic tm ra mt tiu chun nhn bit th Hamilton vn cn m,


mc d y l vn trung tm ca l thuyt th. Cho n nay cng vn cha c thut
ton hiu qu kim tra mt th c phi l th Hamilton hay khng. Hnh 4.6
di y m t thut ton lit k tt c chu trnh Hamilton bt u ti nh k.
Thut ton Hamilton( int k) {
/* Lit k cc chu trnh Hamilton ca th bng cch pht trin dy nh
(X[1], X[2], . . ., X[k-1] ) ca th G = (V, E) */
for y Ke(X[k-1]) {
if (k==n+1) and (y == v0) then
Ghinhan(X[1], X[2], . . ., X[n], v0);
else {
X[k]=y; chuaxet[y] = false;
Hamilton(k+1);
chuaxet[y] = true;
}
}
}
Hnh 4.6. Thut ton lit k cc chu trnh Hamilton bt u ti nh k.

78

Khi , vic lit k chu trnh Hamilton c thc hin nh sau:


Begin
for (vV ) chuaxet[v] = true; /*thit lp trng thi cc nh*/
X[1] = v0; (*v0 l mt nh no ca th*)
chuaxet[v0] = false;
Hamilton(2);
End.
4.4.2. Kim nghim thut ton
V d vi th G=<V, E> di y s cho ta cy tm kim chu trnh Hamilton th
hin thut ton trn c m t nh trong Hnh 4.6.

5 4

IT

3
G=(V,E)

5 3

3 1 5

PT

1 3

Hnh 4.7. Cy tm kim chu trnh Hamilton.

4.4.3. Ci t thut ton

Chng trnh lit k cc chu trnh Hamilton c th hin nh sau:


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 50
#define
TRUE 1
#define FALSE
0
int A[MAX][MAX], C[MAX], B[MAX];
int n,i, d;
void Init(void){
int i, j;FILE *fp;

79

IT

fp= fopen("CCHMTON.IN", "r");


if(fp==NULL){
printf("\n Khong co file input");
getch(); return;
}
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d", n);
printf("\n Ma tran ke:");
for(i=1; i<=n; i++){
printf("\n");
for(j=1; j<=n; j++){
fscanf(fp, "%d", &A[i][j]);
printf("%3d", A[i][j]);
}
}
fclose(fp);
for (i=1; i<=n;i++)
C[i]=0;

PT

}
void Result(void){
int i;
printf("\n ");
for(i=n; i>=0; i--)
printf("%3d", B[i]);
d++;
}
void Hamilton(int *B, int *C, int i){
int j, k;
for(j=1; j<=n; j++){
if(A[B[i-1]][j]==1 && C[j]==0){
B[i]=j; C[j]=1;
if(i<n) Hamilton(B, C, i+1);
else if(B[i]==B[0]) Result();
C[j]=0;
}
}
}
void main(void){
B[0]=1; i=1;d=0; Init();
Hamilton(B,C,i);
if(d==0)
printf("\n Khong co chu trinh Hamilton");
}

80

4.4.3. Ci t thut ton

PT

IT

Cng ging nh thut ton tm chu trnh Hamilton, thut ton tm ng i


Hamilton c ci t nh sau:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 50
#define
TRUE 1
#define FALSE
0
int A[MAX][MAX], C[MAX], B[MAX];
int n,i, d;
void Init(void){
int i, j;FILE *fp;
fp= fopen("DDHMTON.IN", "r");
if(fp==NULL){
printf("\n Khong co file input");
getch(); return;
}
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d", n);
printf("\n Ma tran ke:");
for(i=1; i<=n; i++){
printf("\n");
for(j=1; j<=n; j++){
fscanf(fp, "%d", &A[i][j]);
printf("%3d", A[i][j]);
}
}
fclose(fp);
for (i=1; i<=n;i++)
C[i]=0;
}
void Result(void){
int i;
printf("\n ");
for(i=n; i>0; i--)
printf("%3d", B[i]);
d++;
}
void Hamilton(int *B, int *C, int i){
81

int j, k;
for(j=1; j<=n; j++){
if(A[B[i-1]][j]==1 && C[j]==0){
B[i]=j; C[j]=1;
if(i<n) Hamilton(B, C, i+1);
else Result();
C[j]=0;
}
}

4.5. Nhng im cn ghi nh

IT

}
void main(void){
B[0]=1; i=1;d=0;
Init();
Hamilton(B,C,i);
if(d==0)
printf("\n Khong co duong di Hamilton");
getch();
}

PT

Khi nim v nh ngha v th Euler, th na Euler, th Hamilton, th


na Hamilton.
Nm vng v phn bit r s khc bit gia chu trnh (ng i) Euler v chu
trnh (ng i Hamilton).
Phng php hiu r bn cht ca thut ton l ci t v kim chng thut ton
bng cch vit chng trnh.

82

BI TP

0
0
0
1
0
1
0
0
0
0
0
0
0

0
0
1
0
0
0
0
1
0
1
1
0
0

0
1
0
0
0
0
0
0
1
1
0
0
1

1
0
0
0
0
1
0
1
0
0
0
1
0

0
0
0
0
0
0
1
0
1
0
0
0
0

1
0
0
1
0
0
0
0
0
1
0
1
0

0
0
0
0
1
0
0
0
1
0
1
0
1

0
1
0
1
0
0
0
0
0
0
1
1
0

0
0
1
0
1
0
1
0
0
0
0
0
1

0
1
1
0
0
1
0
0
0
0
0
1
0

0
1
0
0
0
0
1
1
0
0
0
0
1

0
0
0
1
0
1
0
1
0
1
0
0
0

0
0
1
0
0
0
1
0
1
0
1
0
0

0
0
1
0
0
0
0
1
0
1
1
0
0

0
1
0
0
0
0
0
0
1
1
0
0
1

1
0
0
0
0
1
0
1
0
0
0
1
0

0
0
0
0
0
0
1
0
1
0
0
0
0

1
0
0
1
0
0
0
0
0
1
0
1
0

0
0
0
0
1
0
0
0
0
0
1
0
1

0
1
0
1
0
0
0
0
0
0
1
1
0

0
0
1
0
1
0
0
0
0
0
0
0
1

0
1
1
0
0
1
0
0
0
0
0
1
0

0
1
0
0
0
0
1
1
0
0
0
0
1

0
0
0
1
0
1
0
1
0
1
0
0
0

0
0
1
0
0
0
1
0
1
0
1
0
0

PT

IT

1. Cho th v hng lin thng


G=<V,E> nh hnh bn phi. Hy thc
hin:
a) Chng minh th cho l Euler?
b) Xy dng thut ton tm mt chu
trnh Euler ca th bt u ti nh
uV?
c) Tm mt chu trnh Euler bt u ti
nh u=1? Ch r kt qu trung gian theo
mi bc thc hin ca thut ton?
d) Tm mt chu trnh Euler bt u ti
nh u=5? Ch r kt qu trung gian theo
mi bc thc hin ca thut ton?
e) Vit chng trnh tm mt chu trnh
Euler ca th bt u ti nh u?

2. Cho th v hng lin thng


G=<V,E> nh hnh bn phi. Hy thc
hin:
a) Chng minh th cho l na
Euler?
b) Xy dng thut ton tm mt ng
i Euler ca th?
c) Tm mt ng i Euler ca th?
Ch r kt qu trung gian theo mi bc
thc hin ca thut ton?
d) Vit chng trnh tm mt ng i
Euler ca th?

83

0
0
0
1
0
1
0
0
0
0
0
0
0

0
0
0
1
0
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0
0
1
1
0
0

0
1
0
0
0
0
0
0
0
1
0
0
0

0
0
0
0
0
0
0
1
0
0
0
1
0

0
0
0
0
0
0
0
0
1
0
0
0
0

1
0
0
1
0
0
0
0
0
0
0
0
0

0
0
0
0
1
0
0
0
1
0
0
0
0

0
1
0
0
0
0
0
0
0
0
1
0
0

0
0
1
0
0
0
0
0
0
0
0
0
1

0
0
0
0
0
1
0
0
0
0
0
1
0

0
0
0
0
0
0
1
0
0
0
0
0
1

0
0
0
0
0
1
0
1
0
0
0
0
0

0
0
1
0
0
0
1
0
0
0
0
0
0

4. Cho th c hng lin thng yu


G=<V,E> nh hnh bn phi. Hy thc
hin:
a) Chng minh th cho l na
Euler?
b) Xy dng thut ton tm mt ng
i ca th?
c) Tm mt ng i Euler ca th?
Ch r kt qu trung gian theo mi bc
thc hin ca thut ton?
e) Vit chng trnh tm mt ng i
duler ca th?

0
0
0
1
0
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0
0
1
1
0
0

0
1
0
0
0
0
0
0
0
1
0
0
0

0
0
0
0
0
0
0
1
0
0
0
1
0

0
0
0
0
0
0
0
0
1
0
0
0
0

1
0
0
1
0
0
0
0
0
0
0
0
0

0
0
0
0
1
0
0
0
0
0
0
0
0

0
1
0
0
0
0
0
0
0
0
1
0
0

0
0
1
0
0
0
0
0
0
0
0
0
1

0
0
0
0
0
1
0
0
0
0
0
1
0

0
0
0
0
0
0
1
0
0
0
0
0
1

0
0
0
0
0
1
0
1
0
0
0
0
0

0
0
1
0
0
0
1
0
0
0
0
0
0

PT

IT

3. Cho th c hng lin thng yu


G=<V,E> nh hnh bn phi. Hy thc
hin:
a) Chng minh th cho l Euler?
b) Xy dng thut ton tm mt chu
trnh Euler ca th bt u ti nh
uV?
c) Tm mt chu trnh Euler bt u ti
nh u=1? Ch r kt qu trung gian theo
mi bc thc hin ca thut ton?
d) Tm mt chu trnh Euler bt u ti
nh u=5? Ch r kt qu trung gian theo
mi bc thc hin ca thut ton?
e) Vit chng trnh tm mt chu trnh
Euler ca th bt u ti nh u?

5. Cho th v hng lin thng c biu din di dng danh sch k nh di y:


Ke(1) = { 4, 6 }.
Ke(5) = { 7, 9 }.
Ke(9) = { 3, 5, 7, 13 }.
Ke(2) = { 3, 8, 10, 11}. Ke(6) = { 1, 4, 10, 12 }. Ke(10) = { 2, 3, 6, 12 }.
Ke(3) = { 2, 9, 10, 13 }. Ke(7) = { 5, 9, 11, 13 }. Ke(11) = { 2, 7, 8, 13 }.
Ke(4) = { 1, 6, 8, 12 }.
Ke(8) = { 2, 4, 11, 12 }. Ke(12) = { 4, 6, 8, 10 }.
Ke(13) = { 3, 7, 9, 11 }.
Hy thc hin:
a) Tm mt chu trnh Euler bt u ti nh u=1? Ch r kt qu trung gian
theo mi bc thc hin ca thut ton?
b) Tm mt chu trnh Euler bt u ti nh u=5? Ch r kt qu trung gian
theo mi bc thc hin ca thut ton?
c) Vit chng trnh tm mt chu trnh Euler ca th bt u ti nh u?
6. Cho th v hng lin thng c biu din di dng danh sch k nh di y:
Ke(1) = { 4, 6 }.
Ke(5) = { 7, 9 }.
Ke(9) = { 3, 5, 7, 13 }.
Ke(2) = { 3, 8, 10, 11}. Ke(6) = { 1, 10, 12 }.
Ke(10) = { 2, 3, 6, 12 }.

84

Ke(3) = { 2, 9, 10, 13 }. Ke(7) = { 5, 9, 11, 13 }.


Ke(4) = { 1, 8, 12 }. Ke(8) = { 2, 4, 11, 12 }.

Ke(11) = { 2, 7, 8, 13 }.
Ke(12) = { 4, 6, 8, 10 }.
Ke(13) = { 3, 7, 9, 11 }.

IT

Hy thc hin:
a) Xy dng thut ton tm mt ng i Euler ca th?
b) Tm mt ng i Euler ca th? Ch r kt qu trung gian theo mi
bc thc hin ca thut ton?
c) Vit chng trnh tm mt ng i ca th bt u ti nh u?
7. Cho th c hng lin thng yu c biu din di dng danh sch k nh di
y:
Ke(1) = { 6 }.
Ke(5) = { 7 }.
Ke(9) = { 5, 7 }.
Ke(2) = { 3, 8}.
Ke(6) = { 10, 12 }.
Ke(10) = { 2, 3 }.
Ke(3) = { 9, 13 }. Ke(7) = { 11, 13 }.
Ke(11) = { 2, 8 }.
Ke(4) = { 1, 6 }.
Ke(8) = { 4, 12 }.
Ke(12) = { 4, 10 }.
Ke(13) = { 9, 11 }.
Hy thc hin:
a) Tm mt chu trnh Euler bt u ti nh u=1? Ch r kt qu trung gian
theo mi bc thc hin ca thut ton?
b) Tm mt chu trnh Euler bt u ti nh u=7? Ch r kt qu trung gian
theo mi bc thc hin ca thut ton?
c) Vit chng trnh tm mt chu trnh Euler ca th bt u ti nh u?

PT

8. Cho th c hng lin thng yu c biu din di dng danh sch k nh di


y:
Ke(1) = { 6 }.
Ke(5) = { 7 }.
Ke(9) = { 5, 7 }.
Ke(2) = { 3, 8}.
Ke(6) = { 10, 12 }.
Ke(10) = { 2, 3 }.
Ke(3) = { 9, 13 }. Ke(7) = { 11, 13 }.
Ke(11) = { 2, 8 }.
Ke(4) = { 1 }.
Ke(8) = { 4, 12 }.
Ke(12) = { 4, 10 }.
Ke(13) = { 9, 11 }.
Hy thc hin:
a) Trnh by thut ton tm mt ng i Euler trn th c hng?
b) Tm mt ng i Euler ca th?
c) Vit chng trnh tm mt ng i Euler ca th?

85

CHNG 5. CY KHUNG CA TH

Ni dung chnh ca chng ny cp n mt loi th n gin nht l cy.


Cy c ng dng rng ri trong nhiu lnh vc khc nhau ca tin hc nh t chc cc
th mc, lu tr d liu, biu din tnh ton, biu din quyt nh v t chc truyn tin.
Nhng ni dung c trnh by bao gm:
Cy v cc tnh cht c bn ca cy.
Cy khung ca th & cc thut ton c bn xy dng cy khung ca th.
Bi ton tm cy khung nh nht & cc thut ton tm cy khung nh nht.
Thut ton Kruskal tm cy bao trm nh nht.
Thut ton Prim tm cy bao trm nh nht.

IT

Bn c c th tm thy nhng chng minh c th cho cc nh l, tnh ng n v


phc tp cc thut ton thng qua cc ti liu [1], [2].
5.1. Cy v mt s tnh cht c bn

nh ngha 1. Ta gi cy l th v hng lin thng khng c chu trnh. th


khng lin thng c gi l rng.

PT

Nh vy, rng l th m mi thnh phn lin thng ca n l mt cy.


V d. Rng gm 3 cy trong hnh 7.1.

T1

T2

T3

Hnh 5.1 . Rng gm 3 cy T1, T2, T3.


Cy c coi l dng th n gin nht ca th. nh l sau y cho ta mt
s tnh cht ca cy.
nh l. Gi s T= <V, E> l th v hng n nh. Khi nhng khng nh
sau l tng ng
a) T l mt cy;
b) T khng c chu trnh v c n-1 cnh;
c) T lin thng v c ng n-1 cnh;

86

d) T lin thng v mi cnh ca n u l cu;


e) Gia hai nh bt k ca T c ni vi nhau bi ng mt ng i n;
f) T khng cha chu trnh nhng h c thm vo n mt cnh ta thu c ng
mt chu trnh;
Chng minh. nh l c chng minh nh l thng qua cc bc (a) =>(b)
=>(c) => (d) =>(e) => (f) => (a). Nhng bc c th ca qu trnh chng minh bn c
c th tm thy trong cc ti liu [1], [2].
nh ngha 2. Cho G l th v hng lin thng. Ta gi th con T ca G l
mt cy khung ca G (Cy bao trm) nu T tho mn hai iu kin:
a) T l mt cy;
b) Tp nh ca T bng tp nh ca G.
Trong l thuyt th, ngi ta qua tm n hai bi ton c bn v cy:

IT

Bi ton 1. Cho th v hng G =<V,E>. Hy xy dng mt cy khung ca


th bt u ti nh uV.
Bi ton 2. Cho th v hng G =<V,E> c trng s. Hy xy dng cy khung
c di nh nht.

PT

Bi ton 1 c gii quyt bng cc thut ton tm kim c bn: thut ton DFS
hoc BFS. Bi ton 2 c gii quyt bng thut ton Kruskal hoc PRIM.
5.2. Xy dng cy khung ca th da vo thut ton DFS
tm mt cy khung trn th v hng lin thng ta c th s dng k thut
tm kim theo chiu su. Gi s ta cn xy dng mt cy bao trm xut pht ti nh u
no . Trong c hai trng hp, mi khi ta n c nh v tc (chuaxet[v] = False) t
nh u th cnh (u,v) c kt np vo cy khung. K thut xy dng cy khung bt u
ti nh u da vo thut ton DFS c m t trong Hnh 5.2.
5.2.1. M t thut ton

Thut ton Tree-DFS(u) {


chuaxet[u] = False; //Bt trng thi nh u t True tr thnh False
for vKe(u) do { //Duyt trn danh sch k ca nh u
if (chuaxet[v]) { //Nu nh v cha c xt n
T = T(u,v); //Hp cnh (u,v) vo cy khung
DFS(v); //Duyt theo chiu su bt u ti nh v
}
}
}

Hnh 5.2. Thut ton Tree-DFS(u).


87

Khi , qu trnh xy dng cy khung bt u ti nh u c thc hin nh thut


ton trong Hnh 5.3.
Thut ton Tree-Graph-DFS() {
for each uV do //Khi to cc nh cha xt
chuaxet[u]= True;
endfor;
roof = <nh bt k ca th>; //Ly mt nh bt k lm gc
T = ;
//Thit lp tp cnh ban u ca cy l
Tree-DFS(roof); //Thc hin thut ton Tree-DFS(roof)
if (|T| <n-1) < th khng lin thng>;
else <Ghi nhn tp cnh Tca cy khung>
}
Hnh 5.3. Thut ton xy dng cy khung da vo DFS.

IT

5.2.2. Kim nghim thut ton


Gi s ta cn kim nghim thut ton Tree-Graph-DFS vi nh bt u u=1 trn
th c biu din di dng ma trn k di y. Khi cc bc thc hin ca
thut ton c th hin trong Bng 5.1.
1
0
1
1
0
0
0
0
0
0
0
0
0

1
1
0
1
1
0
0
0
0
0
0
0
0

1
1
1
0
0
0
0
0
0
0
0
0
0

0
0
1
0
0
1
1
1
1
0
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
0
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

PT

0
1
1
1
0
0
0
0
0
0
0
0
0

0
0
0
0
1
1
0
1
0
1
0
0
0

0
0
0
0
0
0
0
0
1
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

Bng 5.1. Kim nghim thut ton Tree-Graph-DFS


Bc

Tree-DFS(u) =?

T =?

T=

1, 2

T = T(1,2)

1, 2, 3

T = T(2,3)

88

1, 2, 3, 4

T = T(3, 4)

1, 2, 3, 4, 5

T = T(3, 5)

1, 2, 3, 4, 5, 6

T = T(5, 6)

1, 2, 3, 4, 5, 6, 7

T = T(6, 7)

1, 2, 3, 4, 5, 6, 7, 8

T = T(7, 8)

1, 2, 3, 4, 5, 6, 7, 8, 9

T = T(8, 9)

10

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

T = T(9, 10)

11

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

T = T(10, 11)

12

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

T = T(11, 12)

13

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13

T = T(12, 13)

5.2.3. Ci t thut ton

IT

Kt lun T = {(1,2), (2,3), (3,4), (3,5), (5,6), (6,7), (7,8), (8,9), (9,10), (10,11),
(11,12), (12,13)

PT

Thut ton Tree-Graph-DFS c ci t i vi th c biu din di dng


ma trn k. Cc th tc chnh c ci t bao gm:
Th tc Init() : c d liu v thit lp gi tr ca mng chuaxet[].
Th tc Tree-DFS (u) : thut ton DFS bt u ti nh u.
Th tc Result(): ghi nhn tp cnh ca cy khung.
Chng trnh xy dng mt cy khung c th hin nh sau:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int CBT[MAX][2], n, A[MAX][MAX], chuaxet[MAX], sc, QUEUE[MAX];
void Init(void){
int i, j;FILE *fp;
fp= fopen("BAOTRUM1.IN", "r");
if(fp==NULL){
printf("\n Khong co file input");
getch(); return;
}
fscanf(fp,"%d",&n);

89

printf("\n So dinh do thi:%d", n);


printf("\n Ma tran ke:");
for(i=1; i<=n; i++){
printf("\n");
for(j=1; j<=n; j++){
fscanf(fp, "%d", &A[i][j]);
printf("%3d", A[i][j]);
}
}
fclose(fp);
for (i=1; i<=n;i++)
chuaxet[i]=TRUE;

PT

IT

}
void TREE_DFS(int i){
int j; chuaxet[i] = False;
if(sc==n-1) return;
for(j=1; j<=n; j++){
if (chuaxet[j] && A[i][j]){ sc++;
CBT[sc][1]=i; CBT[sc][2]=j;
if(sc==n-1) return;
STREE_DFS(j);
}
}
}
void Result(void){
int i, j;
for(i=1; i<=sc; i++){
printf("\n Canh %d:", i);
for(j=1; j<=2; j++)
printf("%3d", CBT[i][j]);
}
}
void main(void){
int i; Init(); sc=0; i=1; /* xy dng cy bao trm ti nh 1*/
TREE_DFS(i);
if (sc<n-1) printf(\n th khng lin thng);
else Result();
}
5.3. Xy dng cy khung ca th da vo thut ton BFS
tm mt cy khung trn th v hng lin thng ta c th s dng k thut
tm kim theo chiu rng. Gi s ta cn xy dng mt cy bao trm xut pht ti nh u

90

no . Trong c hai trng hp, mi khi ta n c nh v tc (chuaxet[v] = False) t


nh u th cnh (u,v) c kt np vo cy khung.
5.3.1. Ci t thut ton
Thut ton xy dng cy khung ca th c m t nh Hnh 5.4.

PT

IT

Thut ton Tree-BFS(u):


Begin
Bc 1 (Khi to):
T = ; //Tp cnh cy khung ban u.
Queue = ; //Thit lp hng i ban u;
Push(Queue, u); //a u vo hng i;
chuaxet[u] = False;//Bt trng thi xt ca nh u
Bc 2 (Lp):
while (Queue ) do { //Lp cho n khi hng i rng
s = Pop(Queue); Ly s ra khi hng i
for each tKe(s) do { //Lp trn danh sch Ke(s)
if (chuaxet[t] ) then { //Nu nh t chuaxet
Push(Queue, t);// a t vo hng i
T = T(s,t); //Kt np (s,t) vo cy khung
chuaxet[t] = False; //Ghi nhn t xt
endif ;
endfor ;
endwwhile ;
Bc 3 (Tr li kt qu) :
if (| T | < n-1 ) < th khng lin thng> ;
else <Ghi nhn tp cnh T ca cy khung" ;
end.
Hnh 5.4. Thut ton Tree-BFS(u).

5.3.2. Kim nghim thut ton


Gi s ta cn kim nghim thut ton Tree- BFS vi nh bt u u=1 trn th
c biu din di dng ma trn k di y. Khi cc bc thc hin ca thut ton
c th hin trong Bng 5.2.

91

0
1
1
1
0
0
0
0
0
0
0
0
0

1
0
1
1
0
0
0
0
0
0
0
0
0

1
1
0
1
1
0
0
0
0
0
0
0
0

1
1
1
0
0
0
0
0
0
0
0
0
0

0
0
1
0
0
1
1
1
1
0
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
0
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
1
0
0
0

0
0
0
0
0
0
0
0
1
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

Bng 5.2. Kim nghim thut ton Tree-BFS


Trng thi hng i: Tree-BFS(u) =?

T =?

T=

2, 3, 4

3, 4

4, 5

6, 7, 8, 9

T = T{(5,6), (5,7), (5,8), (5,9)}

7, 8, 9

T = T

8, 9

T = T

10

10

11

11, 12, 13

T = T{(10,11), (10,12), (10,13)}

12

12, 13

T = T

13

13

T = T

14

T = T

IT

Bc

T = T{(1,2), (1,3), (1,4) }


T=T

T=T(3,5)

PT

T=T

T = T
T = T(9,10)

Kt lun T = {(1,2), (1,3), (1,4), (3,5), (5,6), (5,7), (5,8), (5,9), (9,10), (10,11),
(10,12), (10,13)
5.3.3. Ci t thut ton
Thut ton Tree-BFS c ci t i vi th c biu din di dng ma trn
k. Cc th tc chnh c ci t bao gm:
92

Th tc Init() : c d liu v thit lp gi tr ca mng chuaxet[].


Th tc Tree-BFS (u) : thut ton BFS bt u ti nh u.
Th tc Result(): ghi nhn tp cnh ca cy khung.

PT

IT

Chng trnh xy dng mt cy khung c th hin nh sau:


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int CBT[MAX][2], n, A[MAX][MAX], chuaxet[MAX], sc, QUEUE[MAX];
void Init(void){
int i, j;FILE *fp;
fp= fopen("BAOTRUM1.IN", "r");
if(fp==NULL){
printf("\n Khong co file input");
getch(); return;
}
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d", n);
printf("\n Ma tran ke:");
for(i=1; i<=n; i++){
printf("\n");
for(j=1; j<=n; j++){
fscanf(fp, "%d", &A[i][j]);
printf("%3d", A[i][j]);
}
}
fclose(fp);
for (i=1; i<=n;i++)
chuaxet[i]=TRUE;
}
void TREE_BFS(int u){
int dauQ, cuoiQ, v, p;
dauQ=1; cuoiQ=1; QUEUE[dauQ]=u;chuaxet[u]=FALSE;
while(dauQ<=cuoiQ){
v= QUEUE[dauQ]; dauQ=dauQ+1;
for(p=1; p<=n; p++){
if(chuaxet[p] && A[v][p]){
chuaxet[p]=FALSE; sc++;
CBT[sc][1]=v; CBT[sc][2]=p;

93

cuoiQ=cuoiQ+1;
QUEUE[cuoiQ]=p;
if(sc==n-1) return;
}
}
}
}

PT

IT

void Result(void){
int i, j;
for(i=1; i<=sc; i++){
printf("\n Canh %d:", i);
for(j=1; j<=2; j++)
printf("%3d", CBT[i][j]);
}
}
void main(void){
int i; Init(); sc=0; i=1; /* xy dng cy bao trm ti nh 1*/
TREE_BFS(i);
if (sc<n-1) printf(\n th khng lin thng);
else Result();
}
5.4. Bi ton xy dng cy khung c di nh nht
Bi ton tm cy khung nh nht l mt trong nhng bi ton ti u trn th c ng
dng trong nhiu lnh vc khc nhau ca thc t. Bi ton c pht biu nh di y.
5.4.1. t bi ton

Cho G=<V, E> l th v hng lin thng vi tp nh V = {1, 2, . . ., n } v tp


cnh E gm m cnh. Mi cnh e ca th c gn vi mt s khng m c(e) c gi
l di cnh. Gi s H=<V, T> l mt cy khung ca th G. Ta gi di c(H) ca
cy khung H l tng di cc cnh: c( H ) c (e) . Bi ton c t ra l, trong s cc
eT

cy khung ca th hy tm cy khung c di nh nht ca th.


minh ha cho nhng ng dng ca bi ton ny, chng ta c th tham kho hai m
hnh thc t ca bi ton.
Bi ton ni mng my tnh. Mt mng my tnh gm n my tnh c nh s
t 1, 2, . . ., n. Bit chi ph ni my i vi my j l c[i, j], i, j = 1, 2, . . ., n. Hy tm cch
ni mng sao cho chi ph l nh nht.
Bi ton xy dng h thng cable. Gi s ta mun xy dng mt h thng cable
in thoi ni n im ca mt mng vin thng sao cho im bt k no trong mng u
94

c ng truyn tin ti cc im khc. Bit chi ph xy dng h thng cable t im i n


im j l c[i,j]. Hy tm cch xy dng h thng mng cable sao cho chi ph l nh nht.
gii bi ton cy khung nh nht, chng ta c th lit k ton b cy khung v
chn trong s mt cy nh nht. Phng n nh vy thc s khng kh thi v s cy
khung ca th l rt ln c nn-2, iu ny khng th thc hin c vi th vi s
nh c chc.
tm mt cy khung ta c th thc bng hai thut ton: Thut ton Kruskal v thut
ton PRIM.
5.4.2. Thut ton Kruskal
Thut ton s xy dng tp cnh T ca cy khung nh nht H=<V, T> theo tng
bc c m t trong Hnh 5.5 nh di y.
a) M t thut ton

PT

IT

Thut ton Kruskal:


Begin
Bc 1 (Khi to):
T = ; //Khi to tp cnh cy khung l
d(H) = 0 //Khi to di nh nht cy khung l 0
Bc 2 (Sp xp):
<Sp xp cc cnh ca th theo th t gim dn ca trng s>;
Bc 3 (Lp):
while (|T<n-1| && E ) do { // Lp nu E v |T|<n-1
e = <Cnh c di nh nht>;
E = E \ {e}; //Loi cnh e ra khi th
if (T{e} khng to nn chu trnh ) then {
T = {e}; // Kt np e vo tp cnh cy khung
d(H) = d(H) + d(e); // di ca tp cnh cy khung
endif;
endwhile;
Bc 4 (Tr li kt qu):
if (|T| < n-1) then < th khng lin thng>;
else
Return( T, d(H));
end.
Hnh 5.5. Thut ton Kruskal tm cy khung nh nht.

95

b) Kim nghim thut ton


V d ta cn kim nghim thut ton Kruskal trong Hnh 5.5 trn th c biu
din di dng ma trn k nh di y. Thc hin tun t cc bc ca thut ton ta s
c kt qu nh sau:

2
1
3

5
5

5
5

5
6

6
6

6
6

7
8

7
7

IT

1
2

7
7

Bc 1: T = ; D(T) = 0;
Bc 2. Sp xp cc cnh theo th t tng dn ca trng s
u

Cui
2
3
4
3
6
7
4
6
5
6
6
10
7
8
9
10
8
9
12
13
10
11
11
12
12
13

Tr.S
2
1
3
2
5
5
4
5
5
5
6
6
6
6
6
6
6
7
7
7
7
7
7
7
8
8

PT

1
1
1
2
2
2
3
3
4
4
5
5
6
6
6
6
7
8
8
8
9
9
10
10
11
12

96

1
1
2
1
3
2
2
3
4
4
5
5
6
6
6
6
7
8
8
8
9
9
10
10
11
12

Cui
3
2
3
4
4
6
7
6
5
6
6
10
7
8
9
10
8
9
12
13
10
11
11
12
12
13

Tr.S
1
2
2
3
4
5
5
5
5
5
6
6
6
6
6
6
6
7
7
7
7
7
7
7
8
8

Bc 3 (lp) :
STT
Cnh c xt
1
E \( 1,3)
2
E = E\(1,2)
3
E = E\(2,3)
4
E = E\(1,4)
5
E = E\(3,4)
6
E = E\(2,6)
7
E = E\(2,7)
8
E = E\(3,6)
9
E = E\(4,5)
10
E = E\(4,6)
11
E = E\(5,6)
12
E = E\(5,10)
13
E = E\(6,7)
14
E = E\(6,8)
15
E = E\(6,9)
16
E = E\(6,10)
17
E = E\(7,8)
18
E = E\(8,9)
19
E = E\(8,12)
20
E = E\(8,13)
21
E = E\(9,10)
22
E = E\(9,11)
Bc lp kt thc v |T|> N-1 =12

PT

IT

T e
T = T(1,3); D(T) = 1
T = T(1,2) ; D(T) = 1+2 =3
To nn chu trnh
T = T(1,4); D(T) = 3 +3 =6
To nn chu trnh
T = T(2,6); D(T) = 6+5=11
T = T(2,7); D(T) = 11+5 =16
To nn chu trnh
T = T (4,5); D(T) = 16+5 =21
To nn chu trnh
To nn chu trnh
T = T(5,10); D(T) = 21+6 =27
To nn chu trnh
T = T(6,8); D(T) = 27+6 =33
T = T(6,9); D(T) = 33+6 =39
To nn chu trnh
To nn chu trnh
To nn chu trnh
T = T(8,12); D(T) = 39+7 =46
T = T(8,13); D(T) = 46+7 =53
To nn chu trnh
T = T(9,11); D(T) = 53+7 =60

Bc 4 : Tr li kt qu:

T = { (1,3), (1,2), (1,4), (2,6), 2,7), (4,5), (5,10), (6,8),(6,9), (8,12), (8,13), (9,11) }
D(T) = 1 + 2 + 3 + 5 + 5 + 5 + 6 + 6 + 6 + 7 + 7 +7 = 60

c) Ci t thut ton
Chng trnh tm cy khung nh nht theo thut ton Kruskal cho th biu din
di dng danh sch trng s c th hin di y vi cc th tc:
Th tc Init(): c d liu biu din bng danh sch trng s.
Th tc Heap(): sp xp cc cnh theo th t tng dn ca trng s bng thut
ton Heap Sort.
Th tc Find(), Union() : tm v kim tra khi kt no cnh vo cy khung c to
nn chu trnh hay khng.
Th tc Result() : a ra tp cnh v di nh nht ca cy khung.

97

PT

IT

#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int n, m, minl, connect;
int
dau[500],cuoi[500], w[500];
int
daut[50], cuoit[50], father[50];
void Init(void){
int i; FILE *fp;
fp=fopen("baotrum1.in","r");
fscanf(fp, "%d%d", &n,&m);
printf("\n So dinh do thi:%d", n);
printf("\n So canh do thi:%d", m);
printf("\n Danh sach ke do thi:");
for(i=1; i<=m;i++){
fscanf(fp, "%d%d%d", &dau[i], &cuoi[i], &w[i]);
printf("\n Canh %d: %5d%5d%5d", i, dau[i], cuoi[i], w[i]);
}
fclose(fp);getch();
}
void Heap(int First, int Last){
int j, k, t1, t2, t3;
j=First;
while(j<=(Last/2)){
if( (2*j)<Last && w[2*j + 1]<w[2*j])
k = 2*j +1;
else
k=2*j;
if(w[k]<w[j]){
t1=dau[j]; t2=cuoi[j]; t3=w[j];
dau[j]=dau[k]; cuoi[j]=cuoi[k]; w[j]=w[k];
dau[k]=t1; cuoi[k]=t2; w[k]=t3; j=k;
}
else j=Last;
}
}

int Find(int i){


int tro=i;
98

while(father[tro]>0) tro=father[tro];
return(tro);

PT

IT

}
void Union(int i, int j){
int x = father[i]+father[j];
if(father[i]>father[j]) {father[i]=j;father[j]=x; }
else {
father[j]=i; father[i]=x;
}
}
void Krusal(void){
int i, last, u, v, r1, r2, ncanh, ndinh;
for(i=1; i<=n; i++)
father[i]=-1;
for(i= m/2;i>0; i++)
Heap(i,m);
last=m; ncanh=0; ndinh=0;minl=0;connect=TRUE;
while(ndinh<n-1 && ncanh<m){
ncanh=ncanh+1; u=dau[1]; v=cuoi[1];
r1= Find(u); r2= Find(v);
if(r1!=r2) {
ndinh=ndinh+1; Union(r1,r2);
daut[ndinh]=u; cuoit[ndinh]=v;
minl=minl+w[1];
}
dau[1]=dau[last]; cuoi[1]=cuoi[last]; w[1]=w[last]; last=last-1;
Heap(1, last);
}
if(ndinh!=n-1) connect=FALSE;
}
void Result(void){
int i;
printf("\n Do dai cay khung nho nhat:%d", minl);
printf("\n Cac canh cua cay khung nho nhat:");
for(i=1; i<n; i++)
printf("\n %5d%5d",daut[i], cuoit[i]);
}
void main(void){
Init(); Krusal();Result(); getch();
}
5.4.2. Thut ton Prim

99

Thut ton Kruskal lm vic km hiu qu i vi nhng th c s cnh khong


m=n(n-1)/2. Trong nhng tnh hung nh vy, thut ton Prim t ra hiu qu hn.
a) M t thut ton
Thut ton Prim cn c mang tn l ngi lng ging gn nht. Trong thut
ton ny, bt u ti mt nh tu s ca th, ni s vi nh y sao cho trng s cnh
c[s, y] l nh nht. Tip theo, t nh s hoc y tm cnh c di nh nht, iu ny dn
n nh th ba z v ta thu c cy b phn gm 3 nh 2 cnh. Qu trnh c tip tc
cho ti khi ta nhn c cy gm n-1 cnh, chnh l cy bao trm nh nht cn tm.
Thut ton Prim c m t trong Hnh 5.6.

PT

IT

Thut ton PRIM (s):


Begin:
Bc 1 (Khi to):
VH = {s}; //Tp nh cy khung thit lp ban u l s
V = V\{s}; //Tp nh V c bt i s
T = ; //Tp cnh cy khung thit lp ban u l
d(H) = 0; // di cy khung c thit lp l 0
Bc 2 (Lp ):
while (V ) do {
e = <u, v>: cnh c di nh nht tha mn uV, vVH;
d(H) = d(H) + d(e); // Thit lp di cy khung nh nht
T = T {e}; //Kt np e vo cy khung
V = V \{u}; // Tp nh V bt i nh u
VH = VH{u}; // Tp nh VH thm vo nh u
endwhile;

Bc 3 (Tr li kt qu):

if (|T|<n-1) then < th khng lin thng>;


else Return( T, d(H));

End.
Hnh 5.6. Thut ton PRIM xy dng cy khung nh nht.
b) Kim nghim thut ton
Gi s ta cn kim nghim thut ton cho th trng s Mc 5.4.1. Khi cc
bc thc hin theo thut ton PRIM nh trong Bng di y.
Bc khi to: T =; D(T)=0; V = 2,3,4,5,6,7,8,9,10,11,12,13; VH =1

100

V \v = ?

VH v=?

T, D(T)

2,4,5,6,7,8,9,10,11,12,13

1,3

(1,2)

4,5,6,7,8,9,10,11,12,13

1,2,3

(1,4)

5,6,7,8,9,10,11,12,13

1,2,3,4

(2,6)

5, 7,8,9,10,11,12,13

1,2,3,4,6

(2,7)

5, 8,9,10,11,12,13

1,2,3,4,6,7

(4,5)

8,9,10,11,12,13

1,2,3,4,5, 6,7

(5,10)

8,9,11,12,13

1,2,3,4,5, 6,7,10

(6,8)

9,11,12,13

(6,9)

11,12,13

(8,12)

11,13

T = T(1,3)
D(T) = 0 +1
T = T(1,2)
D(T) = 1+2=3
T = T(1,4)
D(T) = 3+3=6
T = T(2,6)
D(T) = 6+5=11
T = T(2,7)
D(T) = 11+5=16
T = T(4,5)
D(T) = 16+5=21
T = T(5,10)
D(T) = 21+6=27
T = T(6,8)
D(T) = 27+6=33
T = T(6,9)
D(T) = 33+6=39
T = T(8,12)
D(T) = 39+7=46
T = T(8,13)
D(T) = 46+7=53
T = T(9,11)
D(T) = 53+7=60

(9,11)

1,2,3,4,5, 6,7,8,10

1,2,3,4,5, 6,7,8,9,10

1,2,3,4,5, 6,7,8,9,10,12

PT

(8,13)

IT

e=(v,t)|
vV, tVT
c di
nh nht
(1,3)

11

1,2,3,4,5, 6,7,8,9,10,12,13

1,2,3,4,5, 6,7,8,9,10,12,13,11

V = : kt thc bc lp

Kt qu: T = { (1,3), (1,2), (1,4), (2,6), 2,7), (4,5), (5,10), (6,8),(6,9), (8,12), (8,13), (9,11) }
D(T) = 1 + 2 + 3 + 5 + 5 + 5 + 6 + 6 + 6 + 7 + 7 +7 = 60

c) Ci t thut ton
Chng trnh tm cy khung nh nht theo thut ton PRIM cho th biu din
di dng danh sch trng s c th hin di y vi cc th tc:
Th tc Init(): c d liu biu din bng danh sch trng s.
Th tc Prim: Thut ton PRIM xy dng cy khung nh nht.
Th tc Result() : a ra tp cnh v di nh nht ca cy khung.
Chng trnh ci t thut ton Prim tm cy bao trm nh nht c thc hin
nh sau:

101

PT

IT

#include <stdio.h>
#include <conio.h>
#define
TRUE 1
#define FALSE
0
#define MAX 10000
int a[100][100];
int n,m, i,sc,w;
int chuaxet[100];
int cbt[100][3];
FILE *f;
void Init (void){
int p,i,j,k;
for(i=1; i<=n; i++)
for(j=1; j<=n;j++)
a[i][j]=0;
f=fopen("baotrum.in","r");
fscanf(f,"%d%d",&n,&m);
printf("\n So dinh: %3d ",n);
printf("\n So canh: %3d", m);
printf("\n Danh sach canh:");
for(p=1; p<=m; p++){
fscanf(f,"%d%d%d",&i,&j,&k);
printf("\n %3d%3d%3d", i, j, k);
a[i][j]=k; a[j][i]=k;
}
for (i=1; i<=n; i++){
printf("\n");
for (j=1; j<=n; j++){
if (i!=j && a[i][j]==0)
a[i][j]=MAX;
printf("%7d",a[i][j]);
}
}
fclose(f);getch();
}
void Result(void){
for(i=1;i<=sc; i++)
printf("\n %3d%3d", cbt[i][1], cbt[i][2]);
}
void PRIM(void){
int i,j,k,top,min,l,t,u;
int s[100];
102

IT

sc=0;w=0;u=1;
for(i=1; i<=n; i++)
chuaxet[i]=TRUE;
top=1;s[top]=u;
chuaxet[u]=FALSE;
while (sc<n-1) {
min=MAX;
for (i=1; i<=top; i++){
t=s[i];
for(j=1; j<=n; j++){
if (chuaxet[j] && min>a[t][j]){
min=a[t][j];
k=t;l=j;
}
}
}
sc++;w=w+min;
cbt[sc][1]=k;cbt[sc][2]=l;
chuaxet[l]=FALSE;a[k][l]=MAX;
a[l][k]=MAX;top++;s[top]=l;
printf("\n");
}

PT

}
void main(void){
Init();PRIM();Result();
}
5.5. Nhng ni dung cn ghi nh

Cy l th v hng lin thng khng c chu trnh. Do vy, mi th v


hng lin thng u c t nht mt cy khung ca n.
Hiu cch biu din v ci t c cc loi cy: cy nh phn tm kim, cy quyt
nh, cy m tin t v cy m Huffman.
Nm vng phng php xy dng cy khung ca th bng hai thut ton duyt
theo chiu rng v duyt theo chiu su.
Hiu v ci t c cc thut ton Kruskal v Prim tm cy bao trm nh nht.

103

BI TP

0
1
1
1
1
0
0
0
0
0
0
0
0

2. Cho th v hng c biu din di


dng ma trn k nh Hnh bn phi. Hy
thc hin:
a) Trnh by thut ton xy dng mt
cy khung ca th bt u ti nh
uV da vo thut ton DFS(u)?
b) Kim nghim thut ton DFS(u) bt
u ti nh u=1? Ch r kt qu trung
gian theo mi bc thc hin ca thut
ton.
c) Kim nghim thut ton DFS(u) bt
u ti nh u=7? Ch r kt qu trung
gian theo mi bc thc hin ca thut
ton.

0
1
1
1
1
0
0
0
0
0
0
0
0

1
0
1
1
0
0
0
0
0
0
0
0
0

1
1
0
1
0
0
0
0
0
0
0
0
0

1
1
1
0
0
0
0
0
0
0
0
0
0

1
0
0
0
0
1
1
1
1
0
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

PT

IT

1. Cho th v hng c biu din di


dng ma trn k nh Hnh bn phi. Hy
thc hin:
a) Trnh by thut ton xy dng mt
cy khung ca th bt u ti nh
uV da vo thut ton BFS(u)?
b) Kim nghim thut ton BFS(u) bt
u ti nh u=1? Ch r kt qu trung
gian theo mi bc thc hin ca thut
ton.
c) Kim nghim thut ton BFS(u) bt
u ti nh u=7? Ch r kt qu trung
gian theo mi bc thc hin ca thut
ton.

1
0
1
1
0
0
0
0
0
0
0
0
0

1
1
0
1
0
0
0
0
0
0
0
0
0

1
1
1
0
0
0
0
0
0
0
0
0
0

1
0
0
0
0
1
1
1
1
0
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
1
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
0
0
0
0

0
0
0
0
0
0
1
0
0
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

0
0
0
0
1
1
0
1
0
1
0
0
0

0
0
0
0
1
0
1
0
1
0
0
0
0

0
0
0
0
1
1
0
1
0
0
0
0
0

0
0
0
0
0
0
1
0
0
0
1
1
1

0
0
0
0
0
0
0
0
0
1
0
1
1

0
0
0
0
0
0
0
0
0
1
1
0
1

0
0
0
0
0
0
0
0
0
1
1
1
0

3. Cho th v hng c biu din di dng danh sch k nh di y


Ke(1) = { 2, 3, 4, 5 }.
Ke(5) = { 1, 6, 7, 8, 9 }. Ke(9) = { 5, 6, 8 }.
Ke(2) = { 1, 3, 4 }.
Ke(6) = { 5, 7, 9 }.
Ke(10) = { 7, 11, 12, 13 }.
Ke(3) = { 1, 2, 4 }.
Ke(7) = { 5, 6, 8, 10 }.
Ke(11) = { 10, 12, 13 }.
Ke(4) = { 1, 2, 3 }.
Ke(8) = { 5, 7, 9 }.
Ke(12) = { 10, 11, 13 }.
Ke(13) = { 10, 11, 12 }.
Hy thc hin:

104

IT

a) Trnh by thut ton xy dng cy khung ca th bt u ti nh u


da vo thut ton DFS?
b) Xy dng cy khung ca th bt u ti nh u=3? Ch r kt qu theo
mi bc thc hin ca thut ton?
c) Vit chng trnh xy dng cy khung ca th bt u ti nh uV?
4. Cho th v hng c biu din di dng danh sch k nh di y
Ke(1) = { 2, 3, 4, 5 }.
Ke(5) = { 1, 6, 7, 8, 9 }. Ke(9) = { 5, 6, 8 }.
Ke(2) = { 1, 3, 4 }.
Ke(6) = { 5, 7, 9 }.
Ke(10) = { 7, 11, 12, 13 }.
Ke(3) = { 1, 2, 4 }.
Ke(7) = { 5, 6, 8, 10 }.
Ke(11) = { 10, 12, 13 }.
Ke(4) = { 1, 2, 3 }.
Ke(8) = { 5, 7, 9 }.
Ke(12) = { 10, 11, 13 }.
Ke(13) = { 10, 11, 12 }.
Hy thc hin:
a) Trnh by thut ton xy dng cy khung ca th bt u ti nh u
da vo thut ton DFS?
b) Xy dng cy khung ca th bt u ti nh u=3? Ch r kt qu theo
mi bc thc hin ca thut ton?
c) Vit chng trnh xy dng cy khung ca th bt u ti nh uV?
5. Cho th v hng c trng s G
=<V,E> c biu din di dng ma trn
trng s nh hnh bn phi. Hy thc hin:
a) Trnh by thut ton Prim tm cy
khung nh nht trn th v hng c
trng s?
b) p dng thut ton, tm cy khung
nh nht ti nh s 1 ca th G, ch
r kt qu theo tng bc thc hin ca
thut ton?
c) Vit chng trnh tm cy khung nh
nht ca th bng thut ton PRIM?

6. Cho th v hng c trng s G


=<V,E> c biu din di dng ma trn
trng s nh hnh bn phi. Hy thc hin:
a) Trnh by thut ton Kruskal tm cy
khung nh nht trn th v hng c
trng s?
b) p dng thut ton, tm cy khung
nh nht ca th G, ch r kt qu
theo tng bc thc hin ca thut
ton?
c) Vit chng trnh tm cy khung nh
nht ca th bng thut ton Kruskal?

PT
105

CHNG 6. BI TON TM NG I NGN NHT

Trong chng ny chng ta s cp n bi ton tm ng i ngn nht trn


th. y l mt trong nhng bi ton c ngha v l thuyt v thc t. Bn c c th
tm hiu thm v phng php chng minh tnh ng n cng nh phc tp ca cc
thut ton thng qua ti liu [1, 2].
6.1. Pht biu bi ton
Xt th G=<V, E>; trong | V| = n, | E | = m. Vi mi cnh (u, v)E, ta t
tng ng vi n mt s thc A[u][v] c gi l trng s ca cnh. Ta s t A[u,v]=
p
nu (u, v)E. Nu dy v0, v1, . . . , vk l mt ng i trn G th i 1 A[vi 1 , v i ] c gi
l di ca ng i.

PT

IT

Bi ton tm ng i ngn nht trn th di dng tng qut c th c pht


biu di dng sau: tm ng i ngn nht t mt nh xut pht sV (nh ngun) n
nh cui tV (nh ch). ng i nh vy c gi l ng i ngn nht t s n t,
di ca ng i d(s,t) c gi l khong cch ngn nht t s n t (trong trng hp
tng qut d(s,t) c th m). Nu nh khng tn ti ng i t s n t th di ng i
d(s,t)=. Di y l mt s th hin c th ca bi ton.
Trng hp 1. Nu s c nh v t thay i, khi bi ton c pht biu di
dng tm ng i ngn nht t s n tt c cc nh cn li trn th. i vi th c
trng s khng m, bi ton lun c li gii bng thut ton Dijkstra. i vi th c
trng s m nhng khng tn ti chu trnh m, bi ton c li gii bng thut ton
Bellman-Ford. Trong trng hp th c chu trnh m, bi ton khng c li gii.
Trng hp 2. Nu s thay i v t cng thay i, khi bi ton c pht biu
di dng tm ng i ngn nht gia tt c cc cp nh ca th. Bi ton lun c li
gii trn th khng c chu trnh m. i vi th c trng s khng m, bi ton
c gii quyt bng cch thc hin lp li n ln thut ton Dijkstra. i vi th khng
c chu trnh m, bi ton c th gii quyt bng thut ton Floyed.
Cc thut ton c th gii quyt bi ton tm ng i ngn nht c thc hin
nh di y.
6.2. Thut ton Dijkstra
Thut ton tm ng i ngn nht t nh s n cc nh cn li c Dijkstra
ngh p dng cho trng hp th c hng vi trng s khng m. Thut ton c
thc hin trn c s gn tm thi cho cc nh. Nhn ca mi nh cho bit cn trn ca
di ng i ngn nht ti nh . Cc nhn ny s c bin i (tnh li) nh mt

106

th tc lp, m mi bc lp mt s nh s c nhn khng thay i, nhn chnh l


di ng i ngn nht t s n nh .
6.2.1. M t thut ton
Thut ton Dijkstra tm ng i ngn nht t s n tt c cc nh cn li ca
th c m t chi tit trong Hnh 6.1.

PT

IT

Thut ton Dijkstra (s): //s V l mt nh bt k ca G = <V,E>


Begin
Bc 1 (Khi to):
d[s]=0; //Gn nhn ca nh s l 0
T = V\{s}; // T l tp nh c nhn tm thi
for each v V do { //S dng s gn nhn cho cc nh cn li
d[v] = A[s,v];
truoc[v]=s;
endfor;
Bc 2 (Lp):
while (T ) do {
Tm nh uT sao cho d[u] = min { d[z] | zT};
T= T\{u}; //c nh nhn nh u
for each v T do { //S dng u, gn nhn la cho cc nh
if ( d[v] > d[u] + A[u, v] ) then {
d[v] = d[u] + A[u, v]; //Gn li nhn cho nh v;
truoc[v] = u;
endif;
endfor;
endwhlie;
Bc 3 (Tr li kt qu):
Return (d[s], truoc[s]);
End.

Hnh 6.1. Thut ton Dijkstra.


6.2.2. Kim nghim thut ton
u vo ca thut ton :

d (u , v) if (u , v) E
- Ma trn trng s khng m A[u , v]
if (u , v ) E
- s l nh bt k ca th.

107

V d ta cn kim nghim thut ton cho th c biu din di dng ma trn


trng s di y. Khi , cc bc thc hin theo thut ton Dijkstra ti nh s =1 c
th hin nh Bng 6.1.
2

8
2

9
1

9
2

IT

2
9

Bng 6.1. Cc bc thc hin thut ton Dijkstra ti s =1


nh 1

nh 2

nh 3

nh 4

nh 5

<0,1>

<2,1>

<8,1>

<,1>

<,1>

<2,1>

<4,2>

<,1>

<4,2>

nh 6

nh 7

nh 8

nh 9

nh
10

nh 11

nh
12

nh 13

<,1>

<,1>

<,1>

<,1>

<,1>

<,1>

<,1>

<,1>

PT

Bc

<,1>

<,1>

<11,2>

<,1>

<,1>

<,1>

<,1>

<,1>

<,1>

<10,3>

<,1>

<12,3>

<5,3>

<,1>

<,1>

<,1>

<,1>

<,1>

<,1>

<10,3>

<,1>

<7, 7>

<5,3>

<7, 7>

<,1>

<,1>

<,1>

<,1>

<,1>

<10,3>

<8,6>

<7, 7>

<7,7>

<15,6>

<,1>

<,1>

<,1>

<,1>

<10,3>

<8,6>

<7,7>

<15,6>

<,1>

<,1>

<9,8>

<,1>

<10,3>

<8,6>

<15,6>

<,1>

<,1>

<9,8>

<,1>

<10,3>

<15,6>

<,1>

<,1>

<9,8>

<11,12>

<10,3>

<15,6>

<,1>

<,1>

<11,12>

10

<15,6>

<,1>

<18,13>

<11,12>

11

<15,6>

<21,9>

<18,13>

12

<21,9>

<18,13>

13

<21,9>

Kt qu :
ng i ngn nht t nh 1 n nh 2: 2. ng i: 1-2.
ng i ngn nht t nh 1 n nh 3: 4. ng i: 1-2-3.
ng i ngn nht t nh 1 n nh 4: 10. ng i: 1-2-3-10.
ng i ngn nht t nh 1 n nh 5: 8. ng i: 1-2-3-7-6-5.

108

ng i ngn nht t nh 1 n nh 6: 7. ng i: 1-2-3-7-6.


ng i ngn nht t nh 1 n nh 7: 5. ng i: 1-2-3-7.
ng i ngn nht t nh 1 n nh 8: 7. ng i: 1-2-3-7-8.
ng i ngn nht t nh 1 n nh 9: 15. ng i: 1-2-3-7-6-9.
ng i ngn nht t nh 1 n nh 10: 21. ng i: 1-2-3-7-6-9-10.
ng i ngn nht t nh 1 n nh 11: 18. ng i: 1-2-3-7-8-12-13-11.
ng i ngn nht t nh 1 n nh 12: 18. ng i: 1-2-3-7-8-12.
ng i ngn nht t nh 1 n nh 13: 11. ng i: 1-2-3-7-8-12-13.
6.2.3. Ci t thut ton

PT

IT

Chng trnh ci t thut ton Dijkstra tm ng i ngn nht t mt nh n


tt c cc nh khc ca th c hng vi trng s khng m c thc hin nh sau:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 50
#define
TRUE 1
#define FALSE
0
int n, s, t;
char chon;
int truoc[MAX], d[MAX], CP[MAX][MAX];
int
final[MAX];
void Init(void){
FILE * fp;int i, j;
fp = fopen(ijk1.in,r);
fscanf(fp,%d, &n);
printf(\n So dinh :%d,n);
printf(\n Ma tran khoang cach:);
for(i=1; i<=n;i++){
printf(\n);
for(j=1; j<=n;j++){
fscanf(fp, %d, &CP[i][j]);
printf(%3d,CP[i][j]);
if(CP[i][j]==0) CP[i][j]=32000;
}
}
fclose(fp);
}
109

PT

IT

void Result(void){
int i,j;
printf(\n Duong di ngan nhat tu %d den %d la\n, s,t);
printf(%d<=,t);
i=truoc[t];
while(i!=s){
printf(%d<=,i);
i=truoc[i];
}
printf(%d,s);
printf(\n Do dai duong di la:%d, d[t]);
getch();
}
void Dijkstra(void){
int v, u, minp;
printf(\n Tim duong di tu s=);scanf(%d, &s);
printf( den );scanf(%d, &t);
for(v=1; v<=n; v++){
d[v]=CP[s][v];
truoc[v]=s;
final[v]=FALSE;
}
truoc[s]=0; d[s]=0;final[s]=TRUE;
while(!final[t]) {
minp=2000;
for(v=1; v<=n; v++){
if((!final[v]) && (minp>d[v]) ){
u=v;
minp=d[v];
}
}
final[u]=TRUE;// u- la dinh co nhan tam thoi nho nhat
if(!final[t]){
for(v=1; v<=n; v++){
if ((!final[v]) && (d[u]+ CP[u][v]< d[v])){
d[v]=d[u]+CP[u][v];
truoc[v]=u;
}
}
}
}
}
110

void main(void){
clrscr();Init();
Result(); getch();
}

Dijkstra();

6.3.Thut ton Bellman-Ford


Thut ton Bellman-Ford dng tm ng i ngn nht trn th khng c chu
trnh m. Do vy, trc khi thc hin thut ton Bellman-Ford ta cn kim tra th c
chu trnh m hay khng. Trong trng hp th c chu trnh m, bi ton s khng c
li gii.
6.3.1. M t thut ton
Thut ton c thc hin theo k = n - 2 vng lp (n l s nh ca th) chi tit
trong Hnh 6.2.

PT

IT

Thut ton Bellman-Ford (s): //s V l nh bt k ca th


Begin:
Bc 1 (Khi to):
for vV do { //S dng s gn nhn cho cc nh vV
D[v] = A[s][v];
Truoc[v] = s;
}
Bc 2 (Lp) :
D[s] = 0; K=1;
while (K<=N-2 ) { //N-2 vng lp
for vV\{s} do { //Ly mi nh vV\s
for uV do { //Gn nhn cho v
if (D[v] > D[u] + A[u][v] ) {
D[v]= D[u] + A[u][v];
Truoc[v] = u;
endif;
endfor;
endfor;
endwlie;
Bc 3 (Tr li kt qu):
Return( D[v], Truoc[v]: vU);
End.
Hnh 6.2. Thut ton Bellman-Ford.

111

6.3.2. Kim nghim thut ton


V d ta cn kim nghim thut ton Bellman-Ford cho th c biu din di
dng ma trn trng s sau:

1 5

PT

IT

Khi , kt qu thc hin theo thut ton ta c kt qu sau:


Vng lp K=1:
v=2; D[2] = 1
D[1] + A[1, 2] = 0+1 (Khng nh hn 1)
D[2] + A[2, 2] = 1 + >1
D[3] + A[3, 2] = + >1
D[4] + A[4, 2] = + >1
D[5] + A[5, 2] = + >1
v=3; D[3] =
D[1] + A[1,3] = 0+
D[2] + A[2, 3] = 1 + 3 = 4< (Thay D[3] = 4, Truoc[3] = 2)
D[3] + A[3, 3] = 4 + >4
D[4] + A[4, 3] = + 2>4
D[5] + A[5, 3] = + >4
v=4; D[4] =
D[1] + A[1,4] = 0+
D[2] + A[2, 4] = 1 + 3 = 4< (Thay D[4] = 4, Truoc[4] = 2)
D[3] + A[3, 4] = 4 + 1=5>4
D[4] + A[4, 4] = 4 + >4
D[5] + A[5, 4] = + 4>4
v=5; D[5] = 3
D[1] + A[1,5] = 0+3 (Khng nh hn 3)
D[2] + A[2, 5] = 1 + 8 = 9>3
D[3] + A[3, 5] = 4 -5=-1<3 (Thay D[5] = -1, Truoc[5] =3)
D[4] + A[4, 5] = 4 + >-1
D[5] + A[5, 5] = -1 + >-1

112

PT

IT

Vng lp K=2:
v=2; D[2] = 1
D[1] + A[1, 2] = 0+1 (Khng nh hn 1)
D[2] + A[2, 2] = 1 + >1
D[3] + A[3, 2] = 4 + >1
D[4] + A[4, 2] = 4 + >1
D[5] + A[5, 2] = -1 + >1
v=3; D[3] = 4
D[1] + A[1, 3] = 0+>4
D[2] + A[2, 3] = 1 + 3 =4 (Khng nh hn 4)
D[3] + A[3, 3] = 4 + >4
D[4] + A[4, 3] = 4 + 2>4
D[5] + A[5, 3] = -1 + >4
v=4; D[4] = 4
D[1] + A[1, 4] = 0+>4
D[2] + A[2, 4] = 1 + 3 =4 (Khng nh hn 4)
D[3] + A[3, 4] = 4 + 1>4
D[4] + A[4, 4] = 4 + >4
D[5] + A[5, 4] = -1 + 4=3< 4 (Thay D[4] = 5, Truoc[4] = 5
v=5; D[5] = -1
D[1] + A[1, 5] = 0+>-1
D[2] + A[2, 5] = 1 + 3 =-1
D[3] + A[3, 5] = 4 + 1>-1
D[4] + A[4, 5] = 3 + >-1
D[5] + A[5, 5] = -1 + >-1
Vng lp K=3:
v=2; D[2] = 1
D[1] + A[1, 2] = 0+1 (Khng nh hn 1)
D[2] + A[2, 2] = 1 + >1
D[3] + A[3, 2] = 4 + >1
D[4] + A[4, 2] = 3 + >1
D[5] + A[5, 2] = -1 + >1
v=3; D[3] = 4
D[1] + A[1, 3] = 0+>4
D[2] + A[2, 3] = 1 + 3 =4 (Khng nh hn 4)
D[3] + A[3, 3] = 4 + >4
D[4] + A[4, 3] = 3 + 2>4
D[5] + A[5, 3] = -1 + >4
v=4; D[4] = 3
D[1] + A[1, 4] = 0+>3
D[2] + A[2, 4] = 1 + 3 =3
113

D[3] + A[3, 4] = 4 + 1>3


D[4] + A[4, 4] = 3 + >3
D[5] + A[5, 4] = -1 + 4=3(Khng nh hn 3)
v=5; D[5] = -1
D[1] + A[1, 5] = 0+>-1
D[2] + A[2, 5] = 1 + 3 =-1
D[3] + A[3, 5] = 4 + 1>-1
D[4] + A[4, 5] = 3 + >-1
D[5] + A[5, 5] = -1 + >-1
Kt qu cui cng ta nhn c Bng 6.2 di y.
Bng 6.2. Kt qu kim nghim theo thut ton Bellman-Ford

1
2
3

D[1], Truoc[1] D[2], Truoc[2] D[3], Truoc[3] D[4], Truoc[4] D[5], Truoc[5]
<0,1>
<1,1>
<3,1>
<,1>
<,1>
<0,1>
<1,1>
<4,2>
<4,2>
<-1,3>
<0,1>
<1,1>
<4,2>
<3,5>
<-1,3>
<0,1>
<1,1>
<4,2>
<3,5>
<-1,3>

6.3.3. Ci t thut ton

IT

K=?

PT

Chng trnh ci t thut ton Bellman-Ford tm ng i ngn nht t mt nh


n tt c cc nh khc ca th c hng, khng c chu trnh m c thc hin nh
sau:
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define MAX 100
#define MAXC 10000
int C[MAX][MAX]; //Ma tran trong so bieu dien do thi
int D[MAX];
//Do dai duong di
int Trace[MAX];
//Luu lai vet duong di
int n, m, S, F;
// n:So dinh; S: Dinh bat dau; F:
Dinh ket thuc
FILE *fp;
void Read_Data(void){
int i, u, v;fp = fopen("dothi.in","r");
fscanf(fp,"%d%d%d%d",&n,&m,&S,&F);
for(u=1; u<=n; u++)
for(v=1; v<=n; v++)

114

if (u==v) C[u][v]=0;
else C[u][v]=MAXC;
for(i=1; i<=m; i++)
fscanf(fp,"%d%d%d",&u,&v,&C[u][v]);
fclose(fp);

PT

IT

}
void Init(void){
int i;
for( i=1; i<=n; i++){
D[i] = C[S][i];
Trace[i]=S;
}
}
void Result(void){
if (D[F]==MAXC) printf("\n Khong co duong di");
else {
printf("\n Do dai %d den %d: %d", S, F, D[F]);
while (F!=S ){
printf("%d <--",F);
F = Trace[F];
}
}
}
void Ford_Bellman(void){
int k, u, v;D[S]=0;
for( k=1; k<=n-2; k++){
for(v=1; v<=n; v++){
// if (v!=S ){
for( u=1; u<=n; u++){
if (D[v]>D[u]+C[u][v]){
D[v] = D[u]+C[u][v];
Trace[u]=v;
}
}
// }
}
}
}
int main()
{
Read_Data();Init();
Ford_Bellman(); Result();
system("PAUSE");
return 0;
115

}
6.4.Thut ton Floy
tm ng i ngn nht gia tt c cc cp nh ca th, chng ta c th s
dng n ln thut ton Ford_Bellman hoc Dijkstra (trong trng hp trng s khng m).
Tuy nhin, trong c hai thut ton c s dng u c phc tp tnh ton ln (ch t l
O(n3)). Trong trng hp tng qut, ngi ta thng dng thut ton Floy.
6.4.1. M t thut ton
Thut ton Floy c m t chi tit trong Hnh 6.3.

PT

IT

Thut ton Floy:


Begin:
Bc 1 (Khi to):
for (i=1; i n; i++) {
for (j =1; j n; j++) {
d[i,j] = a[i, j];
p[i,j] = i;
}
}
Bc 2 (lp) :
for (k=1; k n; k++) {
for (i=1; i n; i++){
for (j =1; j n; j++) {
if (d[i,j] > d[i, k] + d[k, j]) {
d[i, j] = d[i, k] + d[k, j];
p[i,j] = p[k, j];
}
}
}
}
}
Bc 3 (Tr li kt qu):
Return (p([i,j], d[i,j]: i, jV);

Hnh 6.3. Thut ton Floy.

116

6.4.2. Ci t thut ton

PT

IT

Chng trnh ci t thut ton Foly tm ng i ngn nht gia tt c cc cp nh ca


th c th hin nh sau:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define MAX 10000
#define
TRUE 1
#define FALSE
0
int A[50][50], D[50][50], S[50][50];
int n, u, v, k;FILE *fp;
void Init(void){
int i, j, k;
fp=fopen(FLOY.IN,r);
if(fp==NULL){
printf(\n Khong co file input);
getch(); return;
}
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
A[i][j]=0;
fscanf(fp,%d%d%d,&n,&u,&v);
printf(\n So dinh do thi:%d,n);
printf(\n Di tu dinh:%d den dinh %d:,u,v);
printf(\n Ma tran trong so:);
for(i=1; i<=n; i++){
printf(\n);
for(j=1; j<=n; j++){
fscanf(fp,%d, &A[i][j]);
printf(%5d,A[i][j]);
if(i!=j && A[i][j]==0)
A[i][j]=MAX;
}
}
fclose(fp);getch();
}
void Result(void){
if(D[u][v]>=MAX) {
printf(\n Khong co duong di);
getch(); return;
117

}
else {
printf(\n Duong di ngan nhat:%d, D[u][v]);
printf(\n Dinh %3d, u);
while(u!=v) {
printf(%3d,S[u][v]);
u=S[u][v];
}
}

PT

IT

}
void Floy(void){
int i, j,k, found;
for(i=1; i<=n; i++){
for(j=1; j<=n;j++){
D[i][j]=A[i][j];
if (D[i][j]==MAX) S[i][j]=0;
else S[i][j]=j;
}
}
/* Mang D[i,j] la mang chua cac gia tri khoan cach ngan nhat tu i den j
Mang S la mang chua gia tri phan tu ngay sau cua i tren duong di
ngan nhat tu i->j */
for (k=1; k<=n; k++){
for (i=1; i<=n; i++){
for (j=1; j<=n; j++){
if (D[i][k]!=MAX && D[i][j]>(D[i][k]+D[k][j]) ){
// Tim D[i,j] nho nhat co the co
D[i][j]=D[i][k]+D[k][j];
S[i][j]=S[i][k];
//ung voi no la gia tri cua phan tu ngay sau i
}
}
}
}
}
void main(void){
clrscr();Init();
Floy();Result();
}

118

6.5. Nhng ni dung cn ghi nh

IT

Hiu bi ton tm ng i ngn nht v cc dng c th ca bi ton.


Hiu thut ton, kim nghim thut ton v ci t c thut ton Dijkstra.
Hiu thut ton, kim nghim thut ton v ci t c thut ton Bellman-Ford.
Hiu thut ton, kim nghim thut ton v ci t c thut ton Floy.

PT

119

BI TP

1. Cho th gm 7 nh cho bi ma trn trng s


00 11 65 17 65 65 65
65 00 12 65 65 10 16
65 65 00 13 14 65 19
65 65 65 00 65 65 18
65 65 65 65 00 65 15
65 13 18 65 65 00 10
65 65 65 65 65 65 00

IT

Tm ng i ngn nht t nh 1 n nh 7. Yu cu ch r nhng kt qu trung gian


trong qu trnh thc hin thut ton.

PT

2. Cho C s d liu ghi li thng tin v N Tuyn bay (N<=100) ca mt hng hng
khng. Trong , thng tin v mi tuyn bay c m t bi: im khi hnh
(departure), im n (destination), khong cch (lenght). Departure, destination l mt
xu k t di khng qu 32, khng cha du trng gia, Length l mt s nh hn
32767.
Ta gi Hnh trnh bay t im khi hnh A ti im n B l dy cc hnh trnh [A,
A1, n1], [A1, A2, n2] . . .[Ak, B,nk] vi Ai l im n ca tuyn i nhng li l im khi
hnh ca tuyn i +1, ni l khong cch ca tuyn bay th i (1<=i<k). Trong , khong
cch ca hnh trnh l tng khong cch ca cc tuyn m hnh trnh i qua (n1+n2+.
.+nk).
Cho file d liu kiu text hanhtrinh.in c ghi theo tng dng, s cc dng trong file d
liu khng vt qu N, trn mi dng ghi li thng tin v mt tuyn bay, trong
departure, destination, length c phn bit vi nhau bi mt hoc vi du trng. Hy
tm gii php tho mn nhu cu ca khch hng i t A n B theo mt s tnh hung
sau:
Tm hnh trnh c khong cch b nht t A n B. In ra mn hnh tng im m hnh
trnh qua v khong cch ca hnh trnh. Nu hnh trnh khng tn ti hy a ra
thng bo Hnh trnh khng tn ti.
V d v C s d liu hanhtrinh.in
New_York

Chicago

Chicago

Denver

New_York

Toronto

New_York

Denver
120

1000
1000
800
1900

Toronto

Calgary

1500

Toronto

Los_Angeles 1800

Toronto

Chicago

500

Denver

Urbana

Denver

Houston

Houston

1000
1500

Los_Angeles 1500

Denver

Los_Angeles 1000

Vi im i : New_York, im n : Los_Angeles ; chng ta s c kt qu


sau:
Hnh trnh ngn nht:
New_York to Toronto to Los_Angeles; Khong cch: 2600.

PT

IT

3. K tc thnh cng vi khi lp phng thn b, Rubik sng to ra dng phng ca tr


chi ny gi l tr chi cc vung thn b. l mt bng gm 8 vung bng nhau
nh hnh 1. Chng ta qui nh trn mi vung c mt mu khc nhau. Cc mu c k
hiu bi 8 s nguyn tng ng vi tm mu c bn ca mn hnh EGA, VGA nh hnh
1. Trng thi ca bng cc mu c cho bi dy k hiu mu cc c vit ln lt
theo chiu kim ng h bt u t gc trn bn tri v kt thc gc di bn tri. V
d: trng thi trong hnh 1 c cho bi dy cc mu tng ng vi dy s (1, 2, 3, 4, 5 ,
6, 7, 8). Trng thi ny c gi l trng thi khi u.
Bit rng ch cn s dng 3 php bin i c bn c tn l A, B, C di y bao
gi cng chuyn c t trng thi khi u v trng thi bt k:
A : i ch dng trn xung dng di. V d sau php bin i A, hnh 1 s tr
thnh hnh 2:
B : thc hin mt php hon v vng quanh t tri sang phi trn tng dng. V
d sau php bin i B hnh 1 s tr thnh hnh 3:
C : quay theo chiu kim ng h bn gia. V d sau php bin i C hnh 1
tr thnh hnh 4:
Hnh 1

Hnh 2

8
1

7
2

Hnh 3
6
3

5
4

4
5

1
8

Hnh 4
2
7

3
6

1
8

7
6

2
3

4
5

Cho file d liu Input.txt ghi li 8 s nguyn trn mt dng, mi s c phn bit
vi nhau bi mt du trng ghi li trng thi ch. Hy tm dy cc php bin i s bn
a trng thi khi u v trng thi ch sao cho s cc php bin i l t nht c th
c.
121

D liu ra c ghi li trong file Output.txt, dng u tin ghi li s cc php bin
i, nhng dng tip theo ghi li tn ca cc thao tc c bn thc hin, mi thao tc c
bn c vit trn mt dng.
Bn s c thm 20 im nu s dng bng mu thch hp ca mn hnh m
t li cc php bin i trng thi ca tr chi. V d vi trng thi ch di y s cho
ta kt qu nh sau:
Input.txt

Output.txt

2 6 8 4 5 7 3 1

7
B
C
A
B
C

IT

C
B

PT

4. Cho mt mng thng tin gm N nt. Trong , ng truyn tin hai chiu trc tip t
nt i n nt j c chi ph truyn thng tng ng l mt s nguyn A[i,j] = A[j,i], vi
A[i,j]>=0, i j. Nu ng truyn tin t nt i1 n nt ik phi thng qua cc nt i2, . . ik-1
th chi ph truyn thng c tnh bng tng cc chi ph truyn thng A[i1,i2], A[i2,i3], . . .
A[ik-1,ik]. Cho trc hai nt i v j. Hy tm mt ng truyn tin t nt i n nt j sao cho
chi ph truyn thng l thp nht.
D liu vo c cho bi file TEXT c tn INP.NN. Trong , dng th nht ghi ba s
N, i, j, dng th k + 1 ghi k-1 s A[k,1], A[k,2], . . , A[k,k-1], 1<=k<=N.
Kt qu thng bo ra file TEXT c tn OUT.NN. Trong , dng th nht ghi chi ph
truyn thng thp nht t nt i n nt j, dng th 2 ghi ln lt cc nt trn ng
truyn tin c chi ph truyn thng thp nht t nt i ti nt j.
5. Cho mt mng thng tin gm N nt. Trong , ng truyn tin hai chiu trc tip t
nt i n nt j c chi ph truyn thng tng ng l mt s nguyn A[i,j] = A[j,i], vi
A[i,j]>=0, i j. Nu ng truyn tin t nt i1 n nt ik phi thng qua cc nt i2, . . ik-1
th chi ph truyn thng c tnh bng tng cc chi ph truyn thng A[i1,i2], A[i2,i3], . . .
A[ik-1,ik]. Bit rng, gia hai nt bt k ca mng thng tin u tn ti t nht mt ng
truyn tin.
tit kim ng truyn, ngi ta tm cch loi b i mt s ng truyn tin m vn
m bo c tnh lin thng ca mng. Hy tm mt phng n loi b i nhng ng
truyn tin, sao cho ta nhn c mt mng lin thng c chi ph ti thiu nht c th
c.

122

D liu vo c cho bi file TEXT c tn INP.NN. Trong , dng th nht ghi s N,


dng th k + 1 ghi k-1 s A[k,1], A[k,2], . . , A[k,k-1], 1<=k<=N.
Kt qu thng bo ra file TEXT c tn OUT.NN trong dng th nht ghi chi ph
truyn thng nh nht trong ton mng. T dng th 2 ghi ln lt cc nt trn ng
truyn tin, mi ng truyn ghi trn mt dng.
5. Cho th c hng c trng s c biu din di dng ma trn trng s nh di
y. Hy thc hin:
a) Trnh by thut ton Dijkstra tm ng i ngn nht t nh sV n cc nh
cn li ca th?
b) Tm ng i ngn nht t nh 1 n tt c cc nh cn li ca th? Ch r
kt qu theo mi bc thc hin ca thut ton?
c) Tm ng i ngn nht t nh 5 n tt c cc nh cn li ca th? Ch r
kt qu theo mi bc thc hin ca thut ton?

IT

d) Vit chng trnh tm ng i ngn nht t nh s n tt c cc nh cn li


ca th?
2

8
2

PT

9
1

9
2

2
9

6. Cho th c hng c trng s c biu din di dng ma trn trng s nh di


y. Hy thc hin:
a) Trnh by thut ton Bellman-Ford tm ng i ngn nht t nh sV n cc
nh cn li ca th?
b) Tm ng i ngn nht t nh 1 n tt c cc nh cn li ca th? Ch r
kt qu theo mi bc thc hin ca thut ton?
c) Tm ng i ngn nht t nh 5 n tt c cc nh cn li ca th? Ch r
kt qu theo mi bc thc hin ca thut ton?

123

d) Vit chng trnh tm ng i ngn nht t nh s n tt c cc nh cn li ca


th?
7

4
-4
-8

-2

-3

-4
3

2
-7
-3

PT

IT

124

You might also like