You are on page 1of 63

Gio n mn: L Thuyt Th

GIO N
MN L THUYT THN
S tit hc: 60 tit ( 45 tit l thuyt + 15 tit thc hnh)
Ti liu tham kho:
1) Ton ri rc, PGS. TS c Gio, Nh xut bn i hc Quc gia H Ni 2002
2) Ton ri rc, Nguyn c Ngha, Nguyn T Thnh, Nh xut bn i hc Quc gia H Ni
2003
3) Gio trnh L thuyt th, Nguyn Thanh Hng, Nguyn c Ngha
4) Ton hc ri rc ng dng trong tin hc, Dch t Discrete Mathematics and Its Applications,
Nh xut bn khoa hc k thut
Chng 1

CC KHI NIM C BN CA L THUYT THN


(9 tit)

1.1 Gii thiu


L thuyt th l nghnh khoa hc c t lu nhng li c rt nhiu ng dng hin i. Nhng
tng c s ban u ca n c a ra t nhng nm u th k 18 bi nh ton hc ngi Thu
S l Leonhard Euler.
L thuyt th c dng gii quyt cc bi ton thuc nhiu lnh vc khc nhau. Chng
hn: Dng m hnh th xc nh xem hai my tnh trong mt mng my tnh c trao i thng
tin c vi nhau hay khng?. th vi cc trng s c gn cho cc cnh c th dng gii
quyt bi ton tm ng i ngn nht gia hai thnh ph trong mt mng li giao thng. Chng ta
cng c th phn bit cc hp cht ho hc c cng cng thc phn t nhng c cu trc khc nhau
nh vo th...

1.2 Cc nh ngha v tnh cht c bn


nh ngha 1:
Gi s V l mt tp khc rng cc phn t no v E VxV (E l tp con ca tch cc
VxV). B G = (V, E) c gi l mt th.
Mi phn t v V c gi l mt nh ca th, V c gi l tp cc nh ca th.
Mi phn t e = (u, v) E c gi l mt cnh ca th, E c gi l tp cc cnh ca th.
V d 1:
G = (V = {v1, v2, v3, v4,...}, E = {e1 = (v1,v2), e2 = (v1,v3), e3 = (v2,v3), e4 = (v3,v4),... })
v2
e1
v1

e3
v3

e2
e4

v4
....
Nh vy ta c th hnh dung th l mt cu trc ri rc gm cc nh v cc cnh ni cc nh
ny vi nhau.
1

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Ch :
Nu tp V l tp hu hn cc phn t th G = (V,E) c gi l th hu hn. T y v sau ch
yu ta nghin cu cc th hu hn. (c th coi y l mt nh ngha v th)
V d 2:
G = (V={Thanh ho, Ngh an, H ni, TP.HCM},E={(Thanh ho,Ngh an),(Thanh ho, H ni),
(Ngh an, H ni), (H ni, TP.HCM) })
Thanh ho

Ngh an
H ni

TP.HCM
nh ngha 2:
a) Hai nh c gi l k nhau nu c cnh ni hai nh vi nhau. Cnh ni hai nh c gi
l cnh lin thuc.
b) Hai cnh c gi l k nhau nu gia chng c nh chung.
c) Nu e = (v,v) l mt cnh ca th th e c gi l mt khuyn. Trong trng hp ny th
c gi l gi th.
V d 3:

v1

v2
e1

v3
e2

e3

v1 v v2 c gi l hai nh k nhau, e1 c gi l cnh lin thuc hai nh v1 v v2.


e1 v e2 c gi l hai cnh k nhau, e3 c gi l mt khuyn.
nh ngha 3:
a) Nu mi cnh e = (u , v) E l khng phn bit th t ca cc nh u v v, (tc l t u ti v
khng k hng) th ta ni th G = (V,E) l th v hng.
b) Nu mi cnh e = (u , v) E c phn bit th t ca cc nh u v v, (tc l t u ti v khc vi
t v ti u) th ta ni th G = (V,E) l th c hng. Cnh ca th c hng cn c gi l
cung.
Ty h
V d 4:
v1

v2

CVTh l

H gm

v3
TTCPQG

th v hng

th c hng
2

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

nh ngha 4:
th G =(V,E) c gi l n th nu gia hai nh bt k ca th c ni vi nhau bi
khng qu mt cnh (cung).
V d 5:

nh ngha 5:
th G = (V,E) c gi l a th nu c t nht mt cp nh c ni vi nhau bi hai cnh
(hai cung) tr ln.
V d 6:

nh ngha 6:
th G = (V,E) c gi l th phng nu n c dng biu din hnh hc trn mt phng m
cc cnh (cung) ch ct nhau nh. Cch v nh vy c gi l biu din phng ca th. Trong
trng hp ngc li th l khng phng.
V d 7:

th phng

th khng phng

Biu din phng ca mt th chia mt phng thnh cc min. V d biu din phng ca th
di y chia mt phng thnh 5 min.
R2

R3

R1

R5
R1

nh ngha 7:
th G = (V,E) c gi l th y nu mi cp nh u c cnh (cung) ni gia chng.
V d 8:

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

nh ngha 8:
Cho th v hng G = (V,E). Vi v V l mt nh ca th, ta k hiu deg(v) l s cc cnh
thuc nh v, ring vi khuyn th c tnh l 2. deg(v) c gi l bc ca nh v.
Nu deg(v) = 0 th v c gi l nh c lp, nu deg(v) = 1 th v c gi l nh treo.
Bc ca th v hng G = (V,E) c k hiu l deg(G) v c tnh deg(G) = deg(v)
vV

V d 9:

v1

v2

v3

v4

v5

Vi th trn ta c:
deg(v5) = 0, v5 c gi l nh c lp
deg(v4) = 1, v4 c gi l nh treo
deg(v3) = 4, deg(v2) = 3, deg(v1) = 2
nh ngha 9:

Cho th c hng G = (V,E). Vi v V l mt nh ca th, ta k hiu deg-(v) l s cc


cung vo ca nh v, deg+(v) l s cc cung ra ca nh v. Khi deg-(v) c gi l bc vo ca
nh v, deg+(v) c gi l bc ra ca nh v v bc ca nh v l deg(v) = deg-(v) + deg+(v).
Nu deg+(v) = deg-(v) = 0 th v c gi l nh c lp, nu deg+(v) = 0, deg-(v) = 1 hoc deg+(v)
= 1, deg-(v) = 0 th v c gi l nh treo.
Bc ca th c hng G = (V,E) c k hiu l deg(G) v c tnh deg(G) =
deg (v) + deg + (v)
vV

vV

V d 10:

v1

v6

v2

v3

v5

v4

Vi th trn ta c:
deg-(v1) = 2, deg+(v1) = 5
deg-(v2) = 2, deg+(v2) = 1
deg-(v3) = 1, deg+(v3) = 0, nh v3 c gi l nh treo
deg-(v4) = deg+(v4) = 0, nh v4 c gi l nh c lp
deg-(v5) = 3, deg+(v5) = 0
deg-(v6) = 1, deg+(v6) = 3
nh l 1:

Gi s G = (V,E) l th hu hn. Khi bc ca th G bng hai ln s cnh ca th, tc


l deg(G) = 2|E|
Chng minh:
4

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Gi s u,v V v e = (u,v) E
Nhn xt: Gi s u v. Khi nu xo cnh (cung) e th bc ca th s gim i 2. Nu ta xo tt
c cc cnh c dng nh trn th th cn li ch gm cc nh c lp hoc cc nh c khuyn.
Ti mi n u c khuyn, nu ta xo khuyn th bc ca th cng s gim i 2. Nh vy nu ta
xo mt cnh hoc mt khuyn th bc ca th gim i 2 v sau khi xo ht tt c cc cnh v cc
khuyn ca th th bc ca th cn li l bng 0.
T nhn xt trn, hin nhin ta c ng thc deg(G) = 2|E| (pcm)
nh l 2:

Gi s G = (V,E) l th hu hn. Khi s cc nh bc l ca th l mt s chn.


Chng minh:

Gi s V = {v1,v2,...vn } v trong n nh c k nh bc l l v1,v2,...,vk. Cc nh cn li c bc


chn l vk+1, vk+2,...vn I y ta c deg(vi) = 2mi+1 vi i=1,2..,k v deg(vj) = 2mj vi j=k+1, ...,n.
mi,mj l cc s nguyn dng.
Theo nh l 1 ta c:

deg(G) =

deg(v ) + deg(v
i

i =1

i =1
n

i =1

j = k +1

) = 2|V| = 2n

deg(vi ) = (2m i +1) = 2 mi + k

Do

deg(v

j = k +1

)=

i =1
n

2m

j = k +1

= 2 mj
j = k +1

n
k
=
deg(
v
)
2
m
k
2
m
2
mi +
+
+
=

j
j
i
i =1
j = k +1
i =1
j = k +1
i =1
T suy ra k l mt s chn. (pcm).

Suy ra

deg(G) =

deg(vi ) +

j = k +1

+ k =2n

V d 11:

C bao nhiu cnh trong mt th c 10 nh, mi nh c bc bng 5?


Gii:
V bc ca th bng 10.5 = 50, m 2.e = 50 Suy ra e = 25

1.3 ng v chu trnh trong th


nh ngha 10:

Cho th G = (V,E). Mt ng i trong th l mt dy vi1ei1vi2ei2...vijeij...vikeikvik+1, Trong


vij V l cc nh, eij E l cc cnh sao cho vi j {1,2,.., k} th nh vij v nh vij+1 l hai
nh k nhau. ng i xut pht t nh vij v kt thc ti nh vik+1(hoc ngc li).
di ca ng bng s cc cnh (hoc cung) trong ng i .
Chu trnh trong th l mt ng i c nh xut pht v nh kt thc trng nhau.
V d 12:

b
d

Trong th trn ta co:

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


a,b,e,d l mt ng i c di 3
c,e,b,a,d l mt ng i c di 4
a,d,c,a l mt chu trnh c di 3
d,a,b,c,d l mt chu trnh c di 4
a,b,d khng phi l mt ng i
a,d,e,a khng phi l mt chu trnh

V d 13:

a
b

c
Trong th trn ta c:
a,c,d l mt ng i c di 2
c,d,a,b l mt ng i c di 3
a,b,d,a l mt chu trnh c di 3
a,c,d,b,d,a l mt chu trnh c di 5
a,c,b khng phi l mt ng i
a,b,c,a khng phi l mt chu trnh

nh ngha 11:
ng hay chu trnh trong th c gi l n nu n i qua mi cnh (cnh ca ng hay
chu trnh) khng qu mt ln.
ng hay chu trnh trong th c gi l s cp nu n i qua mi nh ng mt ln.

V d 14:
a
b

c
Vi th trn ta c:
a,b,c,d l mt ng i n trong th
d,a,b,c,d l mt chu trnh n trong th
a,b,c,d,a l mt chu trnh s cp ca th
a,b,c l mt ng s cp

nh l 3:
Gi s G = (V,E) l th v hng. Nu trong th m mi nh v V u c bc deg(v) 2
th th c chu trnh s cp

Chng minh:
Xt tt c cc ng s cp c th c trong th. R rng s cc ng ny l hu hn, v vy
trong s cc ng s cp s tn ti mt ng c di ln nht. Gi s l ng w:
vi1ei1vi2ei2...vijeijvij+1dng hnh hc ca n l:
vi1

vi2
ei1

vi3
ei2

vij

vij+1
eij

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

vi0 mt nh vi0 v mt cnh ni nh vi1 v vi0.


Theo gi thit deg(vij) 2 nn phi tn ti t nht
nh vi0 phi trng vi mt nh, chng hn l nh vij trong ng w, v nu khng trng th
ng w khng phi l ng s cp di nht, iu ny tri vi gi thit w l ng c di ln
nht. iu ny chng t phi tn ti mt chu trnh trong th ang xt. V cc ng ang xt l
cc ng s cp, cho nn chu trnh ny l chu trnh s cp. nh l c chng minh.

1.4 th con, th b phn v th lin thng


nh ngha 12:
Cho th G = (V,E)
a) Nu trong th G ta b i mt s nh no v cc cnh cha cc nh th phn cn li
ca th c gi l th con ca th G.
b) Nu trong th G ta b i mt s cnh no v gi nguyn cc nh th phn cn li ca
th c gi l th b phn ca th G.

V d 15:
th G

Mt s th con ca th G

M s th b phn ca th G

nh ngha 13:
Cho th G = (V,E)
a) Hai nh u,v V c gi l lin thng nu tn ti mt ng i ni hai nh u,v vi nhau.
b) th G c gi l lin thng nu vi hai nh phn bit bt k trong th u l lin thng.

V d 16:
Cc th lin thng

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

Cc th khng lin thng

nh ngha 14:
Cho th c hng G = (V,E)
a) th G c gi l lin thng mnh nu lun tm c ng i gia hai nh bt k ca n.
b) th G c gi l lin thng yu nu th v hng tng ng vi n l th lin
thnng.

V d 17:
th lin thng mnh

th lin thng yu

nh ngha 15:
Cho th G = (V,E), H = (W,F) l th con ca G.
Nu H l th lin thng th H c gi l thnh phn lin thng ca G.

V d 18:
I

H
G

Trong v d ny H, I l cc thnh phn lin thng ca G

nh l 4:
th G = (V,E) l lin thng khi v ch khi n c mt thnh phn lin thng.

Chng minh:
iu khng nh c trc tip suy ra t cc nh ngha.

nh l 5: (Cng thc Euler)


Cho G = (V,E) l mt n th phng lin thng vi e cnh v v nh. Gi r l s min trong
biu din phng ca G. Khi r = e v +2.
8

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Chng minh:
Trc tin ta xc nh biu din phng ca G. Ta s chng minh nh l bng cch xy dng mt
dy cc th con G1, G2, ..,Ge = G, mi bc ghp thm mt cnh vo th bc trc.
lm iu ny ta s dng nh ngha quy say: Ly tu mt cnh ca G nhn c G1.
nhn c Gn t Gn-1 ta thm tu mt cnh lin thuc vi mt cnh ca Gn-1 v thm mt nh
khc lin thuc vi cnh mi nu nh cha c trong Gn-1, iu ny lm c v G l lin
thng. G s nhn c sau khi e cnh c ghp thm vo cc th to ra trc. Gi rn, en, v vn
tng ng l s min, s cnh, s nh ca biu din phng ca Gn sinh ra. Ta s chng minh bng
quy np biu thc r = e v +2
Vi G1 th biu thc r1 = e1 v1 + 2 l ng, v r1 = 1, e1 = 1, v1 = 2, iu ny c th hin nh
hnh sau:
R1
G1
Gi s ta c rn = en vn + 2.
Gi (an+1, bn+1) l cnh gp vo Gn c Gn+1. Khi c hai kh nng xy ra.
Trng hp th nht hai nh an+1, bn+1 thuc Gn. Khi n phi trn bin ca min chung
R nu khng th khng th gp cnh (an+1,bn+1) vo Gn m khng c cc cnh ct nhau (Gn+1 l
phng). Cnh mi ny s chia min R thnh hai min con. Do rn+1 =rn+1, en+1 = en+1, vn+1 = vn.
Do vy ta c cng thc rn+1 = en+1 vn+1 +2. Trng hp ny c minh ho nh sau:
an+1
R
bn+1
Trng hp th hai, mt trong hai nh ca cnh cha thuc Gn. Ta gi s an+1 thuc Gn cn bn+1
khng thuc. Trong trng hp ny cnh thm (an+1, bn+1) khng sinh ra min mi no v bn+1 phi
nm trong min c an+1 v trn bin ca n (Gn+1 phng). Do rn+1 = rn. Nhng en+1 = en+1 v
vn+1 = vn+1. Mi v ca cng thc khng i nn cng thc vn ng, hay rn+1=en+1 vn+1 +2.
Trng hp ny c minh ho nh sau:
an+1
bn+1

Vy vi mi n ta u c rn = en vn +2. V th gc l Ge nhn c sau khi thm e cnh, nh l


c chng minh.

V d 19:
Cho n th G phng lin thng c 20 nh, mi nh u c bc l 3. Hi biu din phng ca
th ny chia mt phng thnh bao nhiu min?

Gii:
Ta c v = 20, deg(G) = v.3 = 20.3 = 60 = 2.e Suy ra e = 30.
p dng cng thc Euler : r = e v +2 = 12. Vy mt phng b chia thnh 12 min.

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Bi tp chng 1
Bi 1:
Hy gi tn ( th n, a, y ,...) cc th cho di y

G1

G2

G3

G4

G5

G6

G7

G8

Bi 2:
V th v hng v th c hng cho bi G = (V,E)
V = {A, B, C, D, E, G, H}
G = {(A,B), (B,C), (A,C), (G,H), (H,E), (E,A), (D,A)}

Bi 3:
Hy tm s nh, s cnh, bc ca mi nh trong cc th v hng cho di y. Xc
nh cc nh c lp v nh treo. Xc nh bc ca th v kim tra xem n c bng hai ln s
cnh khng?
a

Bi 4:

G1

v1

v2

v3

v4

v5

G2

10

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Hy tm s nh, s cnh, bc ra, bc vo v bc ca mi nh trong cc th v hng cho
di y. Xc nh cc nh c lp v nh treo. Xc nh bc ca th v kim tra xem n c bng
hai ln s cnh khng?
a

v2

v1

v3
G2

G1

Bi 5:
C tn ti th n c 10 nh, mi nh c bc bng 5 khng?

Bi 6:
Trong mt cuc lin hoan mi ngi bt tay nhau. Hy ch ra rng tng s lt ngi c
bt tay c bt tay l mt s chn.(Gi s rng khng ai t bt tay mnh)
Bi 7:
Lit k tt c cc th con ca th sau
a

c
d

b
G

Bi 8:

Cho n th phng lin thng G vi 5 nh v 9 cnh. Hi th ny chia mt phng


thnh bao nhiu min?.

Bi 9:
C bao nhiu cnh trong mt th c 6 nh m hai nh c bc 4, hai nh c bc 6, hai
nh c bc 8 ?.

Bi 10:
Ch ra mt vi ng n v chu trnh n c th c trong th sau:
v1
e1

e2

v2
e3

e4

11

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


v3

e5

v5

e6

v4

Bi 11:
Ch ra tt c cc ng s cp v chu trnh s cp c th c ca th sau
v1
e6

v2

e5

e3

e2

e1

e4

v3

v4

Bi 12:
Mi danh sch cc nh sau y c to nn ng i trong th cho hay khng? ng i
no l n? ng i no l chu trnh? di ca cc ng i ny l bao nhiu?
a) a, b, e, c, b
b
c
a
b) a, d, b, e, a
c) a, d, a, d, a
d) a, b, e, c, b, d, a
d

Bi 13:
Trong cc th cho di y, th no lin thng, th no khng lin thng?

G1

G2

G4

G3

G5

12

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

Chng 2

CC PH NG PHP BIU DIN THN


(6 tit)

2.1 Biu din bng hnh hc


Cho th G = (V, E), khi ta c th biu din G bng phng php hnh hc nh sau:
Mi v V ta t tng ng vi mt im trong mt phng, im gi l nh ca th.
a) Trng hp G l th v hng, nu e = (u,v) V th trong mt phng, cc nh u, v c
ni vi nhau bi mt cnh khng c hng. Nu e = (u,u) V th ti nh u s c mt khuyn.
b) Trng hp G l th c hng, Nu e = (u,v) V th trong mt phng s c mt cung c
hng i t u n v. Nu u = v th ti nh u s c mt khuyn c hng vo chnh n.

V d 1:
th v hng G = ({v1, v2, v3, v4}, {(v1,v2), (v2,v3), (v2,v4), (v3,v4), (v4,v4)}) c biu din
hnh hc nh sau:
v1

v3
v4

v2

th c hng G = ({v1, v2, v3}, {(v1,v1), (v1,v2), (v2,v3), (v3,v1), (v3, v2)}) c biu din hnh
hc nh sau:
v2
v1

v3
Biu din th bng hnh hc l mt cch biu din n gin, trc quan nhng khng c nhiu
ngha trong vic x l bng my tnh.

2.2 Biu din bng ma trn k (lin k), ma trn trng s


Xt n th v hng G = (V,E), vi tp nh V = {v1, v2, ..,vn}, tp cnh E = {e1, e2, .., em}.
Ta gi ma trn k ca th G l ma trn:
A = {aij: i,j = 1,2,...,n}
vi cc phn t aij c xc nh theo quy tc sau:
aij = 1 nu (vi,vj) E
aij = 0 nu (vi,vj) E , i,j = 1, 2, .., n

V d 2:
Cho th v hng G = ({v1, v2, v3},{(v1,v1), (v1,v2), (v1,v3), (v2,v3)})
Ma trn k ca G l
13

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

V1

v2

v3

v1

v2

v3

V d 3:
Cho th v hng G nh sau:
1

Ma trn k ca G l
1

3
4

0
1

1
0

0
1

1
0

0
1

Ch :
Ma trn k ca mt th tu thuc vo th t lit k cc nh. Do vy c ti n! ma trn k khc
nhau ca mt th n nh v c n! cch sp xp n nh.

Cc tnh cht ca ma trn k ca th n v hng:


a) Ma trn k ca n th v hng n nh l mt ma trn vung i xng cp nxn.
b) Tng cc phn t trn hng i (ct j) ca ma trn k chnh bng bc ca nh i (nh j).
c) Nu k hiu a ijp , i, j = 1,2,.., n l cc phn t ca ma trn tch A p = 1
A. 2
A...3
A
p

Khi a , i, j = 1,2,.., n cho ta s ng i khc nhau t nh i n nh j qua p-1 nh trung


gian.
p
ij

Ma trn k ca th n c hng cng c nh ngha tng t, nhng lu ma trn ny l


khng i xng.

V d 4:
Cho n th c hng G

1
14

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

Ma trn k ca G l
1
0
0
0
1

1
2
3
4

2
1
0
1
0

3
1
0
0
0

4
0
1
0
0

Trn y ta ch mi xt cc n th, i vi a th th ma trn k cng c xy dng hon


ton tng t, ch khc l thay v ghi 1 vo v tr aij nu (vi,vj) l cnh (cung) ca th, ta s ghi k
l s cnh (cung) ni hai nh vi v vj.

V d 5:
Cho a th v hng G nh sau:
1

Ma trn k ca G l

1
2
3
4
5

1
0
1
1
3
1

2
1
0
1
1
1

3
1
1
1
0
2

4
3
1
0
0
0

5
1
1
2
0
0

V d 6:
Cho a thi c hng G nh sau:

v4

v3
v2
v1

15

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

Ma trn k ca G l

V1

v2

v3

v4

v1

v2

v3

1
1

1
1

0
0

0
0

v4

Trong rt nhiu ng dng ca l thuyt th, mi cnh e = (u,v) ca th c gn mt con s


c no (c(e), c(u,v)) gi l trng s ca cnh e. th c cc cnh c gn trng s gi l th
c trng s. Trong trng hp th c trng s, biu din th thay v dng ma trn k ta dng
ma trn trng s nh sau:
C = cij, i,j=1, 2, .., n
Vi
cij = c(eij)) nu eij E
cij = nu eij E , i = 1,2,..,n; j = 1,2,..,n
Trong s tu tng trng hp c th, c th c t bng mt trong cc gi tr sau: 0, - ,
+.

V d 7:
Cho th v hng c trng s G nh sau

v1
8

10

v5

v4

3
Ma trn trng s ca G l

v2

7
v3
v1

v2

v3

v4

v5

v1

10

v2

v3

v4

10

v5

16

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

V d 8:
Cho th c hng c trng s G nh sau:
b

7
e

Ma trn trng s ca G l
a

u im ln nht ca phng php biu din th bng ma trn k (hoc ma trn trng s) l
tr li cu hi: Hai nh u, v c k nhau trn th hay khng, chng ta ch phi thc hin mt php
so snh. Nhc im ln nht ca phng php ny l: Khng ph thuc vo s cnh ca th, ta
lun phi s dng n2 n v b nh lu tr ma trn k ca n.

2.3 Biu din bng ma trn lin thuc nh - cnh


Gi s G = (V,E) l mt th v hng vi tp nh V = {v1,v2,.., vn}, v tp cc cnh E =
{e1,e2,..,em}. Khi ma trn lin thuc nh - cnh A = aij, i = 1,2,..n, j = 1,2,...m ca n c xc
nh nh sau:
Aij = 1 nu cnh ej ni vi nh vi
Aij = 0 nu cnh ej khng ni vi inh vi, i = 1,2,..,n, j = 1,2,..,m

V d 9:
Cho th G nh sau
v2

v1

e6

v3

e2
e1

e3
v4

e4

e5

v5

Khi ma trn lin thuc nh - cnh ca G nh sau


17

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

e1

e2

e3

e4

e5

e6

v1

v2

v3

v4

v5

Ma trn lin thuc cng c th c dng biu din th c cnh bi v khuyn

V d 10:
Cho th G nh sau

v1
v2

e2
e3

e1

v3

e4

e7 e6
v4

e5

v5

e8
Khi ma trn lin thuc nh cnh ca G l
e1

e2

e3

e4

e5

e6

e7

e8

v1

v2

v3

v4

v5

Ma trn lin thuc nh - cnh


cn rt hay c s dng trong
cc bi ton lin quan n th

c hng m trong phi x l cc cung ca th.


Cho G = (V,E) , V = {v1,v2,..,vn}, E = {e1,e2,..,em}, l th c hng. Khi ma trn lin thuc
nh - cnh A = aij , i = 1,2,..,n; j = 1,2,..., m ca G c xc nh nh sau:
aij = 1 nu nh vi l nh u ca cung ej
aij =-1 nu nh vi l nh cui ca cung ej
aij = 0 nu nh vi khng l u mt ca cung ej

18

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


V d 11:
Cho ma trn G nh sau

4
6

1
3
5
Ma trn lin thuc cnh - nh ca G nh sau

(1,2) (1,3) (2,3) (2,4) (3,5) (4,5) (5,2) (5,6) (6,4)


1

-1

-1

-1

-1

-1

-1

-1

-1

-1

2.4 Biu din bng danh sch cnh (cung)


Xt th G = (V,E), vi |V| = n, |E| = m. biu din th theo phng php danh sch cnh
(cung) chng ta s lu tr danh sch tt c cc cnh (cung) ca th v hng (c hng). Mi
cnh (cung) e = (u,v) ca th s tng ng vi hai bin Dau[e] v Cuoi[e]. Nh vy lu tr
th ta cn s dng 2m n v nh. Trong trng hp th c trng s ta phi cn thm m n v
nh na lu tr trng s ca cc cnh.

V d 12:
Cho th v hng G nh sau

4
6

1
2

Danh sch cnh ca G nh sau


Dau
1
1
2
2
3
4
4
5

Cuoi
2
3
3
5
4
5
6
6
19

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


V d 13:
Cho th c hng G nh sau

v2

v1
Khi danh sch cnh ca G l
Dau
v1
v1
v2
v3

Cuoi
v2
v3
v3
v2

v3

2.5 Biu din bng danh sch k


Trong rt nhiu vn ng dng ca l thuyt th, cch biu din th di dng danh sch
k l cch biu din thch hp c s dng. Trong cch biu din ny, vi mi nh v ca th
chng ta lu tr danh sch cc nh k vi n. lm c iu ny chng ta c th s dng cu
trc mng cc mng (mng hai chiu) hoc mng cc danh sch lin kt.

V d 1:
Cho th v hng G nh sau
v1
v2

v4

v5

v3
Khi , danh sch k lu tr di dng mng nh sau
v2
v4
v5
v1
v1
v3
v4
v2
v2
v4
v5
v3
v1
v2
v3
v5
v4
v1
v3
v4
v5
Danh sch k lu tr di dng danh sch lin kt nh sau:
v2
v4
v1

v5

nill

v2

v1

v3

v4

nill

v3

v2

v4

v5

nill

v4

v1

v2

v3

v5

v1

v3

v4

v5

nill

nill

Chng ta c rt nhiu phng php khc nhau biu din th, mi phng php u c
nhng u v nhc im ring ca n. V vy vic la chn phng php biu din th sao cho
vic x l n c hiu qu nht phi tu thuc vo tng bi ton v gii thut c th.
Ci t thut ton: (nhp v hin th DS k ca mt th biu din bng danh sch lien kt:
//---------------------------------------------------------------------------//
Chuong trinh nhap va in ra danh sach ke.
20

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


//---------------------------------------------------------------------------#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#define VMAX 100 //So dinh toi da cho mot do thi
typedef struct pp //Cau truc tu tro
{
int v;
struct pp *next;
}Link;
Link *Ke[VMAX]; //Danh sach ke cua do thi
int n;
char ch;
//So dinh cua do thi
//-------------------------------------------------------------------------//
Ham nhap danh sach ke cua do thi co n dinh
//-------------------------------------------------------------------------void nhap_dsk(Link *Ke[], int n)
{
int i,v;
Link *pd,*p;
//Khoi tao mang cac danh sach cac dinh ke cua cac dinh
for(i=1;i<=n;i++)
{
Ke[i] = (Link*)malloc(sizeof(Link));
Ke[i]->v=i;
Ke[i]->next = NULL;
}
//Nhap danh sach cac dinh ke cua cac dinh
for(i=1;i<=n;i++)
{
pd = NULL;
printf("\nNhap cac dinh ke voi dinh %d (nhap 0 de ket thuc!):",i);
while(1)
{
scanf("%d",&v);
if(v==0)
break;
if(pd == NULL)
{
pd = (Link*)malloc(sizeof(Link));
p=pd;
}
else
{
p->next = (Link*)malloc(sizeof(Link));
p=p->next;
21

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


}
p->v=v;
p->next = NULL;
}
Ke[i]->next = pd;
}
}
//-------------------------------------------------------------------------//
Ham hien thi danh sach ke cua do thi co n dinh
//-------------------------------------------------------------------------void in_dsk(Link *Ke[], int n)
{
int i;
Link *pd;
printf("\nDanh sach ke cua cac dinh cua do thi:\n");
printf("\n
------------------\n");
for(i=1;i<=n;i++)
{
printf("\n Danh sach cac dinh ke cua dinh %d:",Ke[i]->v);
pd = Ke[i]->next;
while(pd!=NULL)
{
printf("%5d",pd->v);
pd=pd->next;
}
}
}
//
Ham in tieu de cua chuong trinh
//-------------------------------------------------------------------------void tieu_de()
{
printf("\n CHUONG TRINH CAI DAT CAC THUAT TOAN TIM KIEM TREN DO THI");
printf("\n
--------------***--------------\n\n");
}
//-------------------------------------------------------------------------//
Ham hien thi Menu chon chuc nang cua chuong trinh
//-------------------------------------------------------------------------char menu()
{
printf("\n
Menu chon chu nang");
printf("\n
---***---\n");
printf("\n\n
1. Nhap do thi cho boi danh sach ke");
printf("\n\n
2. Hien thi danh sach ke cua do thi");
printf("\n\n
5. Ket thuc chuong trinh");
printf("\n\n
----------------------------------------");
printf("\n\n
Ban chon:"); ch=getche();
return ch;
}
//-------------------------------------------------------------------------22

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


//
Chuong trinh chinh
//-------------------------------------------------------------------------void main()
{
int kt=0,i;
char ch;
do
{
clrscr();
tieu_de();
ch = menu();
switch(ch)
{
case '1': //Nhap danh sach ke cua do thi
clrscr();
tieu_de(); kt=1;
printf("\n\n1.Nhap danh sach ke cua do thi");
printf("\n------------------------------\n\n");
printf("\n\nSo dinh cua do thi n ="); scanf("%d",&n);
nhap_dsk(Ke,n);
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
break;
case '2': //Hien thi danh sach ke cua do thi
clrscr();
tieu_de();
printf("\n\n2.In danh sach ke cua do thi");
printf("\n----------------------------\n\n");
if(kt)
in_dsk(Ke,n);
else
printf("\nDo thi chua duoc nhap vao!");
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
break;
case '5': //Ket thuc chuong trinh
printf("\n\nXin cam on ban da su dung chuong trinh!");
getch();
break;
}
}while(ch!='5');
}

23

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Chng 3

CC THUT TON TM KIM TRN THN V NG DNG


Trong l thuyt th, c rt nhiu thut ton c xy dng da trn c s duyt qua tt c cc
nh ca th sao cho mi nh ch c duyt ng mt ln. Do vy, vic xy dng cc thut ton
cho php duyt qua tt c cc nh ca th mt cch c h thng l mt vn quan trng thu ht
s quan tm nghin cu ca nhiu nh khoa hc. Cc thut ton nh vy c gi chung l thut
ton tm kim trn th.
Trong chng ny chng ta s nghin cu hai thut ton tm kim c bn trn th l Thut
ton tm kim theo chiu su (Depth First Search) v Thut ton tm kim theo chiu rng (Breadth
First Search) v mt vi ng dng ca hai thut ton ny.
n gin cho vic trnh by, chng ta s xt th v hng G = (V,E), |V| = n, |E| = m;
th c hng s c suy ra mt cch tng t vi mt vi im c bit cn ch .
nh gi hiu qu ca cc thut ton ny, chng ta ch ch trng n vic nh gi phc
tp tnh ton ca thut ton, tc s php ton m thut ton cn thc hin trn mi b d liu vo
trong trng hp xu nht. phc tp tnh ton ny c biu din bng mt hm s ca kch
thc d liu u vo. C th y kch thc ca d liu vo s l s nh n v s cnh m ca
th. Khi phc tp tnh ton ca thut ton s c biu din bng hm hai bin f(n,m) l s
php ton nhiu nht m thut ton cn phi thc hin i vi mi th n nh, m cnh.
so snh tc tng ca hai hm nhn gi tr khng m f(n) v g(n) chng ta s dng k hiu
f(n) = O(g(n)). iu ny c ngha tng ng vi vic tm c cc hng s dng C v N sao
f (n) Cg (n); n N
cho:
Trng hp m rng, nu f(n1,n2,..,nk) v g(n1,n2,..,nk) l cc hm biu din, ta vit:
f(n1,n2,..,nk)=O(g(n1,n2,..,nk)) Tm c cc hng s dng C v N sao cho:
f(n1,n2,..,nk) Cg(n1,n2,..,nk) vi n N
Nu phc tp tnh ton ca thut ton l O(g(n)) th ta ni l thut ton c thi gian tnh ton
c O(g(n)).

3.1 Thut ton tm kim theo chiu su trn th (Depth First Search)
tng chnh ca thut ton tm kim theo chiu su c th c hiu nh sau:
Ban u tt c cc nh ca th u cha c duyt n, ta s bt u vic tm kim t mt nh
no , gi s nh l v1. Sau chn u l mt nh (c th chn tu ) trong danh sch cc nh
k vi nh v1 m cha c xt n v lp li qu trnh tm kim i vi nh u ny. bc tng
qut, gi s ang xt nh vk, nu trong cc nh k vi nh vk ta tm c nh w l nh cha
c duyt n th ta s li bt u qu trnh tm kim t v w s tr thnh nh c duyt
qua. Nu khng cn nh no k vi nh vk l cha c duyt n th ta ni rng nh ny c
duyt xong v quay li tip tc tm kim t nh m trc ta n c nh vk. Qu trnh c tip
tc nh vy cho n khi tt c cc nh ca th c duyt ht. Nh vy ta c th hiu mt
cch n gin l vic tm kim theo chiu su trn th bt u t nh v c thc hin trn c s
tm kim theo chiu su t cc nh cha c duyt k vi v.
Qu trnh ny c m t bng th tc quy sau:

Procedure DFS(v)
24

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


(* Tm kim theo chiu su trn th bt u t nh v *)
(* Cc bin Chuaxet v Ke l bin ton cuc *)
Begin
Xet_dinh(v);
Chuaxet[v]:=False;
For u Ke(v) do
If Chuaxet[u] Then
DFS(u);
End;
(* Chng trnh chnh thc hin th tc *)
BEGIN
(* Khi to bin ton cc Chuaxet *)
For v V do
Chuaxet[v]:=True;
(* Duyt th *)
For v V do
If Chuaxet[v] Then
DFS(v);
END.
Nh vy, vi thut ton trn y r rng mi lnh gi DFS(v) s thc hin duyt qua tt c cc
nh cng thnh phn lin thng vi nh v, bi v sau mi khi xt nh v l lnh gi n th tc
DFS i vi cc nh k vi v. Mt khc, do mi khi thm nh v xong, bin Chuaxet[v] c gn
gi tr False nn mi nh s c thm ng mt ln. Thut ton ln lt s tin hnh tm kim t
cc nh cha c xt n, v vy n s duyt c qua tt c cc nh ca th. (K c th
khng lin thng).
D phc tp tnh ton ca thut ton c nh gi nh sau:
Trc ht ta thy rng s php ton cn thc hin trong hai chu trnh ca thut ton (Hai vng
For chng trnh chinh) c c l n. Cn th tc DFS phi thc hin khng qu m ln. Do tng
s php ton cn thc hin trong cc th tc ny c c l n+m. Vy phc tp tnh ton ca thut
ton l O(n+m).

V d 1:
Xt th v hng cho bi hnh di y (Hnh 3.1)
2

7
3

4
5
9

10

Hnh 3.1

Gi s danh sch k ca th c lu nh sau:

1:
2:
3:
4:

2
1
1
1

3
3
2
9

4
5
10

25

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


3
8
5:
7
8
6:
6
8
7:
3
5
6
7
8:
4
10
9:
4
9
10:
Khi th t cc nh c duyt theo thut ton trn bt u t nh 1 l:
1 2 3 5 8 6 7 4 9 10
Thut ton tm kim theo chiu su trn th c hng cng c thc hin tng t, trong
trng hp ny th tc DFS(v) s cho php duyt tt c cc nh u ca th m t v c ng i
ti u. phc tp tnh ton ca thut ton trong trng hp ny vn l O(n+m).

V d 2:
Xt th c hng cho bi hnh di y (Hnh 3.2)
2

5
3

4
6

Hnh 3.2

Gi s danh sch cc nh k ca th c lu nh sau:

1:
2:
3:
4:
5:
6:
7:
8:
9:

3
1
5
7
5
2
6

4
8
9

Khi th t cc nh c duyt theo thut ton tm kim theo chiu su bt u t nh 1 l:


1 3 2 4 5 7 9 8 6

3.2 Thut ton tm kim theo chiu rng trn th (Breadth First Search)
T tng chnh ca phng php tm kim theo chiu rng trn th c th c hiu nh sau:
Ban u tt c cc nh ca th l cha c xt n, ta s bt u vic tm kim t mt nh
no ca th, gi s nh l v1. Khi duyt nh v1 ta s ti tt c cc nh v11, v12, .., v1k
26

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


k vi nh v1 m cha c xt n ngay sau ln lt xt ti cc nh ny, khi duyt nh v1i
(i=1,2,..k) ta li ti tt c cc nh k vi n m cha c xt n ri ln lt xt n cc
nh . Qua trnh s c nh vy cho n khi no tt c cc nh ca th u c xt ht. Ta c
th hnh dung phng php ny nh hnh nh ca vt du loang, t mt im trn mt phng du s
loang sang ngay cc im ln cn vi im .
Vi phng php ny ta thy rng cc nh k vi mt nh ca th s c xp hng theo th
t c ln lt xt ti, do chng ta c th dng c ch hng i thc hin cng vic ny.
Th tc m t phng php ny nh sau

Procedure BFS(v)
(* tm kim theo chiu rng bt u t nh v *)
(* Cc bin Chuaxet, Ke l ton cc *)
Begin
Queue : =
Queue v; (* Np v vo Queue *)
Chuaxet[v]:=False;
While Queue do
Begin
p Queue; (* Ly p ra khi Queue *)
Xet_dinh(p);
For u Ke(p) do
If Chuaxet[u] then
Begin
Queue u;
Chuaxet[u]:=False;
End;
End;
End;
(* Chng trnh chnh thc hin th tc *)
BEGIN
(* Khi to bin ton cc Chuaxet *)
For v V do
Chuaxet[v]:=True;
(* Duyt cc nh *)
For v V do
If Chuaxet[v] then
BFS(v);
END.
Vi thut ton ny ta cng thy rng mi lnh gi BFS(v) s thc hin duyt qua cc nh cng
thnh phn lin thng vi nh v. Th tc BFS s c thc hin ln lt vi cc nh cha c
duyt ca th, do n s duyt ht tt c cc nh ca th. Mt khc, mi khi duyt xong nh
v, bin Chuaxet[v] cng c gn gi tr False nn mi nh s c thm ng mt ln.
Lp lun tng t thut ton tm kim theo chiu su ta cng c c phc tp tnh ton ca
thut ton ny l O(n+m).
V d 3
Xt th v hng cho v d 1 (hnh 3.1)
Khi th t cc nh c duyt theo thut ton tm kim theo chiu rng s l:
1 2 3 4 5 8 9 10 6 7
27

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


V d 4
Xt th c hng cho v d 2 (Hnh 2)
Khi th t cc nh c duyt theo thut ton tm kim theo chiu rng s l:
1 3 2 4 5 7 8 9 6
Di y l chng trnh ci t hai thut ton tm kim theo chiu su v tm kim theo chiu
rng bng ngn ng lp trnh C. Chng trnh x l trn th c cho bi danh sch k.
//---------------------------------------------------------------------------//
huong trinh cai dat cac thuat toan tim kiem tren do thi
//
Depth First Search - Breadth First Search
//---------------------------------------------------------------------------#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#define VMAX 100 //So dinh toi da cho mot do thi
typedef struct pp //Cau truc tu tro
{
int v;
struct pp *next;
}Link;
Link *Ke[VMAX]; //Danh sach ke cua do thi
int chuaxet[VMAX]; //Bien mang dung de danh dau cac dinh da xet
Link *Queue;
//Hang doi luu thu tu cac dinh se xet
int n;
//So dinh cua do thi
//-------------------------------------------------------------------------//
Ham nhap danh sach ke cua do thi co n dinh
//-------------------------------------------------------------------------void nhap_dsk(Link *Ke[], int n)
{
int i,v;
Link *pd,*p;
//Khoi tao mang cac danh sach cac dinh ke cua cac dinh
for(i=1;i<=n;i++)
{
Ke[i] = (Link*)malloc(sizeof(Link));
Ke[i]->v=i;
Ke[i]->next = NULL;
}
//Nhap danh sach cac dinh ke cua cac dinh
for(i=1;i<=n;i++)
{
pd = NULL;
printf("\nNhap cac dinh ke voi dinh %d (nhap 0 de ket thuc!):",i);
while(1)
{
28

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


scanf("%d",&v);
if(v==0)
break;
if(pd == NULL)
{
pd = (Link*)malloc(sizeof(Link));
p=pd;
}
else
{
p->next = (Link*)malloc(sizeof(Link));
p=p->next;
}
p->v=v;
p->next = NULL;
}
Ke[i]->next = pd;
}
}
//-------------------------------------------------------------------------//
Ham hien thi danh sach ke cua do thi co n dinh
//-------------------------------------------------------------------------void in_dsk(Link *Ke[], int n)
{
int i;
Link *pd;
printf("\nDanh sach ke cua cac dinh cua do thi:\n");
printf("\n
------------------\n");
for(i=1;i<=n;i++)
{
printf("\n Danh sach cac dinh ke cua dinh %d:",Ke[i]->v);
pd = Ke[i]->next;
while(pd!=NULL)
{
printf("%5d",pd->v);
pd=pd->next;
}
}
}
//-------------------------------------------------------------------------//
Ham nap mot phan tu (mot dinh ) vao hang doi
//-------------------------------------------------------------------------void Push(Link *u)
{
Link *q,*p;
q=(Link*)malloc(sizeof(Link));
q->v=u->v;
q->next=NULL;
if(Queue==NULL)
29

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Queue = q;
else
{
p=Queue;
while(p->next!=NULL)
p=p->next;
p->next = q;
}
}
//-------------------------------------------------------------------------//
Ham lay mot phan tu trong hang doi ra
//-------------------------------------------------------------------------int Pop()
{
if(Queue==NULL)
return 0; //Quee rong!
Link *p;
p=Queue;
Queue=p->next;
int t=p->v;
free(p); //Giai phong p
return t;
}
//-------------------------------------------------------------------------//
Ham de quy tim kiem theo chieu sau bat dau tu mot dinh
//-------------------------------------------------------------------------void dfs(Link *u)
{
printf("%3d",u->v);
chuaxet[u->v]=0;
Link *p = Ke[u->v]->next;
while(p!=NULL)
{
if(chuaxet[p->v])
dfs(p);
p=p->next;
}
}
//-------------------------------------------------------------------------//
Ham tim kiem theo chieu rong bat dau tu mot dinh
//-------------------------------------------------------------------------void bfs(Link *u)
{
Queue=NULL; //Khoi tao hang doi
Push(u);
chuaxet[u->v]=0;
while(Queue!=NULL)
{
int u;
30

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


u=Pop();
printf("%5d",u);
Link *p=Ke[u]->next;
while(p!=NULL)
{
if(chuaxet[p->v])
{
Push(p);
chuaxet[p->v]=0;
}
p=p->next;
}
}
}
//-------------------------------------------------------------------------//
Ham in tieu de cua chuong trinh
//-------------------------------------------------------------------------void tieu_de()
{
printf("\n CHUONG TRINH CAI DAT CAC THUAT TOAN TIM KIEM TREN DO THI");
printf("\n
--------------***--------------\n\n");
}
//-------------------------------------------------------------------------//
Ham hien thi Menu chon chuc nang cua chuong trinh
//-------------------------------------------------------------------------char menu()
{
printf("\n
Menu chon chu nang");
printf("\n
---***---\n");
printf("\n\n
1. Nhap do thi cho boi danh sach ke");
printf("\n\n
2. Hien thi danh sach ke cua do thi");
printf("\n\n
3. Tim kiem theo chieu sau tren do thi");
printf("\n\n
4. Tim kiem theo chieu rong tren do thi");
printf("\n\n
5. Ket thuc chuong trinh");
printf("\n\n
----------------------------------------");
printf("\n\n
Ban chon:"); char ch=getche();
return ch;
}
//-------------------------------------------------------------------------//
Chuong trinh chinh
//-------------------------------------------------------------------------void main()
{
int kt=0,i;
char ch;
do
{
clrscr();
tieu_de();
31

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


ch = menu();
switch(ch)
{
case '1': //Nhap danh sach ke cua do thi
clrscr();
tieu_de(); kt=1;
printf("\n\n1.Nhap danh sach ke cua do thi");
printf("\n------------------------------\n\n");
printf("\n\nSo dinh cua do thi n ="); scanf("%d",&n);
nhap_dsk(Ke,n);
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
break;
case '2': //Hien thi danh sach ke cua do thi
clrscr();
tieu_de();
printf("\n\n2.In danh sach ke cua do thi");
printf("\n----------------------------\n\n");
if(kt)
in_dsk(Ke,n);
else
printf("\nDo thi chua duoc nhap vao!");
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
break;
case '3': //Tim kiem theo chieu sau tren do thi
clrscr();
tieu_de();
printf("\n\n3.Tim kiem theo chieu sau tren do thi");
printf("\n-------------------------------------\n\n");
if(kt)
{
//Khoi toa bien chuaxet;
for(i=1;i<=n;i++)
chuaxet[i]=1;
//Ket qua tim kiem theo chieu sau
printf("\n\nThu tu cac dinh duoc xet theo chieu xau:\n\n");
for(i=1;i<=n;i++)
if(chuaxet[i])
dfs(Ke[i]);
}
else
printf("\nDo thi chua duoc nhap vao!");
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
break;
32

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


case '4': //Tim kiem theo chieu rong tren do thi
clrscr();
tieu_de();
printf("\n\n4.Tim kiem theo chieu rong tren do thi");
printf("\n--------------------------------------");
if(kt)
{
//Khoi toa bien chuaxet;
for(i=1;i<=n;i++)
chuaxet[i]=1;
//Ket qua tim kiem theo chieu rong
printf("\n\nThu tu cac dinh duoc xet theo chieu rong:\n\n");
for(i=1;i<=n;i++)
if(chuaxet[i])
bfs(Ke[i]);
}
else
printf("\nDo thi chua duoc nhap vao!");
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
break;
case '5': //Ket thuc chuong trinh
printf("\n\nXin cam on ban da su dung chuong trinh!");
getch();
break;
}
}while(ch!='5');
}

3.3 ng dng ca thut ton tm kim trn th


Trong mc ny chng ta s thc hin ng dng hai thut ton tm kim trn th trnh by
trn vo vic gii hai bi ton c bn trn th l bi ton tm mt ng i ni hai nh bt k ca
th v bi ton kim tra tnh lin thng ca th (xc nh s thnh phn lin thng ca th).

3.3.1 Bi ton tm ng i gia hai nh bt k ca th


Bi ton
Gi s u v v l hai nh no ca th G = (V,E), Hy tm ng i t nh u ti nh v.
Nh chng ta bit hai th tc DFS(u) v BFS(u) s cho php duyt qua tt c cc nh thuc
cng mt thnh phn lin thng vi nh u. V vy sau khi thc hin xong th tc m bin
Chuaxet[v] vn bng True (nh v cha c duyt) th c ngha l khng c ng i t u ti v,
ngc li nu Chuaxet[v] = False th v thuc cng mt thnh phn lin thng vi u, hay tn ti mt
ng i t u ti v. Trong trng hp ny, ghi li ng i t u ti v ta c th dng mt bin
mng Truoc[v] lu li cc nh i qua trc nh v trong ng i t u ti v. Khi hai th tc
DFS(u) v BFS(u) c sa li nh sau:
Th tc quy tm kim theo chiu su p dng cho vic tm ng i:

33

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Procedure DFS(u)
Begin
Chuaxet[u]:=False;
For v Ke(u) do
If Chuaxet[v] then
Begin
Truoc[v]:= u;
DFS(v);
End;
End;
Th tc tm kim theo chiu rng p dng cho vic tm ng i:
Procedure BFS(u)
Begin
Queue : =
Queue v;
Chuaxet[u]:=False;
While Queue do
Begin
p Queue;
For v Ke(p) do
If Chuaxet[v] then
Begin
Queue v;
Chuaxet[v]:=False;
Truoc[v]:=p;
End;
End;
End;
Theo cch trn, ng i cn tm s l:
v t1 := Truoc[v] t 2 := Truoc[t1 ] ... u

V d 5
Xt th cho bi hnh di y (Hnh 3.3)
2
6
5
1

3
7
4

Hnh 3.3

Nu p dng tm ng i theo thut ton tm kim theo chiu su bt u t nh 1 ta s c:

34

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Truoc[2]=1, Truoc[3]=5, Truoc[4]=5, Truoc[5]=2, Truoc[6]=5, Truoc[7]=8, Truoc[8]=6
Vy ng i tm theo thut ton tm kim theo chiu su t nh 1 n nh 8 s l:
1 2 5 6 8
Nu p dng tm ng i theo thut ton tm kim theo chiu rng bt u t nh 1 ta s c:
Truoc[2]=1, Truoc[3]=1, Truoc[4]=1, Truoc[5]=2, Truoc[6]=5, Truoc[7]=5, Truoc[8]=5
Vy ng i tm theo thut ton tm kim theo chiu su t nh 1 n nh 8 s l:
1 2 5 8

Ch
Xt theo cch duyt cc nh ca th th ta c th suy ra c ng i tm c theo thut
ton tm kim theo chiu rng l ng i c s cnh t nht.

3.3.2 Bi ton kim tra tnh lin thng ca th


Bi ton
Hy cho bit th gm bao nhiu thnh phn lin thng v cc nh trong tng thnh phn lin
thng ca th
Do hai th tc DFS(u) v BFS(u) u cho php ta duyt qua tt c cc nh thuc cng mt thnh
phn lin thng vi nh u. Do s thnh phn lin thng ca th chnh bng s ln ta gi ti
th tc DFS (hoc BFS) khi thc hin vic duyt qua tt c cc nh ca th. Vy gii quyt
bi ton trn ta c th p dng mt trong hai th tc DFS hoc BFS, trong ta cn phi c mt
bin Sotplt dng m s thnh phn lin thng (s ln gi th tc) v mt bin mng Thanhplt[]
nh du cc nh thuc cng mt thnh phn lin thng vi nhau (c th dng ngay mng
Chuaxet[]). Cc th tc DFS v BFS c th c sa li nh sau:

Th tc DFS:
Procedure DFS(u)
(* Bin Sotplt v Thanhplt[] l ton cc *)
Begin
Chuaxet[u]:=False;
Thanhplt[u]:=Sotplt;
For v Ke(u) do
If Chuaxet[v] then
DFS(v);
End;

Th tc BFS:
Procedure BFS(u)
(* Bien Sotplt v Thanhplt[] l ton cc *)
Begin
Queue : =
Queue v;
Chuaxet[u]:=False;
Thanhplt[u]:=Sotplt;
While Queue do
35

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Begin
p Queue;
For v Ke(p) do
If Chuaxet[v] then
Begin
Queue v;
Chuaxet[v]:=False;
Thanhplt[v]:=Sotplt;
End;
End;
End;
Khi chng trnh chnh s l:
BEGIN
Sotplt=0;
For v V do
Chuaxet[v]:=True;
For v V do
If Chuaxet[v] Then
Begin
Sotplt:=Sotplt+1;
DFS(v); (* BFS(v) *)
End;
END.
Di y l chng trnh c vit bng ngn ng C gii quyt hai bi ton ni trn
//-------------------------------------------------------------------------------------// Chuong trinh cai dat ung dung cua thuat toan tim kiem tren do thi
//
( Tim duong di va kiem tra tinh lien thong )
//-------------------------------------------------------------------------------------#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#define VMAX 100 //So dinh toi da cho mot do thi
typedef struct pp //Cau truc tu tro
{
int v;
struct pp *next;
}Link;
Link *Ke[VMAX]; //Danh sach ke cua do thi
int chuaxet[VMAX]; //Bien mang dung de danh dau cac dinh da xet
Link *Queue;
//Hang doi dung cho thuat toan tim kiem theo chieu rong
int sTruoc[VMAX]; //Duong di tim theo thuat tim kiem theo chieu sau
int rTruoc[VMAX]; //Duong di tim theo thuat tim kiem theo chieu rong
int sotplt;
//So thanh phan lien thong
int n;
//So dinh cua do thi
//---------------------------------------------------------------------------------//
Ham nhap danh sach ke cua do thi co n dinh
//---------------------------------------------------------------------------------36

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


void nhap_dsk(Link *Ke[], int n)
{
int i,v;
Link *pd,*p;
//Khoi tao mang cac danh sach cac dinh ke cua cac dinh
for(i=1;i<=n;i++)
{
Ke[i] = (Link*)malloc(sizeof(Link));
Ke[i]->v=i;
Ke[i]->next = NULL;
}
//Nhap danh sach cac dinh ke cua cac dinh
for(i=1;i<=n;i++)
{
pd = NULL;
printf("\nNhap cac dinh ke voi dinh %d (nhap 0 de ket thuc!):",i);
while(1)
{
scanf("%d",&v);
if(v==0)
break;
if(pd == NULL)
{
pd = (Link*)malloc(sizeof(Link));
p=pd;
}
else
{
p->next = (Link*)malloc(sizeof(Link));
p=p->next;
}
p->v=v;
p->next = NULL;
}
Ke[i]->next = pd;
}
}
//-------------------------------------------------------------------------//
Ham hien thi danh sach ke cua do thi co n dinh
//-------------------------------------------------------------------------void in_dsk(Link *Ke[], int n)
{
int i;
Link *pd;
printf("\nDanh sach ke cua cac dinh cua do thi:\n");
printf("\n
------------------");
for(i=1;i<=n;i++)
{
printf("\n Danh sach cac dinh ke cua dinh %d:",Ke[i]->v);
37

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


pd = Ke[i]->next;
while(pd!=NULL)
{
printf("%5d",pd->v);
pd=pd->next;
}
}
}
//-------------------------------------------------------------------------//
Ham nap mot phan tu (mot dinh ) vao hang doi
//-------------------------------------------------------------------------void Push(int t)
{
Link *q,*p;
q=(Link*)malloc(sizeof(Link));
q->v=t;
q->next=NULL;
if(Queue==NULL)
Queue = q;
else
{
p=Queue;
while(p->next!=NULL)
p=p->next;
p->next = q;
}
}
//-------------------------------------------------------------------------//
Ham lay mot phan tu trong hang doi ra
//-------------------------------------------------------------------------int Pop()
{
if(Queue==NULL)
return 0; //Quee rong!
Link *p;
p=Queue;
Queue=p->next;
int t=p->v;
free(p); //Giai phong p
return t;
}
//---------------------------------------------------------------------------------//
Ham de quy tim kiem theo chieu sau bat dau tu mot dinh
// ( Ap dung de tim duong di giua hai dinh va kiem tra lien thong)
//---------------------------------------------------------------------------------void dfs(int u)
{
chuaxet[u]=sotplt;
Link *p = Ke[u]->next;
38

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


while(p!=NULL)
{
if(chuaxet[p->v]==1)
{
sTruoc[p->v]=u;
dfs(p->v);
}
p=p->next;
}
}
//---------------------------------------------------------------------------------//
Ham tim kiem theo chieu rong bat dau tu mot dinh
// ( Ap dung de tim duong di giua hai dinh va kiem tra lien thong)
//---------------------------------------------------------------------------------void bfs(int t)
{
Queue=NULL; //Khoi tao hang doi
Push(t);
chuaxet[t]=sotplt;
while(Queue!=NULL)
{
int u;
u=Pop();
Link *p=Ke[u]->next;
while(p!=NULL)
{
if(chuaxet[p->v]==1)
{
Push(p->v);
chuaxet[p->v]=sotplt;
rTruoc[p->v]=u;
}
p=p->next;
}
}
}
//----------------------------------------------------------------------------//
Ham tim duong di giua hai dinh bat ky tren do thi
//
Ap dung thuat toan tim kiem theo chieu sau
//----------------------------------------------------------------------------void dd_dfs()
{
int dau, cuoi;
printf("\n\nTim duong di tu dinh:"); scanf("%d",&dau);
printf("den dinh:"); scanf("%d",&cuoi);
dfs(dau);
if(chuaxet[cuoi]==1)
printf("\n\nKhong co duong di tu dinh %d den dinh %d tren do thi!",dau,cuoi);
else
39

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


{
printf("\n\nDuong di tu dinh %d den dinh %d tren do thi la:\n",dau,cuoi);
printf("%d<--",cuoi);
int j=cuoi;
while(sTruoc[j]!=dau)
{
printf("%d<--",sTruoc[j]);
j=sTruoc[j];
}
printf("%d",dau);
}
}
//-----------------------------------------------------------------------------//
Ham tim duong di giua hai dinh bat ky tren do thi
//
Ap dung thuat toan tim kiem theo chieu rong
//-----------------------------------------------------------------------------void dd_bfs()
{
int dau, cuoi;
printf("\n\nTim duong di tu dinh:"); scanf("%d",&dau);
printf("den dinh:"); scanf("%d",&cuoi);
bfs(dau);
if(chuaxet[cuoi]==1)
printf("\n\nKhong co duong di tu dinh %d den dinh %d tren do thi!",dau,cuoi);
else
{
printf("\n\nDuong di tu dinh %d den dinh %d tren do thi la:\n",dau,cuoi);
printf("%d<--",cuoi);
int j=cuoi;
while(rTruoc[j]!=dau)
{
printf("%d<--",rTruoc[j]);
j=rTruoc[j];
}
printf("%d",dau);
}
}
//-------------------------------------------------------------------------//
Ham kiem tra tinh lien thong cua do thi
//-------------------------------------------------------------------------void kiemtra_lt()
{
sotplt=1;
for(int i=1;i<=n;i++)
chuaxet[i]=1;
for(i=1;i<=n;i++)
if(chuaxet[i]==1)
{
40

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


sotplt++;
dfs(Ke[i]->v); //co the dung bfs(Ke[i]->v) thay cho dfs(Ke[i]->v)
}
if(sotplt==2)
printf("\n\nDo thi la lien thong!");
else
{
printf("\n\nDo thi la khong lien thong!");
printf("\n\nSo thanh phan lien thong cua do thi la %d",sotplt-1);
for(int j=2;j<=sotplt;j++)
{
printf("\n\nThanh phan lien thong thu %d gom cac dinh:",j);
for(int k=1;k<=n;k++)
if(chuaxet[k]==j)
printf("%5d",k);
}
}
}
//-------------------------------------------------------------------------//
Ham in tieu de cua chuong trinh
//-------------------------------------------------------------------------void tieu_de()
{
printf("\n
CHUONG TRINH TIM DUONG DI VA KIEM TRA TINH LIEN THONG");
printf("\n
--------------***--------------\n\n");
}
//-------------------------------------------------------------------------------//
Ham hien thi Menu chon chuc nang cua chuong trinh
//-------------------------------------------------------------------------------char menu()
{
printf("\n
Menu chon chu nang");
printf("\n
---***---\n");
printf("\n\n
1. Nhap do thi cho boi danh sach ke");
printf("\n\n
2. Hien thi danh sach ke cua do thi");
printf("\n\n
3. Tim duong di - theo thuat tk chieu sau");
printf("\n\n
4. Tim duong di - theo thuat tk chieu rong");
printf("\n\n
5. Kiem tra tinh lien thong cua do thi");
printf("\n\n
6. Ket thuc chuong trinh");
printf("\n\n
----------------------------------------");
printf("\n\n
Ban chon:"); char ch=getche();
return ch;
}
//-------------------------------------------------------------------------//
Chuong trinh chinh
//-------------------------------------------------------------------------void main()
{
int i,kt=0;
41

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


char ch;
do
{
clrscr();
tieu_de();
ch = menu();
switch(ch)
{
case '1': //Nhap danh sach ke cua do thi
clrscr();
tieu_de(); kt=1;
printf("\n\n1.Nhap danh sach ke cua do thi");
printf("\n------------------------------\n\n");
printf("\n\nSo dinh cua do thi n ="); scanf("%d",&n);
nhap_dsk(Ke,n);
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
break;
case '2': //Hien thi danh sach ke cua do thi
clrscr();
tieu_de();
printf("\n\n2.In danh sach ke cua do thi");
printf("\n----------------------------\n\n");
if(kt)
in_dsk(Ke,n);
else
printf("\n\nDo thi chu duoc nhap vao!");
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
break;
case '3': //Tim duong di - theo thuat tk chieu sau
clrscr();
tieu_de();
printf("\n\n3.Tim duong di - theo thuat tk chieu sau");
printf("\n-----------------------------------------\n\n");
if(kt)
{
//Khoi toa bien chuaxet;
for(i=1;i<=n;i++)
chuaxet[i]=1;
dd_dfs();
}
else
printf("\n\nDo thi chua duoc nhap vao!");
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
42

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


break;
case '4': //Tim duong di - theo thuat tk chieu rong
clrscr();
tieu_de();
printf("\n\n4.Tim duong di - theo thuat tk chieu rong");
printf("\n-----------------------------------------\n\n");
if(kt)
{
//Khoi toa bien chuaxet;
for(i=1;i<=n;i++)
chuaxet[i]=1;
dd_bfs();
}
else
printf("\n\nDo thi chua duoc nha vao!");
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
break;
case '5': //Kiem tra tinh lien thong cu do thi
clrscr();
tieu_de();
printf("\n\n5.Kiem tra tinh lien thong cua do thi");
printf("\n--------------------------------------");
if(kt)
kiemtra_lt();
else
printf("\n\nDo thi chua duoc nhap vao!");
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
break;
case '6': //Ket thuc chuong trinh
printf("\n\nXin cam on ban da su dung chuong trinh!");
getch();
break;
}
}while(ch!='6');
}

43

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Chng 4

THN EULER V THN HAMILTON


Trong chng ny chng ta s tp trung nghin cu hai dng th c bit l th Euler v
th Hamilton. Trong qu trnh trnh by nu khng c ch thch b xung g th ta hiu thut ng
th dng ch th tng qut (a th v hng hoc c hng), thut ng cnh dng ch c
cnh ln cung cua th.

4.1 th Euler
nh ngha 1
Cho th G=(V,E)
ng i n trong th G i qua mi cnh ca n mt ln c gi l ng i Euler. Chu trnh
n trong th G i qua mi cnh ca n mt ln c gi l chu trnh Euler.
V d 1
Xt d th v hng cho bi hnh sau (Hnh 4.1)

b
e

Hnh 4.1

ng i a, b, f, a, e, b, a, d, e, c, b l ng i Euler
ng i a, f, b, c, e, d, a, e, b, a l ng Euler v cng l chu trnh Euler.
ng i a, b, c, e, d, a, e, b, a, f, b, a khng phai l chu trnh Euler v cng khng phi l ng
Euler
V d 2
Xt th c hng cho bi hnh sau (Hnh 4.2)

v1

v2
v3

v5

v4
Hnh 4.2

44

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

ng v4, v3, v2, v4, v1, v5, v2 l ng i Euler


Chu trnh v1, v5, v2, v4, v3, v2, v4, v1 khng phi l chu trnh Euler v cng khng l ng i
Euler.
Ch :
ng i Euler v chu trnh Euler cng c th c nh ngha nh sau: ng i(chu trnh)
trong th G l ng i (chu trnh) Euler nu n i qua tt c cc cnh ca th v mi cnh i
qua ng mt ln.
nh ngha 2
th G=(V,E) c gi l th Euler nu nh n c chu trnh Euler v gi l th na Euler
nu n c ng i Euler.
V d 3:
th cho trong v d 1 l th Euler cn th cho trong v d 2 l th na Euler.
nh l 1(nh l Euler)
Mt th v hng lin thng c chu trnh Euler khi v ch khi mi nh ca n u c bc
chn. (iu kin cn v mt th lin thng c chu trnh Euler l tt c cc nh ca n u
c bc chn).
Chng minh
iu kin cn:
Mt th lin thng c chu trnh Euler th mi bc ca n u c bc chn.
Tht vy, gi s chu trnh Euler ca th bt u t nh v1 v tip theo l cnh lin luc vi
v1, tc l cnh (v1,v2). Cnh (v1,v2) gp 1 vo deg(v1). Mi ln chu trnh i qua mt nh vk ca
th, n tng thm 2 n v cho deg(vk) v chu trnh i vo mt nh bng mt cnh lin thuc vi
nh v i ra bng mt cnh lin thuc khc, iu c ngha cc nh vk (k 1) u c bc l
mt s chn. Cui cng chu trnh kt thc nh m n xut pht v1, v vy n tng thm 1 vo
deg(v1). Do deg(v1) cng phi l mt s chn. Vy ta kt lun nu th lin thng c chu trnh
Euler th mi nh ca n u c bc chn.
iu kin :
Mt th lin thng m cc nh u c bc chn th tn ti chu trnh Euler trong th .
Tht vy, gi s G l mt th lin thng vi cc nh u c bc l mt s chn. Ta i xy
dng mt chu trnh n bt u t nh v1 tu ca th G. Trc tin ta chn cnh (v1, v2), sau
l (v2, v3),.. cng chn c nhiu cng tt. n mt lc no i m ta ang chn phi kt thc
ti v1 vi cnh (vk,v1) v th l hu hn v cc nh u c bc l mt s chn. iu ny l chc
chn xy ra v mi ln ng i qua mt nh bc chn n ch i vo bng mt cnh nn t nht vn
cn mt cnh i ra. V d trong th G cho bi hnh 4.3 ta bt u nh a v chn tip cc
cnh (a, b), (b, c), (c, h) v (h, a).
b
g
g

a
h

e
d

e
d

Hnh 4.3
45

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Chu trnh m ta xy dng nh trn c th dng ht tt c cc cnh hoc khng. Nu tt c cc
cnh c dng ht th chu trnh ca ta l chu trnh Euler. Trng hp ngc li, ta gi H l
th con nhn c t th G bng cch xo cc cnh dng v cc nh khng lin thuc vi cc
nh cn li. Chng hn trn hnh 4.3 ta xo i chu trnh n a, b, c, h, a khi th ta nhn c
th con H.
V G l lin thng nn H phi c t nht mt nh chung vi chu trnh m ta xo, ta gi w l
nh chung (Trong hnh 4.3 nh chung l c). Mi nh ca H cng c bc chn bi v mi nh
nu c xo cnh th u xo tng cp cnh lin thuc vi n. Lu l H c th khng lin thng.
Bt u t nh w ta li i xy dng ng i n trong H nh lm i vi G bng cch chn
c cng nhiu cnh cng tt. ng i phi kt thc ti w. chng hn trong v d ca ta l c, d, e,
g, c l mt chu trnh mi trong H. Tip theo ta to mt chu trnh mi trong G bng cch ghp chu
trnh trong H vi chu trnh ban u trong G, iu ny lm c v hai chu trnh ny c nh chung l
w. Qa trnh c tip tc nh vy cho ti khi tt c cc cnh ca th c s dng (qu trnh
ny n mt lc no phi kt thc v th l hu hn) Nh vy ta xy dng c mt chu
trnh Euler trong th. Trong v d ca ta chu trnh Euler tm c l a, b, c, d, e, g, c, h, a. iu
ny chng t nu th lin thng m cc nh u c bc chn th th c chu trnh Euler. (nh
l c chng minh).
T cch chng minh thut ton, gi s G l th Euler ta c thut ton xy dng chu trnh Euler
nh sau
Procedure Euler(G: th lin thng vi tt c cc nh c bc chn);
Begin
Chu trnh:=chu trnh trong G bt u ti mt nh tu v cc cnh c thm vo xy dng
ng i qua mt s nh v cui cng quay v nh ny;
H:=G vi cc cnh ca G sau khi b i Chu trnh;
While H cn cnh
Begin
Chu trnh con:=chu trnh trong H bt u ti nh trong H cng l nh u mt ca mt cnh
thuc Chu trnh;
H:=H vi cc cnh ca Chu trnh con v tt c cc nh c lp b loi b;
Chu trnh:=Chu trnh vi Chu trnh con c chn vo ti mt nh thch hp;
End;
End;
V d 4
Xt th v hng G cho bi hnh di y (Hnh 4.4)

v2

v1

v3

v7

v4

v5

v6

Hnh 4.4 th G

y l th lin thng v c cc nh u c bc chn, ta s i xy dng chu trnh Euler nh sau:


Xut pht t nh v1 ta c chu trnh n P1: v1, v2, v7, v1. B i chu trnh ny ta nhn c th
G1 nh sau:
46

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

v3
v4

v5

v2

th G1
v6
Xut pht t nh v2 ca th G1 ta xy dng chu trnh n P2: v2, v4, v3, v2, sau khi b i chu
trnh P2 ta nhn c th G2 nh sau:
v4

v5
th G2

v6
Xut pht t nh v4 ca th G2 ta xy dng chu trnh n P3: v4, v6, v5, v4.
Cui cng ghp cc chu trnh P1, P2, P3 ta c chu trnh Euler cn tm l: v1, v2, v4, v6, v5, v4,
v3, v2, v7, v1
T thut ton xy dng chu trnh Euler cho th Euler trn ta c th tc sau tm chu trnh
Euler trong th
Procedure Euler_Circle(u);
(* ST v EC l hai cu trc Stack *)
Begin
ST:= ; EC:= ;
ST u; (* Np u vo Stack ST *)
While ST do
Begin
x:=top(ST); (* x l phn t nh Stack ST *)
If Ke(x) then
Begin
y:= nh u tin trong danh sch Ke(x);
ST y;
Ke(x):=Ke(x)\ {y}; Ke(y):=Ke(y)\ {x}; (* Loi cnh (x,y) ra khi th *)
End
Else
Begin
x ST; (* Ly x ra khi Stack ST *)
EC x; (* Np x vo Stack CE *)
End;
End;
End;
T thut ton xy dng chu trnh Euler cho th Euler ta xy dng thut ton tm chu trnh Euler
cho mt th G bt k nh sau:
Thut ton tm chu trnh Euler
47

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Bc 1:
Kim tra xem th G c lin thng hay khng. Nu G l lin thng th chuyn sang bc 2,
ngc li th thut ton dng v kt lun th khng c chu trnh Euler.
Bc 2:
Kim tra xem tt c cc nh ca th G u c bc chn hay khng, nu co th chuyn sang
bc 3, ngc li th thut ton dng v kt lun th khng c chu trnh Euler.
Bc 3:
Xy dng chu trnh Euler theo thut ton trn. (thut ton xy dng chu trnh Euler ca th
Euler)
nh l 2
th v hng lin thng G l th na Euler khi v ch khi n c khng qu hai nh bc l.
Chng minh:
Tht vy, nu th G c khng qu hai nh bc l th s nh bc l ca n ch c th l 0 hoc
2 (S nh bc l trong mt th l mt s chn).
Nu G khng c nh bc l th theo nh l 1 n l th Euler do n cng l th na Euler.
Nu G c hai nh bc l, gi s hai nh l u v v. Ta gi H l th nhn c t th G bng
cch thm vo G mt nh w v hai cnh (u, w), (v, w). Khi H l th lin thng c cc nh
u c bc chn do theo nh l 1 th H c chu trnh Euler. Nu xo khi chu trnh ny nh w
v hai cnh k (w,u), (w,v) ta nhn c ng i Euler trong th G. (nh l c chng minh).
V d 5:
Cho th G=(V,E) lin thng c hai nh bcl l v1 v v2 nh hnh sau (Hnh 4.5)

v5

v3

v4

v1

Hnh 4.5

v2

Ta b sung thm nh mi v v hai cnh (v,v1), (v,v2) vo th G ta thu c G=(V,E) nh hnh


4.6
v5

v4

v1

v3

v2
v
Hnh 4.5

th G l th lin thng c cc nh u bc chn, do theo nh l 1 (nh l Euler) tn ti


chu trnh Euler: (v,v1),(v1,v5),(v5,v4),(v4,v3),(v3,v2),(v2,v4),(v4,v1),(v1,v2),(v2,v).
Ta b i nh v v hai cnh (v,v1), (v2,v) Ta c ng i Euler trong th G l:
48

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


(v1,v5),(v5,v4),(v4,v3),(v3,v2),(v2,v4),(v4,v1),(v1,v2)
nh l 3: th c hng lin thng mnh l th Euler khi v ch khi deg+(v)=deg-(v), v V
(Chng minh tng t nh nh l 1)
4.2 th Hamilton
nh ngha 3
Cho th G=(V,E)
ng i s cp trong th G i qua mi nh ca th mt ln c gi l ng i Hamilton.
Chu trnh s cp trong th G i qua mi nh ca th mt ln gi l chu trnh Hamilton.
V d 6
Xt th v hng cho bi hnh sau (Hnh 4.6)
a

Hnh 4.6

ng i d, c, a, b l ng i Hamilton
Chu trnh a, b, c, d, a l chu trnh Hamilton
Chu trnh d, a, c, b, a, d khng phi l chu trnh Hamilton
V d 7
Xt th c hng cho bi hnh sau (Hnh 4.7)
2

Hnh 4.7
4
ng i 3, 1, 4, 2 l ng i Hamilton
ng i 2, 1, 4 khng phi l ng i Hamilton
Chu trnh 2, 1, 4, 2 khng phi chu trnh Hamilton
Ch
ng i Hamilton v chu trnh Hamilton cng c th c nh ngha nh sau: ng i(chu
trnh) trong th G l ng i(chu trnh) Hamilton nu n i qua tt c cc nh ca th v
mi nh i qua ng mt ln.
nh ngha 4
th G=(V,E) c gi l th Hamilton nu nh n c chu trnh Hamilton v gi l th
na Hamilton nu n c ng i Hamilton.
V d 7
th cho hnh 4.6 l th Hamilton, cn th ho hnh 4.7 l th na Hamilton.
nh l 4
n th v hng lin thng G=(V,E) c bc mi nh khng nh hn na s nh ca
th (deg(v) |V|/2 vi v V ) th th lun tn ti chu trnh Hamilton. (l th Hamilton). y
ta gi thit |V|>2.
49

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Chng minh
Ta i chng minh nh l bng phng php phn chng nh sau:
Gi s trong th G=(V,E) khng tn ti chu trnh Hamilton. Ta tin hnh b sung thm cc nh
mi vo th G v cc cnh ni cc nh mi ny vi tt c cc nh ca th G cho ti khi ta
nhn c th mi G=(V,E) l th c chu trnh Hamilton. Gi s s nh ti thiu m ta cn
b xung vo th G nhn c th G l k nh. Khi |X| = |X| + k.
Trc tin ta nhn thy rng cc nh mi phi ng xen k hai nh c trong chu trnh Hamilton.
Tht vy, nu hai nh mi u1, u2 l k nhau trong chu trnh Hamilton, chng hn:

vi

u1

u2

vj

Do u1, u2 u c cnh ni vi cc nh c nn ta c th b i mt trong hai nh u1, u2 m vn c


chu trnh Hamilton. iu ny tri vi gi thit s nh b sung vo l ti thiu. Vy nh mi phi
ng xen k hai nh c (*).
T khng nh (*) ta thy chu trnh Hamilton co dng:
vi

vj

(trong vi, vj l nh c thuc V, cn u l nh mi thuc V-V)


Trong trng hp ny ta cn ch ra s nh k ca vi l khng ln hn s nh khng k ca vj.
Tht vy, gi s v1 l nh k ca vi v v2 l nh k ca v1. Nu v2 l nh k ca nh vj, th khi
chu trnh Hamilton c dng
vi

v1

vj

v2

Tc l ta c th b nh u bng cch thay vi, u, vj bi vi, v1, v2, vj. iu ny tri vi gi thit s
nh m ta b sung l ti thiu. Vy v2 khng th k vi vj. Nh vy c ngha l vi nh v1 k vi
vi th s c tng ng mt nh v2 khng k vi vj, tc s nh k vi vi khng ln hn s nh
khng k vi vj (**).
T khng nh (**) ta c bt ng thc:
(1)
(deg(v) |V|/2)
S2 S1 |V|+p=|V|
Trong S2 l tng s nh k ca vi v nh k ca vj, S1 l tng s nh khng k ca vi v nh
khng k ca vj
Ta c, s nh k ca dnh vi = deg(vi) |V|/2 + p v s nh k ca nh vj = deg(vj) |V|/2 + p (2)
T (1) v (2) ta c bt ng thc |V| + 2p |V| + p
Sy ra p=0. iu ny chng t khng cn b sung nh mi no th th G=(V,E) vn c chu trnh
Hamilton. (pcm)
V d 8
Xt th v hng cho bi hnh sau (Hnh 4.8)

50

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

2
1

3
Hnh 4.8

4
5

Cc nh ca th ny u c bc ln hn hoc bng na s nh do trong th c tn ti chu


trnh Hamilton, chu trnh l 1, 2, 3, 4, 5, 6, 1
nh l 5
Gi s G=(V,E) l th c hng v y . Khi trong th lun tn ti ng Hamilton.
Chng minh
Gi s w = vi1 vi2 ... vik vik+1....vim-1 vim l mt ng s cp bt k trong th.
Nu trong ng s cp w m tt c cc nh ca th u c mt th w chnh l ng
Hamilton. Ngc li nu cn c nhng nh ca th cha c mt trong w th ta c th b xung ht
nhng nh vo ng s cp w w tr thnh ng Hamilton theo nguyn tc sau:
Gi s v thuc V m v cha c mt trong ng s cp w. Khi do tnh y ca th, ch
c th sy ra cc trng hp sau:
1) Nu v c cung ti vi1 th ta b sung v vo u w, v khi n c dng
v vi1 vi2...vik vik+1...vim-1 vim
2) Nu vik c cung ti v t t x c cung ti vik+1 th ta b sung v vo gia hai nh vik v vik+1.
Khi w c dng
vi1 vi2...vik v vik+1...vim-1 vim
3) Nu t vik v vik+1 c cung i ti v v t v li c cong i ti vk+2 th ta b sung v vo gia hai
nh vik+1 v vik+2, w khi c dng
vi1 vi2...vik vik+1 v vik+2...vim-1vim
4) Nu vi mi k thuc [1, m-1] v t vik v vik+1 c cung sang v th ta b sung v vo cui w, khi
n c dng
vi1 vi2...vik vik+1...vim-1 vim v
Bng cch ta c th b sung ht cc nh ca th vo w nu nh n cha c mt trong w w
tr thnh ng Hamilton (pcm).
V d 9
Xt th c hng y cho bi hnh sau (Hnh 4.9)

2
1

4
5
51

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Hnh 4.9
Vi th ny ta lun xy dng c ng Hamilton, tht vy gi s ta chn mt ng s cp
nh sau: 2, 5, 4, by gii ta s ln lt thm cc dnh 1, 3, 6 vo ng ny c ng
Hamilton nh sau:
nh 1 c cung ni vi nh 2 nn ta thm 1 vo u ng i s cp trn v ta nhn c ng s
cp mi l 1, 2, 5, 4.
vi nh 3 ta thy t nh 1 c cung ti nh 3, t nh 3 c cung i ti nh 2 nn ta s b sung nh
3 vo gia nh 1 v nh 2 v ta c ng s cp mi l: 1, 3, 2, 5, 4
Tip n ta b sung nh 6 vo sau nh 4 v ta nhn c ng Hamilton 1, 3, 2, 5, 4, 6
H qu (Khng chng minh)
th v hng y G = (V,E) vi |V|>2 lun tn ti chu trnh Hamilton.
iu ngc li ni chung l khng ng.
V d 10
th v hng cho bi hnh sau (Hnh 4.10) c chu trnh Hamilton nhng khng y
v1

v2

v3

v4

Thut ton lit k cc chu trnh Hamilton ca th


Bi tp chng 4

52

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

Chng 5

CY V CY KHUNG CA THN
5.1 Cy v cc tnh cht c bn ca cy
nh ngha 1
Cy l th v hng, lin thng v khng c chu trnh n.
th khng lin thng c gi l rng (cc thnh phn lin thng ca th l cc cy ca
rng).
V d 1
Trong hnh 5.1 di y l mt rng gm ba cy T1, T2 v T3

T1

T2

T3

nh l 1 (Cc tnh cht ca cy)


Gi s T = (V,E) l th v hng lin thng n nh. Khi cc mnh sau y l tng
ng.
1) T l cy
2) T khng cha chu trnh v c n-1 cnh
3) T lin thng v c n-1 cnh
4) T lin thng v nu b i mt cnh tu th th nhn c s khng lin thng
5) Hai nh bt k ca T c ni vi nhau bi ng mt ng i n
6) T khng cha chu trnh nhng nu thm vo mt cnh ni hai nh khng k nhau th xut
hin duy nht mt chu trnh.
Chng minh
Ta s chng minh nh l theo s vng trn nh sau:
1) 2) 3) 4) 5) 6) 1)
1) 2):
Theo nh ngha, v T l cy nn n khng cha chu trnh. Ta i chng minh bng quy np nu T c
n nh th n c n-1 cnh.
Tht vy, vi n=1 l hon ton ng.
Gi s iu khng nh dng vi n=k, tc l cy T c k nh th c k-1 cnh, ta i chng minh khng
nh ng vi n=k+1.
Trc ht ta thy rng mi cy T c k+1 nh ta lun tm c t nht mt nh l nh cheo (nh
c bc bng 1). Gi v1, v2, ..vj l ng i di nht theo s cnh trong T, khi r rng v1 v vj l
cc nh treo, v t v1 (v vk) khng c cnh ni ti bt k nh no khc do T khng cha chu trnh
v ng ang xt l ng di nht. Loi dnh v1 v cnh (v1, v2) khi T ta thu c cy T1 vi k
nh, theo gi thit th T1 c k-1 cnh do T phi c k cnh. Vy khng nh l ng vi mi n.

53

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


2) 3):
Ta chng minh bng phn chng:
Gi s T khng lin thng, khi T c k>1 thnh phn lin thng T1, T2, ..,Tk. Do T khng cha
chu trnh nn Ti cng khng cha chu trnh, v th mi Ti l mt cy. Nu ta gi v(Ti) v e(Ti) ln
lt l s nh v cnh ca cy Ti ta s c:
e(Ti) = v(Ti)-1
Suy ra n-1 = e(T) = e(T1)+e(T2)+...+e(Tk) = v(T1)+v(T2)+..+v(Tk)-k=n-k
Suy ra k=1, ngha l T phi lin thng.
3) 4):
Vic loi b bt k mt cnh no ca T u cho ta mt th n nh n-2 cnh, r rng l th khi
s khng lin thng.
4) 5):
Ta chng minh bng phn chng: Gi s tn ti hai nh trong T c ni vi nhau bi hai
ng i n khc nhau, khi ta hon ton c th b i mt cnh mt trong hai ng i m
th nhn c vn lin thng, iu ny l tri vi gi thit.
5) 6):
R rng T khng cha chu trnh, v nu c th ta s tm c mt cp nh c ni vi nhau bi hai
ng i n, tri vi gi thit. By gi nu ta thm vo T mt cnh e ni hai nh u v v ca T. Khi
cnh ny cng vi ng i n ni u v v s to thnh mt chu trnh. Chu trnh thu c ny l
duy nht v nu khng th trc phi c chu trnh, iu ny li tri vi gi thit.
6) 1):
Gi s T khng lin thng, khi T c t nht l hai thnh phn lin thng, khi o nu thm mt
cnh ni hai nh hai thnh phn lin thng khc nhau ta khng thu c thm mt chu trnh no
c, iu ny tri vi gi thit.
nh l c chng minh.
nh l 2
Trong mt cy s nh treo l ln hn hoc bng 2.
Chng minh
Ta chng minh bng phn chng:
Gi s s nh treo trong cy l nh hn 2, khi c hai trng hp xy ra:
a) S nh treo bng 0
Nu khng c nh treo th xut pht t mt nh ta lun tm ng quay v nh , ngha l
lun tm c mt chu trnh, mu thun vi gi thit
b) S nh treo l 1, Ta xut pht t nh treo ny, v mi nh khc nh treo ng i se i
vo t mt cnh ri i ra bng mt cnh khc qu trnh ny s v hnh v nu hu hn s
xut hin nh treo. iu ny mu thuNn vi tnh hu hn ca th.
(nh l c chng minh)

5.2 Cy khung ca th (Cy bao trm)


nh ngha 2
Gi s G = (V,E) l th v hng lin thng. Cy T = (V,F) vi F E c gi l cy khung
ca th G.
V d2
Cho th v hng G = (V,E) nh hnh v sau (Hnh 5.2)
nh l 3
th G = (V,E) c cy khung (cy bao trm) khi v ch khi G l th lin thng
Chng minh
iu kin cn:
th G c cy bao trm th G l th lin thng.

54

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Gi s G c cy bao trm l G, ta chi ra G l lin thng. Tht vy, nu G khng lin thng th
tn ti cp nh u, v m gia chng khng c ng ni no, m u, v cng l nh ca G, chng t
G khng lin thng. iu ny tri vi gi thit G l cy.
iu kin :
th G l lin thng th G c cy bao trm.
Gi s G l lin thng
a) N u trong G khng c chu trnh th G l mt cy, do cy bao trm G ca G chnh l G.
b) N u trong G c chu trnh th ta b i mt cnh trong chu trnh th ta c G lin thng v
khng c chu trnh, G l cy ca G.
(pcm).
tm khung ca th ta c th p dng mt trong hai thut ton tm kim theo chiu su v thut
ton tm kim theo chiu rng trn th. Trong c hai trng hp mi khi ta n c nh u (tc
l bin Chuaxet[u]=true) t nh v th cnh (u,v) s c np vo cy khung. Hai thut ton c p
dng nh sau:
Tm kim theo chiu su:
Procedure DFS_TREE(r)
(* Tm cy khung T ca th v hng lin thng G cho bi danh sch k *)
Begin
Chuaxet[r]:=false;
For v Ke(r) do
If Chuaxet[v] Then
Begin
T:=T (r,v);
DFS_TREE(v);
End;
End;
Tm kim theo chiu rng
Procedure BFS_TREE(r)
Begin
Q:= ;
Q r;
Chuaxet[r]:=False;
While Q do
Begin
v Q;
For u Ke(v) do
If Chuaxet[u] Then
Begin
Q u;
Chuaxet[u]:=False;
T:= T (v,u);
End;
End;
End;

Chng trnh chnh

55

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


BEGIN
For v V do
Chuaxet[v]:=True;
T:= ;
DFS_TREE(root); (* Hoc BFS_TREE(root); *)
END.
V d 3

5.3 Bi ton tm cy khung nh nht (ln nht ca th)


Bi ton:
Cho G=(V,E) l th v hng lin thng vi |V|=n v |E|=m. Mi cnh e ca th c gn
mt s c(e) gi l di ca cnh. Gi s H = (V,T) l cy khung ca th G. Ta goi c(H) ca
cy khung H l tng di cc cnh ca cy:
c(H)= c(e)
eT

Bi ton t ra l trong s tt c cc cy khung H ca th G hy tm cy khung c c(H) nh nht.


Cy khung nh vy c gi l cy khung nh nht ca th.
gii quyt bi ton ny ta hon ton c th lit k tt c cc cay khung ca th sau chn ly
cy khung c di nh nht, xong cch ny khng c tt trong trng hp th c nhiu cy
khung. Do vy ta phi c mt cc no xy dng c mt cy khung ca th sao cho di
ca cy l nh nht. Di y ta s nghin cu hai thut ton p ng c yu cu trn.
5.3.1 Thut ton Kruskal
Thut ton Kruskal s xy dng tp cnh T ca cy khung T=(V,K) theo tng bc nh sau:
Trc ht sp xp cc cnh ca th G theo th t khng gim ca di cnh. Ban u tp K:=
, mi bc ta s ln lt duyt trong danh sch cc cnh sp xp tm ra mt cnh c
di nh nht sao cho vic b xung cnh vo tp K m khng to thnh chu trnh. Thut ton s
kt thc khi ta thu c tp K c n-1 cnh, th tc trnh by thut ton nh sau:
Procedure Kruskal;
Begin
K:= ;
While |K|<(n-1) and E do
Begin
Chon e l cnh c di nh nht trong E;
E:=E\{e};
If K {e} khng cha chu trnh Then
K:=K {e};
End;
If |K|<n-1 Then
th khng c cy khung;
Else
T:=(V,K) l cy khung nh nht;
End;
V d 4
Xt th cho bi hnh di y (Hnh 5.

56

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

1
17

2
6
5

6
3
8

7
1

12

23

15

3
21

18
4

16

Th t t tri qua phi, t trn xung di ca cc hnh di y minh ho vic tm cy khung


nh nht theo thut ton Kruskal, trong cc cnh c nt m l cnh c chn vo cy khung,
cc cnh c nt t l cc cnh b b qua trong qu trnh tm cy khung ca thut ton.

57

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


5.3.2 Thut ton Prim
Thut ton Prim s xy dng cy khung T=(V,P) theo cch sau:
Bt u t t mt nh s tu ca th, u tin ta ni s vi nh ln cnh gn nht ca n, chng
hn l nh u (nh u l ln cn gn nht ca s nu nh (u,s) l cnh k c di nh nht ca nh
s). Tip theo, trong s cc trong s cc cnh k vi hai nh s, u ta tm cnh c di nh nht, cnh
ny dn n nh th ba, chng hn l nh v, v ta thu c cy b phn gm 3 nh 2 cnh. Qu
trnh ny s tip tc cho n khi thu c cy gm n nh v n-1 cnh, cy ny s l cy khung nh
nht cn tm.
Gi s th cho bi ma trn trng s C={c[i,j];i,j=1,2,...,n}. Trong qu trnh thc hin thut
ton, mi bc nhanh chng chn c cc nh v cnh cn b xung vo cy khung, m nh
v ca th s c gn mt nhn c dng [min(v), near(v)], trong min(v) l di ca cnh c
di nh nht trong s cc cnh ni nh v vi cc nh ca cy khung ang xy dng, cn near(v)
l nh ca cy khung gn v nht.
Thut ton Prim c m t bng th tc sau
Procedure Prim;
Begin
(* Bc khi to *)
Chn s l mt nh no ca th;
VT:= {s}; P:= ; (* VT l tp nh, P l tp cnh ca cy khung *)
min(s):=0; near(s):=s;
For v V\VT do
Begin
min(v):=c[s,v];
near(v):=s;
End;
(* Bc lp *)
Stop:=false;
While not Stop do
Begin
Tm u V\VT c min(u) nh nht;
VT:=VT {u}; P:=P { (u,near(u))};
If |VT| = n then
Begin
T = (VT,P) l cy khung nh nht;
Stop:=true;
End
Else
For v V\VT do
If min(v)>c[u,v] then
Begin
min(v):=c[u,v];
near(v):=u;
End;
End;
End;
V d 5:
Xt th cho v d 4

Ma trn trng s ca th c dng


58

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

1
0
17

2
4

1
2
3
4
5
6
7
8
9

2
17
0
15

15
0
18

21

18
0
12

1
23
16

12
0
8
6
3

6
2

8
0
5

7
4
9
7
1
6
5
0

23
3

21

Bng di y cho ta hnh nh v cc bc lp ca thut ton Prim, nh c du * l nh c chn


b xung vo cy khung v khi nhn ca n khng cn b bin i cc bc tip theo nn ta
dng du x ghi nhn iu .
nh
1

VT

[0,1]

[17,1]

[ ,1]

[ ,1]

[ ,1]

[2,1]*

[4,1]

[ ,1]

[ ,1]

[17,1]

[ ,1]

[ ,1]

[ ,1]

[ ,1]

1,6

(6,1)

B.lp
K.to
1
2

x
x

[9,7]

[7,7]

[1,7]

[8,6]

[4,1]

[6,7]

[ ,1]

[ ,1]

1,6,7

(6,1)(7,1)

[23,4]

[16,4]

1,6,7,4

(6,1)(7,1)(4,7)

[9,7]

[7,7]

[6,7]

[9,7]

[7,7]

[3,5]*

[16,4]

1,6,7,4,5

(6,1)(7,1)(4,7)(5,7)

[9,7]

[7,7]

[16,4]

1,6,7,4,5,8

(6,1)(7,1)(4,7)(5,7)(8,5)

[16,4]

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

(6,1)(7,1)(4,7)(5,7)(8,5)(3,7)

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

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

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

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

[9,7]

[16,4]

59

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Chng 6

MT S BI TON NG DNG
(Bi ton tm ng i ngn nht v bi ton lung cc i)
6.1 Bi ton tm ng i ngn nht
6.1.1 Tm ng i ngn nht trong th khng c trng s
Bi ton:
Cho th khng c trng s G = (V,E) v hai nh u, v V. Tm ng i ngn nht t nh u
n nh v, tc l ng i t u n v c s cnh (cung) l t nht
gii quyt bi ton ny ta c th thc hin theo thut ton sau y:
Thut ton:
Bc 1:
Ti nh u ta ghi s 0
Cc nh k vi u (c cnh i t u n) ta ghi s 1
Cc nh k vi cc nh c ghi s 1 ta ghi s 2
Gi s ta ghi ti i, tc l ta nh s c cc tp nh l V(0) = {u}, V(1), V(2),..,V(i). Trong
V(i) l tp tt c cc nh c ghi bi s i. Ta xc nh tp cc nh c nh s bi s i+1 nh
sau:
V(i+1) = {x| x V, x V(k) vi k=0,1,..,i v y V(i) sao cho t y c cnh (cung) i ti x}
Do tnh hu hn ca th, sau mt s hu hn bc, thut ton dng li v cho ta tp cc nh c
cha nh v c nh s bi m l V(m).
Bc 2:
Do bc 1 nh v c nh s l m, iu ny chng t ng i t u n v c m cnh (cung) v
l ng i ngn nht t u ti v. tm tt c cc ng i c di m ngn nht t u ti v, ta xut
pht t v i ngc v u theo nguyn tc sau y:
- Tm tt c cc nh c cnh (cung) ti b c ghi s m-1, gi s l xik (k=1,2...).
- Vi mi nh xik tm tt c cc nh c cnh (cung) ti xik c ghi s m-2.
Bng cch li dn tr li, n mt lc no gp nh ghi s 0, chnh l nh u. Tt c cc ng
i xc inh theo cc bc trn l ng i t u ti v vi di m ngn nht cn tm
V d
Xt th c hng cho bi hnh di y (Hnh 6.1)

v2

v1

v3

v10

v9

v8
v5

v4

v6

v7

Tm ng i ngn nht t nh v1

60

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th

Chu :
Thut ton tm ng i gia hai nh u v v trong th bng cch p dng thut ton tm kim
theo chiu rng chnh l ng i ngn nht t u ti v (theo s cnh).
6.1.2 Tm ng i ngn nht trong th c trng s
Bi ton:
Cho th c trng s G = (V,E) v hai nh s, t V. Tm ng i ngn nht t nh s n nh
t, tc l ng i t s n t c tng trng s ca cc cnh (cung) l nh nht.

Phn ln cc thut ton tm ng i ngn nht t s n t c xy dn trn tng nh sau:


T ma trn trng s c[u,v]; u,v V, ta tnh cn trn d[v] ca khong cch t nh s n tt c cc
nh v V, mi khi pht hin d[u]+c[u,v]<d[v] th cn trn d[v] s c lm tt ln:
d[v]:=d[u]+c[u,v]. Qu trnh s kt thc khi tt c cc cn trn d[v] khng th lm tt ln c
na. Khi thc hin ci t trn my tnh, cn trn d[v] c gi l nhn ca nh v (hay trng s ca
nh v), cn vic lm tt cc cn trn d[v] c gi l php gn nhn cho cc nh ca th. Thut
ton c th c m ta nh sau:
Bc 1: nh trng s cc nh.
Trng s ca nh xut pht s c nh trng s (gn nhn) d[s] = 0
Ti cc nh cn li ta ghi mt s dng ln sao cho n ln hn trng s ca cc nh t a ti (c
th dng )
Bc 2: Thc hin gim trng s cc nh
Gi s ti nh v ang c ghi trng s d[v]. N u tn ti nh u c trng s d[u], t u sang v m
d[v]>d[u] +c[u,v] th ta thay trng s d[v] bi d[v]=d[u]+c[u,v]. Trng hp ngc li ta gi
nguyn l d[v]. Qu trnh thc hin cho ti khi trng s ca tt c cc nh t cc tiu, tc l
v V khng tn ti u V k vi v m d[u]+c[u,v]<d[v] .
Bc 3: Xc nh ng i t s ti t c trng s nh nht
T bc 2 ta xc nh c trng s ca nh t, xut pht t t ta i v nh k vi t, chng hn l
nh x c tnh cht d[t] = d[x] + c[x,t], nu khng c nh x nh vy th ta i v nh k vi t c
trng s nh nht, c tip tc nh vy ta s i v n nh y m nh k l s sao cho d[y]=d[s]+c[
s,y], vi d[s]=0.
V d

Tuy nhin, trn thc t vic tm ng i ngn nht gia hai nh li c rt nhiu trng hp ring
bit m cha c mt thut ton no thc s ti u c tt c, chng hn th c trng s ca cnh
l mt s m, hay th c cha chu trnh c trng s m...Sau y ta s xt qua mt s trng hp
ring.
6.1.2.1 ng i ngn nht xut pht t mt nh (Thut ton Ford Bellman)
Thut ton tm ng i ngn nht t mt nh s n tt c cc nh cn li ca th c a ra
bi hai nh bc hc Ford v Bellman, thut ton ny lm vic trong trng hp trng s ca cc
cnh (cung) l tu , nhng gi thit rng trong th khng c chu trnh m.

61

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


Procedure Ford_Bellman;
(*
u vo: th G = (V,E) vi n nh,
s V l nh xut pht, c[u,v] l ma trn trng s;
u ra: Khong cch ngn nht t s n tt c cc nh cn li d[v],
Truoc[v] ghi nhn nh i trc v trong ng i ngn nht t s n v;
Gi thit: th khng c chu trnh m;
*)
Begin
(* Khi to *)
For v V do
Begin
d[v]:=c[s,v];
Truoc[v]:=s;
End;
d[s]:=0;
For k:=1 to n-2 do
For v V\{s} do
For u V do
If d[v]>d[u]+c[u,v] then
Begin
d[v]:=d[u]+c[u,v];
Truoc[v]:=u;
End;
End;
6.1.2.2Tm ng i ngn nht trong th c trng s khng m (thut ton Dijkstra)
Dijkstra ngh mt thut ton tm ng i ngn nht t mt nh ti tt c cc nh cn li ca
th. Thut ton Dijkstra c xy dng da trn c s gn cho cc nh cc nhn tm thi. N hn ca
mi nh cho bit cn trn ca di ng i ngn nht t nh xut pht n n. Cc nhn ny s
c bin i theo cc bc lp, trong mi bc lp c mt nhn tm thi tr thnh nhn c nh.
N u nhn ca mt nh no tr thnh c nh th n s cho ta di ca ng i ngn nht t
nh xut pht n n. Thut ton c m t c th nh sau:
Procedure Dijkstra;
(*
u vo: th G=(V,E) vi n nh cho bi ma trn trng s c[i,j]
s V l nh xut pht
u ra: Khong cch t nh s n tt c cc nh v cn li l d[v]
Truoc[v] ghi nhn nh i trc v trong ng i ngn nht t s n v
Gi thit: Trng s cc cnh (cung) ca th l khng m
*)
Begin
(* Khi tao *)
For v V do
Begin
d[v]:=c[s,v];
Truoc[v]:=s;
End;

62

Nguyn Minh c - HQG H Ni

Gio n mn: L Thuyt Th


d[s]:=0; T:=V\{s}; (* T l tp cc nh c nhn tm thi *)
(* Bc lp *)
While T do
Begin
Tm nh u thuc T tho mn: d[u] = min{d[z]; z thuc T};
T:=T\{u}; (* C nh nhn ca nh u *)
for v thuc T do (*Gn li nhn cho cc nh *)
if d[v]>d[u] + c[u,v] then
Begin
d[v]:=d[u]+c[u,v];
Truoc[v]:=u;
End;
End;
End;
V d:

63

Nguyn Minh c - HQG H Ni

You might also like