You are on page 1of 134

CHNG I

CC KHI NIM C BN CA L THUYT TH


1. CC NH NGHA
th l mt cu trc ri rc bao gm cc nh v cc cnh ni cc nh ny. Chng ta
phn bit cc loi th khc nhau bi kiu v s lng cnh ni hai nh no ca
th.
nh ngha 1.1
n th v hng G = (V,E) bao gm V l tp cc nh, v E l tp cc cp khng c
th t gm hai phn t khc nhau ca V gi l cc cnh.
nh ngha 2.1
a th v hng G= (V, E) bao gm V l tp cc nh, v E l tp cc cp khng c th
t gm hai phn t khc nhau ca V gi l cc cnh. Hai cnh e1 v e2 c gi l cnh
lp nu chng cng tng ng vi mt cp nh.
nh ngha 3.1
Gi th v hng G = (V, E) bao gm V l tp cc nh v E l tp cc cp khng c th
t gm hai phn t (khng nht thit phi khc nhau) ca V gi l cnh. Cnh e c gi
l khuyn nu n c dng e = (u, u).
nh ngha 4.1
n th c hng G = (V, E) bao gm V l tp cc nh v E l tp cc cp c th t
gm hai phn t khc nhau ca V gi l cc cung.
nh ngha 5.1
a th c hng G = (V, E) bao gm V l tp cc nh v E l tp cc cp c th t
gm hai phn t khc nhau ca V gi l cc cung. Hai cung e1, e2 tng ng vi cng mt
cp nh c gi l cung lp.
Trong cc phn tip theo ch yu chng ta s lm vic vi n th v hng v n
th c hng. V vy, cho ngn gn, ta s b qua tnh t n khi nhc n chng.
2. CC THUT NG C BN
nh ngha 2.1
Hai nh u v v ca th v hng G c gi l k nhau nu (u,v) l cnh ca th G.
Nu e = (u, v) l cnh ca th ta ni cnh ny l lin thuc vi hai nh u v v, hoc
1

cng ni l ni nh u v nh v, ng thi cc nh u v v s c gi l cc nh u ca
cnh (u, v).
c th bit c bao nhiu cnh lin thuc vi mt nh, ta a vo nh ngha sau
nh ngha 2.2
Ta gi bc ca nh v trong th v hng l s cnh lin thuc vi n v s k hiu l
deg(v).

Th d 1.
Xt th cho trong hnh 1, ta c

deg(a) = 1, deg(b) = 4, deg(c) = 4, deg(f) = 3,


deg(d) = 1, deg(e) = 3, deg(g) = 0
nh bc 0 gi l nh c lp. nh bc 1 c gi l nh treo. Trong v d trn nh g l
nh c lp, a v d l cc nh treo. Bc ca nh c tnh cht sau:
nh l 1.2
Gi s G = (V, E) l th v hng vi m cnh. Khi tng bc ca tt c cc nh bng
hai ln s cnh.
Ta c cng thc :

deg(v) = 2m=2 E
vV

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


trongdeg(v). T suy ra tng tt c cac bc ca cac nh bng hai ln s cnh .
Th d 2.1
th vi n nh c bc l 6 c bao nhiu cnh?
Gii: Theo nh l 1 ta c 2m = 6n. T suy ra tng cc cnh ca th l 3n.
H qu 1.2
Trong th v hng, s nh bc l (ngha l nh c bc l s l) l mt s chn.
Chng minh: Tht vy, gi O v U tng ng l tp nh bc l v tp nh bc chn ca
th . ta c
2

2m= deg(v) = deg(v) + deg( v) . Do deg(v) l chn vi v l nh trong U nn tng


vV

vO

vU

deg(v) l s chn . T suy ra tng deg(v) ( chnh l tng cc nh bc l) cng l


vU

vO

mt s chn, do tt c cc s hng ca n l l, nn tng ny phi gm mt s chn cc s


hng . V vy, s nh bc l phi l mt s chn.
nh ngha 3.2
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 cng ni cung ny l i ra khi nh u v vo nh v.
nh u(v) s c g l nh u (cui) ca cung (u,v).
Tng t nh khi nim bc, i vi th c hng ta c khi nim bn bc ra v bn bc
vo ca mt nh.
nh ngha 4.2
Ta gi bn bc ra (bn bc vo) ca nh v trong th c hng l s cung ca th i
ra khi n (i vo n) v k hiu l deg+(v) (deg -(v))

Th d 3.2
Xt th cho trong hnh 2. Ta c

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


deg+(a)=3, deg+(b)=1, deg+(c)=1, deg+(d)=2, deg+(e)=2.
Do mi cung (u, v) s 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 2.2
Gi s G = (V, E) l th c hng. Khi
Tng tt c cc bn bc ra bng tng tt c cc bn bc vo bng s cung.

deg

vV

(v) = deg (v) = E


vV

th v hng thu c bng cch b qua hng trn cc cung c gi l th v


hng tng ng vi th c hng cho.
3. NG I. CHU TRNH. TH LIN THNG
nh ngha 1.3
ng i di n t nh u n nh v, trong n l s nguyn dng, trn th v
hng G = (V, E) l dy x0, x1,, xn-1, xn
trong u = x0 , v = xn , (xi , xi+1) E, i = 0, 1, 2,, n-1.
ng i ni trn cn c th biu din di dng dy cc cnh:
(x0, x1), (x1, x2), , (xn-1, xn)
nh u gi l nh u, cn nh v gi l nh cui ca ng i. ng i c nh u
trng vi nh cui (tc l u = v) c gi l chu trnh. ng i hay chu trnh c gi
l n( hay s cp) nu nh khng c cnh no b lp li.
Th d 1.3
Trn th v hng cho trong hnh 1: a, d, c, f, e l ng i n di 4. Cn d, e, c, a
khng l ng i, do (c,e) 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 l 5 khng phi l ng i n, do cnh (a, b) c
mt trong n 2 ln.

Khi nim ng i v chu trnh trn th c hng c nh ngha hon ton tng t
nh trong trng hp th v hng, ch khc l ta c ch n hng trn cc cung.
nh ngha 2.3
ng i di n t nh u n nh v, trong , n l s nguyn dng, trn th c
hng G = (V, E) l dy x0, x1,, xn-1, xn
trong u = x0, v = xn, (xi, xi+1) E, i = 0, 1, 2,, n-1.
ng i ni trn cn c th biu din di dng dy cc cung:
4

(x0, x1), (x1, x2), , (xn-1, xn)


nh u gi l nh u, cn nh v gi l nh cui ca ng i. ng i c nh u
trng vi nh cui (tc l u = v) c gi l chu trnh. ng i hay chu trnh c gi
l n( hay s cp) nu nh khng c cung no b lp li.
Th d 2.3
Trn th c hng cho trong hnh 1: a, d, c, f, e l ng i n di 4. Cn d, e, c, a
khng l ng i, do (c,e) 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 l 5 khng phi l ng i n, do cnh (a, b) c
mt trong n 2 ln.
nh ngha 3.3
th v hng G = (V, E) c gi l lin thng nu lun tm c ng i gia hai
nh bt k ca n.
nh ngha 4.3

a) Cho hai th G=<X,E> v G1=<X1, E1> . ta ni G1 l th con ca G nu :


X1 X, E1E
Vi mi cnh u=(i,j)E ca G , nu uE1( ngha l nu u cng l cnh ca G1) Th i,j
X1.

b) th b phn. Cho th G1=<X1,E1 > l th con ca G =<X,E> . G1 gi l b phn


ca G nu X1=X .
Trong trng hp th l khng lin thng, n s r ra thnh mt s th con lin thng
i mt khng c nh chung. Nhng th con lin thng nh vy ta s gi l cc thnh
phn lin thng ca th.
nh ngha 5.3
nh v c gi l nh r nhnh( nh khp) nu vic loi b v cng vi cc cnh lin
thuc vi n khi th lm tng s thnh phn lin thng ca th. Cnh e c gi l
cu nu vic loi b n khi th lm tng s thnh phn lin thng ca th.
nh ngha 6.3
th c hng G = (V, E) c gi l lin thng mnh nu lun tm c ng i gia
hai nh bt k ca n.
nh ngha 7.3
th c hng G = (V, E) c gi l lin thng yu nu th v hng tng ng vi
n l v hng lin thng.
4. MT S DNG TH C BIT
5

a. th y .
th y n nh, k hiu bi Kn, l n th v hng m gia hai nh bt k ca n
lun c cnh ni.
Cc th K3, K4, K5 cho trong hnh di y.

Hnh 1. th y K3, K4, K5


th y Kn c tt c n(n-1)/2 cnh, n l n th c nhiu cnh nht.
b. th vng : th vng Cn (n 3) gm n nh v1,v2,,vn v cc cnh (v1,v2), (v2,v3),
,(vn-1,vn),(vn,v1)

c. thi bnh xe.


th Wn thu c t Cn bng cch b sung vo mt ng mi ni vi tt c cc nh ca
Cn ( xem hnh -3)

d. th lp phng.
th lp phng n nh Qn l th vi cc nh biu din 2n xu nh phn di n . Hai
nh ca n k nhau nu nh hai xu nh phn tng ng ci khc nhau 1 bit .

(hnh -4 ) cho Qn vi n=1,2,3.


e.. th hai pha.
n th G=(V,E) c gi l hai pha nu nh tp nh V ca n c th phn hoch
thnh hai tp X v Y sao cho mi cnh ca th ch ni mt nh no trong X vi mt
nh no trong Y. Khi ta s s dng k hiu G=(X Y, E) ch th hai pha vi
tp nh X Y.
nh l sau y cho php nhn bit mt n th c phi l hai pha hay khng.
Cho G=(V,E) l m th hai pha , v hng vi hai tp X v Y nh ngha nh
trn . G c gi l th hai pha y nu : G n v mi cp nh (i,j) m iX, jY
th c ng mt cnh ca G ni i vi j .
Nu X = n v Y= m Th G c m n cnh . v khi ta gi l K m,n

Hnh 2. th hai pha y

e. ng cu ( ng hnh hay ng phi ) ca th


V mt trc quan hai th G1 v G2 c gi l ng cu vi nhau , K hiu l G1 G2
nu c th v li ( Bng cch di hnh , di cnh ,..) sao cho hai th c hnh v nh nhau .
e.1 ng cu th v hng .
Cho hai th v hng G1=<X1,E1> v G2=< X2,E2> Hai th ny c gi l ng cu
vi nhau nu tn ti hai song nh f1 v g1 sao cho:
f1: X1X2 v g1: E1E2
Nu eE1 lin kt vi cp nh (x,y) X12 xt trong th G1 th cnh f1(e) s
lin kt vi cp nh ( f1(x),f1(y)) X22 xt trong th G2 ( Ta gi iu ny l php tng
ng cnh)
e.2 ng cu th c hng .

Cho hai th c hng G1=<X1,E1> v G2=< X2,E2> Hai th ny c gi l ng cu


vi nhau nu tn ti hai song nh f1 v g1 tha mn iu kin sau:
f1: X1X2 v g1: E1E2
Nu cung eE1 lin kt vi cp nh (x,y) X12 xt trong th G1 th cung
f1(e) s lin kt vi cp nh ( f1(x),g1(y)) X22 xt trong th G2 .

Th d:

( Hnh -4)
Hai th ny ng cu nh php tng ng nh -cnh di y :
f1(1)=a,f1(2)=b,f1(3)=c, f1(4)=d
g1(u1)=e 1 , g1(u2)=e2 , g1(u3)=e3 g1(u4)= e4 , g1(u5) = e5 , g(u6)=e6
Hin nhin, nu hai th ng hnh ( hay ng phi) vi nhau th chng phi c :
-

Cng s nh

Cng s nh bc k , k nguyn 0

Cng s cnh

Cng s thnh phn lin thng

Nu hai th c ma trn lin kt ( theo th t nh no ) bng nhau th ng hnh ( hay


ng phi) vi nhau
f. th b

Xt mt n th G=(V,E) . B ( complement) ca G l n th G =(V, E ) nh


ngha bi:

v,uV, vu E vuE
g. Tp n nh ca th
g.1. Tp n nh trong
Cho th G=(V,E) .Tp con A V c gi l tp n nh trong ca G nu mi cp nh
thuc A u khng k nhau ( khng c cnh hoc cung ni chng )
Tp n nh trong cc i : L tp n nh trong khng th thm nh no na . S phn
t ca tp n nh trong cc i nhiu phn t nht l s n nh trong . K hiu (G)
Nhn xt : Mi tp con ca n nh trong cng l tp n nh trong .
b) Cch tm tp n nh trong

Duyt quy tm cc t hp chp k ca n ( nh) . Vi mi t hp kim tra xem n c tha


mn nh ngha l mt tp n nh trong hay khng .
Cch gii trn cn cho bit s n nh trong . Hn ch : ch duyt vi s nh nh .
g.2. Tp n nh ngoi
a) nh ngha
Tp nh B thuc th G(V,E) l tp n nh ngoi nu vi mi nh xV\B u c t nht
mt cnh ( nu G v hng) hoc cung ( nu G c hng) ni vi nh yB.
Tp n nh ngoi cc tiu l tp n nh ngoi khng th bt phn t n . S phn t tp
n nh ngoi ca tiu t nht phn t l s n nh ngoi . K hiu : (G).
Nhn xt : Mi tp con ca n nh ngoi cha tp n nh ngoi cng l tp n nh ngoi
.
b) Cch tm tp n nh ngoi
Duyt quy tm cc t hp chp k ca n ( nh) . Vi mi t hp kim tra xem n c tha
mn nh ngha l mt tp n nh ngoi hay khng .
Cch gii trn cn cho bit s n nh ngoi . Hn ch : ch duyt vi s nh nh .Ngoi
cch gii trn cn c th t chc th ngoi hai pha tm tp n nh ngoi nh nht.
Th d: V tp n nh trong/ngoi
Trn hnh -5
{1,4,7} l mt trong cc tp n nh trong
{ 1,2,8} l mt trong cc tp n nh trong
Cc i , { 1,4,7,9} l mt trong cc tp n nh
Trong cc i c nhiu thnh phn nht . S n
nh trong l 4 .
{ 1,2,8,3} l mt trong cc tp n nh ngoi , { 1,2 8}

Hnh - 5

L mt trong cc tp n nh ngoi ca tiu, {5,8} l mt


Trong cc tp n nh ngoi cc tiu nhng c s phn t t nht .S n nh ngoi l 2.

h. Tp nhn ca th .
Nhn ca th l mt tp mt s nh va l tp n nh trong va l tp n nh ngoi .

i. TH PHNG.
i.1.nh ngha 1: Mt th c gi l phng nu n c th v c trn mt mt phng
m khng c cc cnh no ct nhau ( mt im khng phi l im mt ca cc cnh).
Hnh v nh th gi l mt biu din phng ca th.
9

Mt th c th l phng ngay c khi n thng c v vi nhng cnh ct nhau,


nhng ta c th v n bng cch khc khng c cc cnh ct nhau.
Th d 1: 1) Mt cy, mt chu trnh n l mt th phng.
2) K4 l th phng bi v c th v li nh hnh bn khng c ng ct nhau

3) Xt th G nh trong hnh-a di y. C th biu din G mt cch khc nh trong


hnh-b, trong bt k hai cnh no cng khng ct nhau.

Hnh -a

Hnh -b

i.2. nh ngha 2: Cho G l mt th phng. Mi phn mt phng gii hn bi mt chu


trnh n khng cha bn trong n mt chu trnh n khc, gi l mt min (hu hn) ca
th G. Chu trnh gii hn min l bin ca min. Mi th phng lin thng c mt
min v hn duy nht (l phn mt phng bn ngoi tt c cc min hu hn). S cnh t
nht to thnh bin gi l ai ca G; trng hp nu G khng c chu trnh th ai chnh l s
cnh ca G.

Th d 2: 1) Mt cy ch c mt min, l
min v hn.
2) th phng hnh bn c 5 min, M5
l min v hn, min M1 c bin abgfa,
min M2 c bin l bcdhgb, Chu
trnh n abcdhgfa khng gii hn mt
min v cha bn trong n chu trnh n
khc l abgfa.
10

i.3. nh l (Euler, 1752): Nu mt th phng lin thng c n nh, p cnh v d min


th ta c h thc:
n p + d = 2.
Chng minh: Cho G l th phng lin thng c n nh, p cnh v d min.
Ta b mt s cnh ca G c mt cy khung ca G. Mi ln ta b mt cnh (p
gim 1) th s min ca G cng gim 1 (d gim 1), cn s nh ca G khng thay i (n
khng i). Nh vy, gi tr ca biu thc n p + d khng thay i trong sut qu trnh ta
b bt cnh ca G c mt cy. Cy ny c n nh, do c n 1 cnh v cy ch c
mt min, v vy:
n p + d = n (n 1) + 1 = 2.
H thc n p + d = 2 thng gi l h thc Euler cho hnh a din, v c Euler
chng minh u tin cho hnh a din c n nh, p cnh v d mt. Mi hnh a din c th
coi l mt th phng. Chng hn hnh t din ABCD v hnh hp ABCDABCD c th
biu din bng cc th di y.

i.3.1 H qu : Trong mt th phng lin thng tu , lun tn ti t nht mt nh c


bc khng vt qu 5.
Chng minh: Trong th phng mi min c bao bng t nht 3 cnh. Mt khc, mi
cnh c th nm trn bin ca ti a hai min, nn ta c 3d 2p.
Nu trong th phng m tt c cc nh u c bc khng nh hn 6 th do mi
nh ca th phi l u mt ca t nht 6 cnh m mi cnh li c hai u mt nn ta c
6n 2p hay 3n p. T suy ra 3d+3n 2p+p hay d+n p, tri vi h thc Euler
d+n=p+2.
j. TH KHNG PHNG.
j.1. nh l 1: th phn i y K3,3 l mt th khng phng.
Chng minh: Gi s K3,3 l th phng. Khi ta c mt th phng vi 6 nh (n=6)
v 9 cnh (p=9), nn theo nh l Euler th c s min l d=pn+2=5.
y, mi cnh chung cho hai min, m mi min c t nht 4 cnh. Do 4d 2p,
tc l 4x5 2x9, v l.

11

Nh vy nh l ny cho ta li gii ca bi ton Ba nh ba ging, ngha l khng


th thc hin c vic lm cc ng khc n ging sao cho cc ng ny i mt
khng giao nhau.
j.2. nh l 2: th y K5 l mt th khng phng.
Chng minh: Gi s K5 l th phng. Khi ta c mt th phng vi 5 nh (n=5) v
10 cnh (p=10), nn theo nh l Euler th c s min l d=pn+2=7.
Trong K5, mi min c t nht 3cnh, mi cnh chung cho hai min, v vy 3d 2n,
tc l 3x7 2x10, v l.
Ch : Ta thy K3,3 v K5 l khng phng. R rng, mt th l khng phng nu n
cha mt trong hai th ny nh l th con. Hn na, tt c cc th khng phng cn
phi cha th con nhn c t K3,3 hoc K5 bng mt s php ton cho php no .
Cho th G, c cnh (u,v). Nu ta xo cnh (u,v), ri thm nh w cng vi hai
cnh (u,w) v (w,v) th ta ni rng ta thm nh mi w (bc 2) t trn cnh (u,v) ca G.
th G c gi l ng phi vi th G nu G c c t G bng cch thm
cc nh mi (bc 2) t trn cc cnh ca G.
Th d 3:

th G l ng phi vi th G.
Nh ton hc Ba Lan, Kuratowski, thit lp nh l sau y vo nm 1930. nh
l ny biu th c im ca cc th phng nh khi nim th ng phi.
j.3.nh l (Kuratowski): th l khng phng khi v ch khi n cha mt th con
ng phi vi K3,3 hoc K5.
Th d 4:

12

th trong hnh 1 v 2 l th phng. Cc th ny c 6 nh, nhng khng cha


th con K3,3 c v c nh bc 2, trong khi tt c cc nh ca K3,3 u c bc 3; cng
khng th cha th con K5 c v c nhng nh bc nh hn 4, trong khi tt c cc
nh ca K5 u c bc 4.
th trong hnh 3 l th khng phng v nu xo nh b cng cc cnh (b,a),
(b,c), (b,f) ta c th con l K5.

k. T MU TH.
k.1. T mu bn :
Mi bn c th coi l mt th phng. Trong mt bn , ta coi hai min c
chung nhau mt ng bin l hai min k nhau (hai min ch c chung nhau mt im bin
khng c coi l k nhau). Mt bn thng c t mu, sao cho hai min k nhau
c t hai mu khc nhau. Ta gi mt cch t mu bn nh vy l mt cch t mu
ng.
m bo chc chn hai min k nhau khng bao gi c mu trng nhau, chng ta
t mi min bng mt mu khc nhau. Tuy nhin vic lm ni chung l khng hp l.
Nu bn c nhiu min th s rt kh phn bit nhng mu gn ging nhau. Do vy
ngi ta ch dng mt s mu cn thit t bn . Mt bi ton c t ra l: xc nh
s mu ti thiu cn c t mu ng mt bn .
Th d 5: Bn trong hnh bn c 6 min,
nhng ch cn c 3 mu (vng, , xanh)
M3
M4
M1
t ng bn ny. Chng hn, mu vng
M2
c t cho M1 v M4, mu c t cho M2
M5
M6
v M6, mu xanh c t cho M3 v M5.

k.2. T mu th:
Mi bn trn mt phng c th biu din bng mt th, trong mi min ca
bn c biu din bng mt nh; cc cnh ni hai nh, nu cc min c biu din
bng hai nh ny l k nhau. th nhn c bng cch ny gi l th i ngu ca
bn ang xt. R rng mi bn trn mt phng u c th i ngu phng. Bi ton
t mu cc min ca bn l tng ng vi bi ton t mu cc nh ca th i
ngu sao cho khng c hai nh lin k nhau c cng mt mu, m ta gi l t mu ng cc
nh ca th.
S mu t nht cn dng t mu ng th G c gi l sc s ca th G v
k hiu l (G).
Th d 6:

13

Ta thy rng 4 nh b, d, g, e i mt k nhau nn phi c t bng 4 mu khc nhau. Do


(G) 4. Ngoi ra, c th dng 4 mu nh s 1, 2, 3, 4 t mu G nh sau:

Nh vy (G) = 4.
k.3. Mnh : Nu th G cha mt th con ng phi vi th y Kn th (G)
n.
Chng minh: Gi H l th con ca G ng phi vi Kn th (H) n. Do (G) n.
k.4. Mnh : Nu n th G khng cha chu trnh di l th (G) =2.
Chng minh: Khng mt tnh cht tng qut c th gi s G lin thng. C nh nh u ca
G v t n bng mu 0 trong hai mu 0 v 1. Vi mi nh v ca G, tn ti mt ng i t
u n v, nu ng ny c di chn th t mu 0 cho v, nu ng ny c di l th t
mu 1 cho v. Nu c hai ng i mang tnh chn l khc nhau cng ni u vi v th d thy
rng G phi cha t nht mt chu trnh di l. iu mu thun ny cho bit hai mu 0 v
1 t ng th G.
k.5. Mnh : Vi mi s nguyn dng n, tn ti mt th khng cha K3 v c sc s
bng n.
Chng minh: Ta chng minh mnh bng quy np theo n.
Trng hp n=1 l hin nhin.
Gi s ta c th Gn vi kn nh, khng cha K3 v c sc s l n. Ta xy dng
th Gn+1 gm n bn sao ca Gn v thm knn nh mi theo cch sau: mi b th t (v1, v2,
, vn), vi vi thuc bn sao Gn th i, s tng ng vi mt nh mi, nh mi ny c
ni bng n cnh mi n cc nh v1, v2, , vn. D thy rng Gn+1 khng cha K3 v c sc
s l n+1.
k.6. nh l (nh l 5 mu ca Kempe-Heawood): Mi th phng u c th t
ng bng 5 mu.
Chng minh: Cho G l mt th phng. Khng mt tnh cht tng qut c th xem G l
lin thng v c s nh n 5. Ta chng minh G c t ng bi 5 mu bng quy np theo
n.

14

Trng hp n=5 l hin nhin. Gi s nh l ng cho tt c cc th phng c s


nh nh hn n. Xt G l th phng lin thng c n nh.
Theo H qu i.3.1 , trong G tn ti nh a vi deg(a) 5. Xo nh a v cc cnh
lin thuc vi n, ta nhn c th phng G c n1 nh. Theo gi thit quy np, c th
t ng cc nh ca G bng 5 mu. Sau khi t ng G ri, ta tm cch t nh a bng mt
mu khc vi mu ca cc nh k n, nhng vn l mt trong 5 mu dng. iu ny
lun thc hin c khi deg(a) < 5 hoc khi deg(a)=5 nhng 5 nh k a c t bng 4
mu tr xung.
Ch cn phi xt trng hp deg(a)=5 m 5 nh k a l b, c, d, e ,f c t bng 5
mu ri. Khi trong 5 nh b, c, d, e ,f phi c 2 nh khng k nhau, v nu 5 nh i
mt k nhau th b c d e f l th y K5 v y l mt th khng phng, do G
khng phng, tri vi gi thit. Gi s b v d khng k nhau (Hnh 1).
(5
)

f
a

(1)

(2
)

b
c
m

c
(3
)

(5
)

e (2
(1
)

(2
)

c (2

d (1
)

(4
)

Hnh 1
Hnh 2
Hnh 3
Xo 2 nh b v d v cho k a nhng nh trc k b hoc k d m khng k a (Hnh 2),
ta c th mi G c n2 nh. Theo gi thit quy np, ta c th t G ng bng 5
mu. Sau khi cc nh ca G c t ng ri (Hnh 2), ta dng li 2 nh b v d, ri t b
v d bng mu t cho a (mu 1, Hnh 3), cn a th c t li bng mu khc vi mu
ca b, c, d, e, f. V b v d khng k nhau c t bng cng mu 1, nn vi 5 nh ny
ch mi dng ht nhiu lm 4 mu.. Do G c t ng bng 5 mu.
k.7. nh l (nh l 4 mu ca Appel-Haken): Mi th phng u c th t ng
bng 4 mu.
nh l Bn mu u tin c a ra nh mt phng on vo nm 1850 bi mt
sinh vin ngi Anh tn l F. Guthrie v cui cng c hai nh ton hc M l Kenneth
Appel v Wolfgang Haken chng minh vo nm 1976. Trc nm 1976 cng c nhiu
chng minh sai, m thng thng rt kh tm thy ch sai, c cng b. Hn th na
c nhiu c gng mt cch v ch tm phn th d bng cch c v bn cn hn bn
mu t n.
C l mt trong nhng chng minh sai ni ting nht trong ton hc l chng minh
sai bi ton bn mu c cng b nm 1879 bi lut s, nh ton hc nghip d Lun
15

n tn l Alfred Kempe. Nh cng b li gii ca bi ton bn mu, Kempe c cng


nhn l hi vin Hi Khoa hc Hong gia Anh. Cc nh ton hc chp nhn cch chng
minh ca ng ta cho ti 1890, khi Percy Heawood pht hin ra sai lm trong chng minh
ca Kempe. Mt khc, dng phng php ca Kempe, Heawood chng minh c bi
ton nm mu (tc l mi bn c th t ng bng 5 mu).
Nh vy, Heawood mi gii c bi ton nm mu, cn bi ton bn mu vn
cn v l mt thch i vi cc nh ton hc trong sut gn mt th k. Vic tm li
gii ca bi ton bn mu nh hng n s pht trin theo chiu hng khc nhau
ca l thuyt th.
Mi n nm 1976, khai thc phng php ca Kempe v nh cng c my tnh in
t, Appel v Haken tm ra li gii ca bi ton bn mu. Chng minh ca h da trn
s phn tch tng trng hp mt cch cn thn nh my tnh. H ch ra rng nu bi
ton bn mu l sai th s c mt phn th d thuc mt trong gn 2000 loi khc nhau v
ch ra khng c loi no dn ti phn th d c. Trong chng minh ca mnh h dng
hn 1000 gi chy my. Cch chng minh ny gy ra nhiu cuc tranh ci v my tnh
ng vai tr quan trng bit bao. Chng hn, liu c th c sai lm trong chng trnh v
iu dn ti kt qu sai khng? L lun ca h c thc s l mt chng minh hay khng,
nu n ph thuc vo thng tin ra t mt my tnh khng ng tin cy?

k.8. Nhng ng dng ca bi ton t mu th:


1) Lp lch thi: Hy lp lch thi trong trng i hc sao cho khng c sinh vin no c
hai mn thi cng mt lc.
C th gii bi ton lp lch thi bng m hnh th, vi cc nh l cc mn thi, c
mt cnh ni hai nh nu c sinh vin phi thi c hai mn c biu din bng hai nh
ny. Thi gian thi ca mi mn c biu th bng cc mu khc nhau. Nh vy vic lp
lch thi s tng ng vi vic t mu th ny.
Chng hn, c 7 mn thi cn xp lch. Gi s cc mn hc uc nh s t 1 ti 7 v
cc cp mn thi sau c chung sinh vin: 1 v 2, 1 v 3, 1 v 4, 1 v 7, 2 v 3, 2 v 4, 2 v 5,
2 v 7, 3 v 4, 3 v 6, 3 v 7, 4 v 5, 4 v 6, 5 v 6, 5 v 7, 6 v 7. Hnh di y biu din
th tng ng. Vic lp lch thi chnh l vic t mu th ny. V s mu ca th ny
l 4 nn cn c 4 t thi.

16

2) Phn chia tn s: Cc knh truyn hnh t s 1 ti s 12 c phn chia cho cc i


truyn hnh sao cho khng c i pht no cch nhau khng qu 240 km li dng cng mt
knh. C th chia knh truyn hnh nh th no bng m hnh t mu th.
Ta xy dng th bng cch coi mi i pht l mt nh. Hai nh c ni vi
nhau bng mt cnh nu chng cch nhau khng qu 240 km. Vic phn chia knh tng
ng vi vic t mu th, trong mi mu biu th mt knh.
3) Cc thanh ghi ch s: Trong cc b dch hiu qu cao vic thc hin cc vng lp
c tng tc khi cc bin dng thng xuyn c lu tm thi trong cc thanh ghi ch s
ca b x l trung tm (CPU) m khng phi trong b nh thng thng. Vi mt vng
lp cho trc cn bao nhiu thanh ghi ch s? Bi ton ny c th gii bng m hnh t mu
th. xy dng m hnh ta coi mi nh ca th l mt bin trong vng lp. Gia hai
nh c mt cnh nu cc bin biu th bng cc nh ny phi c lu trong cc thanh ghi
ch s ti cng thi im khi thc hin vng lp. Nh vy s mu ca th chnh l s
thanh ghi cn c v nhng thanh ghi khc nhau c phn cho cc bin khi cc nh biu th
cc bin ny l lin k trong th.

17

Bi tp chng I
1-1.V th (nu tn ti)
a.V mt th c 4 nh vi bc cc nh l 3, 2, 1.
b.V cc th m mi nh ca n u c bc l ln lt l k (1 k 5)
c.V cc th m mi nh ca n u c bc l 3 v c s nh ln lt l:4,5,6,8.
d.V mt th c 15 nh v mi nh ca n u c bc l 5.
1-2
a. Mt th c 19 cnh v mi nh u c bc 3, hi th ny c ti a bao nhiu nh ?
b.Cho mt th v hng c n nh. Hi th ny c th c ti a bao nhiu cnh. Trong trng
hp s cnh l ti a th mi nh s c bc l bao nhiu ?
c. Cho mt th v hng c n nh v 2n cnh. Chng minh rng trong th ny lun tn ti
mt nh c bc khng nh hn 4.
d. Chng minh rng trong mt n th v hng nu khng cha chu trnh th s lun tn ti t
nht l hai nh treo.
1-3.a.Xt th v hng n c s nh n > 2 . Chng minh rng th c t nht 2 nh cng bc
vi nhau.
b.Cho 1 th G c cha ng 2 nh bc l (cc nh khc nu c phi bc chn) Chng minh rng
2 nh ny lin thng vi nhau.
c.xt th v hng n c s nh n > 2. Gi s th khng c nh no c bc < (n-1)/2.
Chng minh rng th ny lin thng
d.Chng minh rng mt n th v hng l hai pha nu v ch nu s mu ca n l 2.
1-4. Tm th n m mi nh ca n u c bc 3 v c :
a) 4 nh. b) 6 nh
c) 5 nh.

d) 8 nh

1-5.Gi s c 6 cuc mitting A,B,C,D,E,F cn c t chc. Mi cuc mitting c t chc trong


mt bui. Cc cuc mitting sau khng c din ra ng thi:BEF, CEF, ABE, CD, AD. Hy b tr
cc cuc mitting vo cc bui sao cho s bui din ra l t nht.
1-6. Tm s nh ca G bit rng G c :
a) 12 cnh v mi nh u c bc 2 .
b) 15 cnh , 3 nh bc 4 v cc nh cn li bc 3.
c) 6 cnh v mi nh u c bc bng nhau .
1-7. Cho mt n th G c n nh v k thnh phn th c ti a l :
1
(n k )(n k + 1) cnh
2
18

1-8. C th c mt nhm 9 ngi trong mi ngi u ch quen bit ng 5 ngi khc nhau
trong nhm hay khng ?
1-9. Bit rng mi nh ca mt th G u c bc bng s l p . Chng minh rng s cnh ca G
l mt bi ca p .
1-10. Hai th sau c ng cu vi nhau khng ?

1-11. C 20 i bng thi u vi nhau , mi i phi u mt trn vi cc i khc . Chng minh


rng vo bt c thi im no cng c hai i u mt s trn nh nhau .
1-12. Chng minh rng trong mt lp hc ty s hc sinh m mi ngi c mt s l bn thn
trong lp, lun l mt s chn .
1-13. Chng minh rng s ngi m mi ngi c mt l ln bt tay trn tri t l mt s chn .
1-14. Chng minh rng trong mt cuc hp ty gm t 2 i biu tr ln . Lun lun c t nht 2
i biu, m h c ngi quen bng nhau trong cc i biu n tham d hp.
1-15. Mt cuc hi tho quc t vi n (n 4) i biu tham gia. C bn i biu n d c t nht
mt ngi ni chuyn trc tip c vi 3 ngi cn li. Chng minh rng c t nht (n-3) i biu,
m mi ngi c th ni chuyn trc tip vi tt c nhng ngi cn li .
1-16. Mi by nh khoa hc n d hi ngh quc t .Mi ngi trong s hc ch bit mt trong
ba ngoi ng : Anh, Nga, Php . Chng minh rng c t nht ba nh khoa hc cng bit mt trong
ba ngoi ng ni trn .

19

CHNG 2

BIU DIN TH TRN MY VI TNH


lu tr th v thc hin cc thut ton khc nhau vi th trn my tnh cn phi tm
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 ca thut ton. V vy, vic chn la cu trc d liu biu din
th ph thuc vo tng tnh hung c th (bi ton v thut ton c th). Trong mc ny chng ta
s xt mt s phng php c bn c s dng biu din th trn my tnh.
1. MA TRN K. MA TRN TRNG S
Xt n th 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.
A={ai,j : i,j=1, 2,. . . ,n}
Vi cc phn t ca A=(aij) c xc nh theo qui tc sau y:
ai, j = 0, nu (i,j) E v
ai,j = 1 , nu (i,j) E, (i, j=1, 2,. . .,n.)
Th d 1. Ma trn trn k ca th v hng (G) cho trong hnh 1 l:
1

Cc tnh cht ca ma trn k:


1) R rng ma trn k ca th v hng l ma trn i xng, tc l a[i,j]=a[j,i], i,j=1,2,. . .,n.
2)Tng cc phn t trn dng i (ct j) ca ma trn k chnh bng bc ca nh i (nh j).
Ma trn k ca th c hng
20

c nh ngha mt cch hon ton tng t.


Th d 2.
th c hng G1 cho trong hnh 1 c ma trn k l ma trn sau:
1

Lu rng ma trn k ca th c hng khng phi l ma trn i xng.


Ch :
Trn y chng ta ch xt n th. Ma trn k ca a th c th xy dng hon ton tng t,
ch khc l thay v ghi 1 vo v tr a[i,j] nu (i,j) l cnh ca th, chng ta s ghi k l s cnh ni
hai nh i, j.
Ma trn trng s
Trong rt nhiu vn ng dng ca l thuyt th, mi cnh e=(u,v) ca th c gn vi
mt con s c(e) (cn vit l c(u,v) - gi l trng s ca cnh e). th trong trng hp nh vy
c gi l th c trng s. Trong trng hp th c trng s, thay v biu din th bng
trn k, ta biu din th bng vic s dng ma trn trng s.
C= {c[i,j], i,j=1, 2,. . .,n}
vi c[i,j] = c(i,j) nu (i,j) E
v c[i,j] = nu (i,j) E
trong s , tu tng trng hp c th, c th c t bng mt trong cc gi tr sau: 0, + ,
- .
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.2.Ma trn lin thuc nh-cnh


21

Xt G = (V,E) l n th c hng, gi s V ={ 1, 2, ..., n }; E = { e1, e2, ..., em}. Ma trn lin


thuc nh cnh c n dng (1 dng ng vi 1 nh) v m ct (1 ct ng vi 1 cnh). Trong
1 nu nh i l nh u ca cung ej
Aij = -1 nu nh i l nh cui ca cung ej
0 nu nh i khng l u mt ca cnh ej
V d: Xt th

( Hnh -2 )

2.3.DANH SCH

(1,2)

(1,3)

(2,3)

(2,4)

(3,5)

(4,5)

(4,6)

(5,2)

(5,6)

-1

-1

-1

-1

-1

-1

-1

-1

-1

CNH (CUNG)
Trong trng hp th tha ( th c s cnh m tho mn bt dng thc: m < 6n) ngi ta
thng dng cch biu din th di dng danh sch cnh.
Trong cch biu din th bi danh sch cnh (cung) chng ta s lu tr danh sch tt c cc cnh
(cung) ca th v hng (c hng). Mt cnh (cung) e = (x,y) ca th s tng ng vi hai
bin Dau[e], Cuoi[e]. nh vy, lu tr th ta cn s dng 2m n v b nh. Nhc im ca
cch biu din ny l xc nh nhng nh no ca th l k vi mt nh cho trc chng ta
phi lm c m php so snh (khi duyt qua danh sch tt c cc cnh ca th).
Ch : Trong trng hp th c trng s ta cn thm m n v b nh lu tr trng s ca cc
cnh.
Th d 3. Danh sch cnh (cung) ca th G (G1) cho trong hnh 1 l:
u
1
1
1
2
2
3
4
4
5

Cui
2
3
5
3
5
4
5
6
6

u
1
1
3
3
5
5
6

Cui
2
3
2
4
4
6
5
22

Danh sch cnh ca G

Danh snh cung ca G1

2.4. DANH SCH K


Trong rt nhiu vn ng dng ca l thuyt th, cch biu din th di dng danh sch k
cng l cch biu din 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,
m ta s k hiu l:
ke(v)= { u V: (v,u) E}

Nh th cho trn ta c danh sch k m t nh sau :


nh u

nh u

23

Bi tp chng II
2-1.Cho th v hng lin thng G nh hnh v bn.
a.Hy biu din th G bng ma trn

k, danh sch cnh.

b.S mu t nht cn dng t mu


mt th c gi l sc s ca
th (bi ton t mu). Hy cho bit

sc s ca th G trn.
2-2.Cho th G nh hnh v bn:

47

26

a.Hy biu din th G bng ma

trn lin thuc nh - cnh, ma trn


trng s, danh sch cung.

b.Gi G l th v hng thu


c bng cch loi b hng trn

cc cung ca th G. Hy cho bit

sc s k ca G v ch ra mt cch t

mu G vi k mu.

2-3. Xt th G gm 8 nh c cho bi ma trn trng s(cc nh ca th c nh s t 1)


0 2

2 0
0
5

0
5
2
3

0 6

0
0
0
0

0
5
0
0
10
3
0
1

5
0
0
0
4
0
7
0

2
0
0
3 6 0
10 3
0
4
0
7
0
1 6
1
0
3
6 3
0
0
5
4

0
0
1
0
0
5
4
0

a.Hy biu din th G bng danh sch k, danh sch cnh.


b. th G c phi l th phng hay khng ? Chng minh.

24

2-4. Xt th c hng G gm 6 nh c cho bi hnh v di y:

a.Hy biu din G bng ma trn trng s v ma trn lin thuc nh cnh.
b.Gi G l th v hng c to bng cch loi b hng trn cc cung ca G. Hy
cho bit sc s k ca G v ch ra mt cch t mu G vi k mu.
2-5.Xt th c hng G gm 5 nh c cho bi hnh v di y:

a.Hy biu din G bng ma trn trng lng v ma trn lin thuc.
b.Gi G l th v hng c to bng cch loi b hng trn cc cung ca G (v b cung
(3,4) c trng lng l 1). Hy cho bit sc s k ca G v ch ra mt cch t mu G vi k mu.

Bi tp thc hnh
2-6.Lp trnh nhp th vi cc phng php biu din: ma trn k, ma trn trng s v danh sch
cnh, ma trn lin thuc.
2-7.Lp trnh cho php chuyn i cu trc d liu biu din th di dng ma trn trng s qua
dng danh sch cnh v ngc li.
2-8.Lp trnh cho php chuyn i cu trc d liu biu din th di dng ma trn k qua dng
danh sch k v ngc li.
2-9.Cho th v hng c biu din bng ma trn k. D liu c lu trn file text dothi.inp
c cu trc nh sau:
Dng u ghi s n, trong n dng tip theo mi dng ghi n s, cc s cch nhau t nht mt
du cch. Hy vit chong trnh thc hin cc yu cu sau:
a.c ma trn k t file dothi.inp
25

b.Kim tra tnh hp l ca ma trn (kim tra xem cc gi a[i][i] c gi tr no khc 0 hay
khng ? kim tra xem c gi tr no m a[i][j] khc a[j][i] hay khng ?)
2-10.Cho mt n th. Hy vit cc hm thc hin cc yu cu sau:
a. th l c hng hay v hng ?
b.Tnh bc ca mi nh.
c.Kim tra xem c phi l th hai pha hay khng?

26

CHNG III

CC THUT TON TM KIM TRN TH V NG DNG


1. TM KIM THEO CHIU SU TRN TH
tng chnh ca thut ton c th trnh by nh sau. Ta s bt u tm kim t mt nh v0 no
ca th. Sau chn u l mt nh tu k vi v 0 v lp li qu trnh i vi u. bc tng
qut, gi s ta ang xt nh v. Nu nh trong s cc nh k vi v tm c nh w l cha c
xt th ta s xt nh ny (n s tr thnh xt) v bt u t n ta s bt u qu trnh tm kim
cn nu nh khng cn nh no k vi v l cha xt th ta ni rng nh ny duyt xong v quay
tr li tip tc tm kim t nh m trc ta n c nh v (nu v=v0, th kt thc tm kim).
C th ni nm na l tm kim theo chiu su bt u t nh v c thc hin trn c s tm kim
theo chiu su t tt c cc nh cha xt k vi v. Qu trnh ny c th m t bi th tc qui sau
y
void DFS(v);
(*tim kiem theo chieu sau bat dau tu dinh v; cac bien chuaxet, Ke la bien toan cuc*)
{
tham_dinh(v);
chuaxet[v]=0;
for u ke(v)
If (chuaxet[u]) DFS(u);
} (*dinh v da duyet xong*)
Khi , tm kim theo chiu su trn th c thc hin nh thut ton sau:
void main()
{
(*Initialization*)
for v V chuaxet[v]=1;
for v V
if (chuaxet[v]) DFS(v);
}
R rng lnh gi DFS(v) s cho php n thm tt c cc nh thuc cng thnh phn lin thng vi
nh v, bi v sau khi thm nh l lnh gi n th tc DFS i vi tt c cc nh k vi n. Mt
khc, do mi khi thm nh v xong, bin chuaxet[v] c t li 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 thm , v vy,
n s xt qua tt c cc nh ca th (khng nht thit phi l lin thng).
nh gi phc tp tnh ton ca th tc, trc ht nhn thy rng s php ton cn thc hin
trong hai chu trnh ca thut ton (hai vng for chng trnh chnh) l c n. Th tc DFS phi
27

thc hin khng qu n ln. Tng s php ton cn pha thc hin trong cc th tc ny l O(n+m),
do trong cc th tc ny ta phi xt qua tt c cc cnh v cc nh ca th. Vy phc tp tnh
ton ca thut ton l O(n+m).
V d : Xt th cho trong hnh sau . Cc nh ca n c nh s li theo th tc
chng c thm theo th tc tm kim theo chiu su m t trn .

3( 9)
2(2)
1(1)

7(8)
6(4)

4( 3
)
10(11
)

11(12
)

5( 5
)
8(6)

13(10
)

9(7)

12(13
)

V d
TIMSAU.INP

13
0101000001000
1001000000000
0000001000000
1100011000000
0000010110000
0001101000001
0011010000000
0000100010000
0000100100000
1000000000110
0000000001010
0000000001100
0000010000000

TIMSAU.OUT

3 13

10

11 12

Ch s mi (trong ngoc) ca cc nh c nh li theo th t chng c thm


theo thut ton tm kim theo chiu su

Ta c th m t bng Ngn ng C nh sau:


28

#include<stdio.h>
#include<conio.h>
#include<io.h>
#include<stdlib.h>
#include<dos.h>
#define MAX 20
#define TRUE 1
#define FALSE 0
/*-------------tim kiem theo chieu sau-----------*/
void Init(int A[][MAX],int *n)
{
FILE *fp;
int i,j;
fp=fopen("c:\TIMRONG.INP","r");
if(fp==NULL)
{
printf("\n khong co tap *.inp");
delay(2000);
return;
}
fscanf(fp,"%d",n);
printf("\n so dinh cua do thi la=%d",*n);
printf("\n\n ma tran ke cua do thi la");
for(i=1;i<=*n;i++)
{
printf("\n\n");
for(j=1;j<=*n;j++)
{
fscanf(fp,"%d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
}
/*----------------------------------------------*/
void DFS(int A[][MAX],int n,int v,int chuaxet[])
{
29

int u;
printf("%3d",v);chuaxet[v]=FALSE;
for(u=1;u<=n;u++)
{
if(A[v][u]==1 && chuaxet[u])
DFS(A,n,u,chuaxet);
}
}
/*---------------------------------------------*/
void main()
{
clrscr();
int A[MAX][MAX],n,chuaxet[MAX];
Init(A,&n);
for(int i=1;i<=n;i++) chuaxet[i]=TRUE;
printf("\n\n\n\n");
for(i=1;i<=n;i++)
if( chuaxet[i])
DFS(A,n,i,chuaxet);
getch();
}
2. TM KIM THEO CHIU RNG TRN TH

rng trong thut ton tm kim theo chiu su nh c thm cng mun s cng sm
tr thnh duyt xong. iu l h qu tt yu ca vic cc nh c thm s c kt
np vo trong ngn xp (STACK). Tm kim theo chiu rng trn th, nu ni mt cch
ngn gn, c xy dng trn c s thay th ngn xp (STACK) bi hng i (QUEUE).
Vi s ci bin nh vy, nh c thm cng sm s cng sm tr thnh duyt xong
(tc l cng sm di khi hng i). Mt nh s tr thnh duyt xong ngay sau khi ta
xt xong tt c cc nh k (cha c thm) vi n. Th tc c th m t nh sau:
void BFS(v);
(*Tim kiem theo chieu rong bat dau tu dinh v, cac bien chuaxet, Ke la bien cuc bo*)
{
QUEUE= ;
QUEUE v; (*ket qua nap vao QUEUE*)
30

Chuaxet[v]=0;
While (QUEUE<> )
{
P QUEUE; (*lay p tu QUEUE:*)
Tham_dinh(p);
for u Ke(v)
If (chuaxet[u])
{
QUEUE u;
chuaxet[u]=0;
}
}
}
Khi , tm kim theo chiu rng trn th c thc hin nh thut ton sau:
void main()
{
(*Initialization*)
for f V do chuaxet[v]=1;
for v V
if (chuaxet[v]) BFS(v);
}
Lp lun tng t nh trong th tc tm kim theo chiu su, c th ch ra c rng lnh
gi BFS(v) s cho php thm n tt c cc nh thuc cng thnh phn lin thng vi nh
v, v mi nh ca th s c thm ng mt ln. phc tp tnh ton ca thut ton
l O(m+n).

V d . Xt th c cho trong hnh sau . cc nh ca n c nh s li theo th


th c thm theo th tc tm kim theo chiu rng m t trn
31

3(10)
2(2)

7(6)

1(1)

4(3)
10(4
)

11(7
)

6(5)
13(11
)

5(9)

9(13
)

8(12
)

12(8)

V d:
TIMRONG.INP

13
0101000001000
1001000000000
0000001000000
1100011000000
0000010110000
0001101000001
0011010000000
0000100010000
0000100100000
1000000000110
0000000001010
0000000001100
0000010000000

TIMRONG.OUT

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

M t thut ton tm kim theo chiu rng

Ta co the mo tachng trnh bang Ngon ng C nh


sau :
Ch s mi (trong ngoc ) ca cc nh c nh li theo th t chng c thm
theo thut ton tm kim theo chiu rng
#include<stdio.h>
#include<conio.h>
#include<io.h>
#include<stdlib.h>
#include<dos.h>
#define MAX 20
32

#define TRUE 1
#define FALSE 0
/*-------------tim kiem theo chieu rong-----------*/
void Init(int A[][MAX],int *n,int *solt,int *chuaxet)
{
FILE *fp;int i,j;
fp=fopen("timrong.inp","r");
if(fp==NULL)
{
printf("\n khong co tap *.inp");
delay(2000);
return;
}
fscanf(fp,"%d",n);
printf("\n so dinh cua do thi la=%d",*n);
printf("\n ma tran ke cua do thi la");
for(i=1;i<=*n;i++)
{
printf("\n\n");
for(j=1;j<=*n;j++)
{
fscanf(fp,"%d",&A[i][j]);
printf("%4d",A[i][j]);
}
}
for(i=1;i<=*n;i++) chuaxet[i]=0;
*solt=0;
}
/*----------------------------------------------*/
void BFS(int A[][MAX],int n,int i,int *solt,int chuaxet[],int QUEUE[MAX])
{
int u,dauQ,cuoiQ,j;
dauQ=1;cuoiQ=1;
QUEUE[cuoiQ]=i;
chuaxet[i]=*solt;
while(dauQ<=cuoiQ)
{
u=QUEUE[dauQ];
printf("%4d",u);
dauQ=dauQ+1;
for(j=1;j<=n;j++)
{
if(A[u][j]==1 && chuaxet[j]==0)
{
cuoiQ=cuoiQ+1;
QUEUE[cuoiQ]=j;
chuaxet[j]=*solt;
}
33

}
}
}
/*---------------------------------------------*/
void main()
{
clrscr();
int A[MAX][MAX],n,chuaxet[MAX],QUEUE[MAX],solt,i;
Init(A,&n,&solt,chuaxet);
for(i=1;i<=n;i++) chuaxet[i]=0;
printf("\n\n\n\n");
for(i=1;i<=n;i++)
if( chuaxet[i]==0)
{
solt=solt+1;
BFS(A,n,i,&solt,chuaxet,QUEUE);
}
getch();
3. TM NG I V KIM TRA TNH LIN THNG
Trong mc ny ta xt ng dng cc thut ton tm kim m t trong cc mc trc vo vic
gii bi ton c bn trn th: bi ton v tm ng i v bi ton v xc nh tnh lin
thng ca th.
a) Bi ton tm ng i gia hai nh:
Gi s s v t l hai nh no ca th. Hy tm ng i t s n t.
Nh trn phn tch, th tc DFS(s) (BFS(s)) s cho thm tt c cc nh thuc cng mt
thnh phn lin thng vi s. v vy, sau khi thc hin xong th tc, nu chuaxet[t]=true(1),
th iu c ngha l khng c ng i t s n t, cn nu chuaxet[t]=false(0
) th t thuc cng thnh phn lin thng vi s, hay ni mt cch khc: tn ti ng i t s
n t. Trong trng hp tn ti ng i, ghi nhn ng i, ta dng thm biu thc
Truoc[v] ghi nhn nh i trc nh v trong ng i tm kim t s n v. Khi , i
vi th tc DFS(v) cn sa i cu lnh trong n nh sau:
If (chuaxet[u])
{
Truoc[u]=v;
DFS(u);
}
Cn i vi th tc BFS(v) cn sa i cu ln if trong n nh sau:
If (chuaxet [u])
34

{
QUEUE u;
chuaxet[u]=0;
Truoc[u]=p;
}
Ch :
ng i tm c theo thut ton tm kim theo chiu rng l ng i ngn nht (theo s
cnh) t s n t. iu ny suy trc tip t th t thm nh theo thut ton tm kim theo
chiu rng.

V d: Cho th vi ba thnh phn lin thng sau:

th G ( vi 3 thnh phn lin thng l : H, K, P )


Gi s s v t l hai nh no ca th . Hy tm ng i t s n t . Nh phn tch
trn th tc DFS(s) v BFS(s) s cho php thm tt c cc nh ca mt thnh phn lin
thng vi s . V vy sau khi thc hin xong th tc m nh t vn cha c xt th iu
c ngha l s khng c ng i t s n t . Ngc li th tn ti ng i t s n t .

M t bng ngn ng C nh sau :


#include<stdio.h>
#include<conio.h>
#include<io.h>
#include<dos.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define MAX 20
void in();
void init();
int n,truoc[MAX],chuaxet[MAX],queue[MAX];
int A[MAX][MAX];
int s,t;
//------------------------------------------------------------------/*-------------tim kiem theo chieu rong-------------------------*/
//--------------------------------------------------------------------void init()
{
35

FILE *fp;
int i,j;
fp=fopen("lthong.inp","r");
if(fp==NULL)
{
printf("\n khong co tep INP");
delay(2000);
return;
}
fscanf(fp,"%d",&n);
printf("\n so dinh do thi la:%d",n);
printf("\n ma tran ke cua do thi");
printf("\n\n");
for(i=1;i<=n;i++)
{
printf("\n");
for(j=1;j<=n;j++)
{
fscanf(fp,"%3d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
for(i=1;i<=n;i++)
{
chuaxet[i]=TRUE;
truoc[i]=0;
}
}
//-------------------------------------------------void result()
{
printf("\n\n");
if(truoc[t]==0)
{
printf("\n khong co duong di tu %d den %d",s,t);
getch();
return;
}
printf("\n duong di tu %d den %d la :",s,t);
int j=t;
printf("%2d <-",t);
while(truoc[j]!=s)
{
printf("%3d<-",truoc[j]);
j=truoc[j];
}
printf("%3d",s);

36

}
//-------------------------------------------//--------------------------------------------void BFS(int s)
{
int u,dauQ,cuoiQ,p;printf("\n");
dauQ=1;cuoiQ=1;
queue[cuoiQ]=s;
chuaxet[s]=FALSE;
printf("\n cac dinh lien thong voi %d:",s,"la:");
while(dauQ<=cuoiQ)
{
u=queue[dauQ];
dauQ=dauQ+1;
printf("%3d",u);
for(p=1;p<=n;p++)
{
if(A[u][p]==1 && chuaxet[p]==TRUE)
{
cuoiQ=cuoiQ+1;
queue[cuoiQ]=p;
chuaxet[p]=FALSE;
truoc[p]=u;
}
}
}
}
//-------------------------------------//-------------------------------------void duongdi()
{
int chuaxet[MAX],truoc[MAX],queue[MAX];
init();
printf("\n");
BFS(s);
getch();
result();
}
//-------------------------------------//-------------------------------------void main()
{
clrscr();
printf("\n nhap dinh dau s=");
scanf("%d",&s);
printf("\n nhap dinh cuoi t=");
37

scanf("%d",&t);
duongdi();
getch();
}
b) Tm cc thnh phn lin thng ca th:
Hy cho bit th gm bao nhiu thnh phn lin thng v tng thnh phn lin thng ca
n l gm nhng nh no. ?
Do th tc DFS(v) (BFS(s)) cho php thm tt c cc nh thuc cng mt thnh
phn lin thng vi s, nn s thnh phn lin thng ca th bng s ln gi n th tc
ny.

Mo ta bang ngon ng C nh sau:


M t bng ngn ng C
#include<stdio.h>
#include<conio.h>
#include<io.h>
#include<dos.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define MAX 20
void BFS(int A[][MAX],int n,int i,int *solt,int chuaxet[],int QUEUE[MAX]);
//-------------------------------------------------------------------------------------------void Init(int A[][MAX],int *n,int *solt,int *chuaxet)
{
FILE *fp;int i,j;
fp=fopen("lthong.inp","r");
if(fp==NULL)
{
printf("\n khong co tep INP");
delay(2000);
return;
}
fscanf(fp,"%d",n);
printf("\n so dinh do thi la:%d",*n);
printf("\n ma tran ke cua do thi");
for(i=1;i<=*n;i++)
38

{
printf("\n");
for(j=1;j<=*n;j++)
{
fscanf(fp,"%3d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
for(i=1;i<=*n;i++)
chuaxet[i]=0;
*solt=0;
}
//-------------------------------------------------void result(int *chuaxet,int n,int solt)
{
printf("\n\n");
if(solt==1)
{
printf("\n do thi lien thong");
getch();
return;
}
for(int i=1;i<=solt;i++)
{
printf("\n so thanh phan lien thong la: %3d",solt);
for(i=1;i<=solt;i++)
{
printf("\n thanh phan lien thong thu %3d:",i);
for(int j=1;j<=n;j++)
{
if(chuaxet[j]==i)
printf("%3d",j);
}
}
}
}
39

//------------------------------------------------------------------void BFS(int A[ ][MAX],int n,int i,int *solt,int chuaxet[ ],int QUEUE[MAX])


{
int u,dauQ,cuoiQ,j;
dauQ=1;cuoiQ=1;QUEUE[cuoiQ]=i;chuaxet[i]=*solt;
while(dauQ<=cuoiQ)
{
u=QUEUE[dauQ];
printf("%4d",u);
dauQ=dauQ+1;
for(j=1;j<=n;j++)
{
if(A[u][j]==1 && chuaxet[j]==0)
{
cuoiQ=cuoiQ+1;
QUEUE[cuoiQ]=j;
chuaxet[j]=*solt;
}
}
}
}
//----------------------------------------------//-----------------------------------------------void lien_thong()
{
int A[MAX][MAX],n,chuaxet[MAX],QUEUE[MAX],solt,i;
clrscr();
Init(A,&n,&solt,chuaxet);
printf("\n\n");
for(i=1;i<=n;i++)
if(chuaxet[i]==0)
{
solt=solt+1;
BFS(A,n,i,&solt,chuaxet,QUEUE);
}
result(chuaxet,n,solt);
40

getch();
}
//---------------------------------------------void main()
{
clrscr();
lien_thong();
}

Bi tp chng III:

41

3-1.Hy lit k cc nh ca th c duyt theo phng php tm kim theo chiu su, tm kim
theo chiu rng. Tm ng i t nh A n nh H.

3-2.Cho th v hng lin thng G


nh hnh v bn.

a.Hy lit k danh sch cc nh ca G


theo thut ton tm kim theo chiu
su (DFS), theo thut ton tm kim

theo chiu rng (BFS) bt u t nh


1.
b.Hy tm mt ng i t nh 1 n
6

nh 6 trn G theo thut ton DFS v


2

t nh 1 n nh 7 theo thut ton

7
3

BFS.
3-3.Cho th v hng lin thng
G nh hnh v bn.

a.Hy biu din th G bng ma


trn k.
b.Hy lit k danh sch cc nh ca
G theo thut ton tm kim theo

chiu su (DFS), theo thut ton tm


kim theo chiu rng (BFS) bt u t nh 1.

Bi tp thc hnh

42

3-4.Mt kha hc gm N mn hc, mn hc i phi hc trong ti ngy. Gia cc mn hc c mi


quan h trc/sau: c mn hc ch hc c sau khi hc mt s mn hc khc. Mi quan h
c th hin bi mt mng hai chiu A[i, j];
i, j = 1, , N trong A[i, j] = 1/0 v A[i, i] bng 0 vi mi i, A[i,j] = 1 khi v ch khi mn hc i
phi c dy xong trc khi hc mn j (ngy kt thc mn i phi trc ngy bt u mn j). Mn
hc i phi dy trc mn hc j nu c mt dy mn hc i1, i2, , ik sao cho a[it, it+1] = 1, 1 <= t <=
k-1, i1=i v ik=j. Nu c mt nhm cc mn hc tng i mt khng c quan h trc/sau th trong
mi ngy, v nguyn tc, ta c th hc ng thi tt c nhng mn hc ny (nu khng vi phm
quan h vi cc mn hc khc). Mng A[i, j] c gi l b tc nu c mt dy cc mn hc i1, i2,
, ik, k > 1, m mn i1 phi dy trc mn i2, mn i2 phi dy trc mn i3, , mn ik-1 phi dy
trc mn ik, mn ik phi dy trc mn i1.
Hy vit chng trnh vi tn KT3.CPP lm cc vic sau:
Hy xt xem mng A c b tc hay khng.
Nu mng A khng b tc, hy tnh xem kha hc c th kt thc trong thi gian nhanh nht l bao
nhiu ngy.
Theo cc hc bo m thi gian hon thnh ngn nht cu 2, hy tnh xem mt hc sinh trong qu
trnh hc phi hc ng thi trong mt ngy nhiu nht bao nhiu mn.
D liu vo c cho bi file text c tn MH.DAT trong s N ghi dng th nht, trong nhm
N dng tip theo, dng th i ghi N s A[i, 1], , A[i, N] dng cui cng ghi N s nguyn dng ti
khng ln hn 30, 1 <= i <= N; N <= 30.
Kt qu ghi ra file TKB.DAT nh sau: dng th nht ghi s 1/0 ty theo mng A b tc / khng b
tc. Nu dng th nht ghi s 0, ta mi ghi tip kt qu cu 2 v 3.
Kt qu cu 2 ghi tip vo file TKB.DAT N+1 dng nh sau: dng du ghi s T l s ngy ti thiu
c th hon thnh kha hc, tip theo l N dng trong dng th i ghi 2 s X, Y vi ngha mn
hc th i hc t ngy th X n ngy th Y (ch rngYX=ti1).
Kt qu cu 3 ghi tip vo file TKB.DAT nh sau: dng th nht ghi 2 s Z, W vi ngha trong
ngy Z phi hc W mn (W l s nhiu nht cc mn hc phi hc ng thi trong mt ngy), tip
theo l mt dng ghi tn cc mn hc phi hc ng thi trong ngy Z.
Trong cc cu 2 v 3, c th c nhiu li gii tng ng ch cu a ra mt li gii.

43

V d 1
MH.DAT
4

TKB.DAT
1

0100
0010
0001
1000
1111
V d 2
MH.DAT

TKB.DAT

0100000

22

0001000

12

0001000

34

0000110

18

0000000

9 12

0000001

13 22

0000000

13 14

2 2 8 4 10 2 3

15 17
12
13

3-5.Cho mt mng N (N <= 20) my tnh c nh s t 1 n N. S mng c cho


bi h gm M knh (on) ni trc tip gia mt s cp my trong mng, m knh tng
ng vi m cp. Cho bit chi ph truyn 1 n v thng tin theo mi knh ca mng.
Ngi ta cn chuyn mt bc thng ip t my s n my t. m bo an ton, ngi ta
chuyn bc thng in ny theo hai ng truyn tin khc nhau (tc khng c knh no)
ca mng c s dng trong c hai ng truyn tin; cho php hai ng truyn tin cng
i qua mt s my tnh). Chi ph ca mt ng truyn c hiu l tng chi ph trn cc
knh ca n. n gi ng truyn t my s sang my t c tnh nh sau:
Vi hai my s v t, cng bc thng ip c di l 1 n v thng tin, n gi truyn cho
cp (s, t) c tnh bng tng chi ph chuyn thng ip an ton (bng tng chi ph ca hai
ng truyn tin) l nh nht.
Ngi ta mong mun mng my tnh (mng truyn tin ni trn tha mn tnh cht an ton
theo ngha l t mt my bt k lun truyn c (mt cch an ton) thng ip ti mt
44

my bt k khc. Khi mt mng an ton, ngi ta tnh c n gi ca mng l tng n


gi mi ng truyn t mt my bt k ti mt my bt k khc.
Ma trn n gi ca mng l mng hai chiu A c N dng v N ct, m gi tr phn t A[i,j]
chnh l n gi t my i sang my j.
3-6.Truyn tin trn mng
C mt nhm gm N lp trnh vin c nh s t 1 ti N, mt s ngi trong h c bit
a ch email ca nhau. Khi bit mt thng tin no mi h gi thng tin cho nhau. Bn l
mt ngi rt quan trng v bn bit tt c cc mi quan h ca h cng nh bn c mt
thng tin rt c bit m mun cho tt c h u bit. Hy lp trnh ch ra mt s t nht cc
lp trnh vin cn cho h bit thng tin sao cho nhng ngi c th thng bo cho tt c
nhng ngi cn li thng tin ca bn.
D liu cho trong file vn bn vi tn INFOR.INP trong dng u chc s N (N <=
1000), dng th I trong N dng tip theo cha danh sch cc lp trnh vin m ngi I bit
a ch email ca h. Nu ngi th I khng bit a ch ca bt c ai th dng ny l dng
trng.
Kt qu ghi ra file vn bn vi tn INFOR.OUT trong dng u ghi s K l s ngi cn
cho h bit thng tin. Dng th hai ghi ra ch s ca nhng ngi .
V d:
INFOR.INP

INFOR.OUT

23

5
4

CHNG IV

TH EULER V TH HAMILTON

4.1. NG I EULER V TH EULER.

45

C th coi nm 1736 l nm khai sinh l thuyt th, vi vic cng b li gii bi ton
v cc cu Konigsberg ca nh ton hc li lc Euler (1707-1783). Thnh ph
Konigsberg thuc Ph (nay gi l Kaliningrad thuc Nga) c chia thnh bn vng
bng cc nhnh sng Pregel, cc vng ny gm hai vng bn b sng, o Kneiphof v
mt min nm gia hai nhnh ca sng Pregel. Vo th k 18, ngi ta xy by chic cu
ni cc vng ny vi nhau.

Dn thnh ph tng thc mc: C th no i do qua tt c by cu, mi cu ch mt ln


thi khng?. Nu ta coi mi khu vc A, B, C, D nh mt nh v mi cu qua li hai
khu vc l mt cnh ni hai nh th ta c s ca Konigsberg l mt a th G nh
hnh trn.
Bi ton tm ng i qua tt c cc cu, mi cu ch qua mt ln c th c pht
biu li bng m hnh ny nh sau: C tn ti chu trnh n trong a th G cha tt c
cc cnh?

4.1.1. nh ngha: Chu trnh (t.. ng i) n cha tt c cc cnh (hoc cung) ca


th (v hng hoc c hng) G c gi l chu trnh (t.. ng i) Euler. Mt
th lin thng (lin thng yu i vi th c hng) c cha mt chu trnh (t.. ng
i) Euler c gi l th Euler (t.. na Euler).
Th d 1:

46

iu kin cn v mt th l th Euler c Euler tm ra vo nm 1736


khi ng gii quyt bi ton hc ba ni ting thi v by ci cu Konigsberg v y
l nh l u tin ca l thuyt th.

4.1.2. nh l: th (v hng) lin thng G l th Euler khi v ch khi mi nh


ca G u c bc chn.
Chng minh:
iu kin cn: Gi s G l th Euler, tc l tn ti chu trnh Euler P trong G. Khi
c mi ln chu trnh P i qua mt nh no ca G th bc ca nh tng ln 2. Mt
khc, mi cnh ca th xut hin trong P ng mt ln. Do mi nh ca th u
c bc chn.

4.1.3. B : Nu bc ca mi nh ca th G khng nh hn 2 th G cha chu trnh


n.
Chng minh: Nu G c cnh bi hoc c khuyn th khng nh ca b l hin nhin.
V vy gi s G l mt n th. Gi v l mt nh no ca G. Ta s xy dng theo
quy np ng i
v

v1

v2

......

trong v1 l nh k vi v, cn vi i 1, chn vi+1 l nh k vi vi v vi+1 vi-1 (c th


chn nh vy v deg(vi) 2), v0 = v. Do tp nh ca G l hu hn, nn sau mt s hu
hn bc ta phi quay li mt nh xut hin trc . Gi k l s nguyn dng u
tin vk=vi (0 i<k). Khi , ng i vi, vi+1, ..., vk-1, vk (= vi) l mt chu trnh n cn
tm.
iu kin : Quy np theo s cnh ca G. Do G lin thng v bc ca mi nh l chn
nn mi nh c bc khng nh hn 2. T theo B 4.1.3, G phi cha mt chu
trnh n C. Nu C i qua tt c cc cnh ca G th n chnh l chu trnh Euler. Gi s C
khng i qua tt c cc cnh ca G. Khi loi b khi G cc cnh thuc C, ta thu c
mt th mi H (khng nht thit l lin thng). S cnh trong H nh hn trong G v r
rng mi nh ca H vn c bc l chn. Theo gi thit quy np, trong mi thnh phn
lin thng ca H u tm c chu trnh Euler. Do G lin thng nn mi thnh phn trong
H c t nht mt nh chung vi chu trnh C. V vy, ta c th xy dng chu trnh Euler
trong G nh sau:

47

Bt u t mt nh no ca chu trnh C, i theo cc cnh ca C chng no cha gp


phi nh khng c lp ca H. Nu gp phi nh nh vy th ta i theo chu trnh Euler
ca thnh phn lin thng ca H cha nh . Sau li tip tc i theo cnh ca C cho
n khi gp phi nh khng c lp ca H th li theo chu trnh Euler ca thnh phn lin
thng tng ng trong H, ... Qu trnh s kt thc khi ta tr v nh xut pht, tc l thu
c chu trnh i qua mi cnh ca th ng mt ln.

4.1.4. H qu: th lin thng G l na Euler (m khng l Euler) khi v ch khi c


ng hai nh bc l trong G.
Chng minh: Nu G l na Euler th tn ti mt ng i Euler trong G t nh u n
nh v. Gi G l th thu c t G bng cch thm vo cnh (u,v). Khi G l th
Euler nn mi nh trong G u c bc chn (k c u v v). V vy u v v l hai nh duy
nht trong G c bc l.
o li, nu c ng hai nh bc l l u v v th gi G l th thu c t G bng
cch thm vo cnh (u,v). Khi mi nh ca G u c bc chn hay G l th
Euler. B cnh (u,v) thm vo ra khi chu trnh Euler trong G ta c c ng i
Euler t u n v trong G hay G l na Euler.

4.1.5. Ch : Ta c th vch c mt chu trnh Euler trong th lin thng G c bc


ca mi nh l chn theo thut ton Fleury sau y.
Xut pht t mt nh bt k ca G v tun theo hai quy tc sau:
1. Mi khi i qua mt cnh no th xo n i; sau xo nh c lp (nu c);
2. Khng bao gi i qua mt cu, tr phi khng cn cch i no khc.

Xut pht t u, ta c th i theo cnh (u,v) hoc (u,x), gi s l (u,v) (xo (u,v)). T v
c th i qua mt trong cc cnh (v,w), (v,x), (v,t), gi s (v,w) (xo (v,w)). Tip tc, c
th i theo mt trong cc cnh (w,s), (w,y), (w,z), gi s (w,s) (xo (w,s)). i theo cnh
(s,y) (xo (s,y) v s). V (y,x) l cu nn c th i theo mt trong hai cnh (y,w), (y,z), gi
s (y,w) (xo (y,w)). i theo (w,z) (xo (w,z) v w) v theo (z,y) (xo (z,y) v z). Tip
tc i theo cnh (y,x) (xo (y,x) v y). V (x,u) l cu nn i theo cnh (x,v) hoc (x,t),
48

gi s (x,v) (xo (x,v)). Tip tc i theo cnh (v,t) (xo (v,t) v v), theo cnh (t,x) (xo
cnh (t,x) v t), cui cung i theo cnh (x,u) (xo (x,u), x v u).

4.1.6. Bi ton ngi pht th Trung Hoa:


Mt nhn vin i t S Bu in, qua mt s ng ph pht th, ri quay v
S. Ngi y phi i qua cc ng theo trnh t no ng i l ngn nht?
Bi ton c nh ton hc Trung Hoa Guan nu ln u tin (1960), v vy thng
c gi l bi ton ngi pht th Trung Hoa. Ta xt bi ton mt dng n gin
nh sau.
Cho th lin thng G. Mt chu trnh qua mi cnh ca G gi l mt hnh trnh
trong G. Trong cc hnh trnh , hy tm hnh trnh ngn nht, tc l qua t cnh nht.
R rng rng nu G l th Euler (mi nh u c bc chn) th chu trnh Euler
trong G (qua mi cnh ca G ng mt ln) l hnh trnh ngn nht cn tm.
Ch cn phi xt trng hp G c mt s nh bc l (s nh bc l l mt s chn).
Khi , mi hnh trnh trong G phi i qua t nht hai ln mt s cnh no .
D thy rng mt hnh trnh qua mt cnh (u,v) no qu hai ln th khng phi l
hnh trnh ngn nht trong G. V vy, ta ch cn xt nhng hnh trnh T i qua hai ln
mt s cnh no ca G.
Ta quy c xem mi hnh trnh T trong G l mt hnh trnh trong th Euler GT, c
c t G bng cch v thm mt cnh song song i vi nhng cnh m T i qua hai
ln. Bi ton t ra c a v bi ton sau:
Trong cc th Euler GT, tm th c s cnh t nht (khi chu trnh Euler trong
th ny l hnh trnh ngn nht).

nh l (Gooodman v Hedetniemi, 1973). Nu G l mt th lin thng c q


cnh th hnh trnh ngn nht trong G c chiu di
q + m(G),
trong m(G) l s cnh m hnh trnh i qua hai ln v c xc nh nh sau:
Gi V0(G) l tp hp cc nh bc l (2k nh) ca G. Ta phn 2k phn t ca G
thnh k cp, mi tp hp k cp gi l mt phn hoch cp ca V0(G).
Ta gi di ng i ngn nht t u n v l khong cch d(u,v). i vi mi phn
hoch cp Pi, ta tnh khong cch gia hai nh trong tng cp, ri tnh tng d(Pi). S
m(G) bng cc tiu ca cc d(Pi): m(G)=min d(Pi).
Th d 2: Gii bi ton ngi pht th Trung Hoa cho trong th sau:

49

Tp hp cc nh bc l VO(G)={B, G, H, K} v tp hp cc phn hoch cp l


P={P1, P2, P3}, trong
P1 = {(B, G), (H, K)} d(P1) = d(B, G)+d(H, K) = 4+1 = 5,
P2 = {(B, H), (G, K)} d(P2) = d(B, H)+d(G, K) = 2+1 = 3,
P3 = {(B, K), (G, H)} d(P3) = d(B, K)+d(G, H) = 3+2 = 5.
m(G) = min(d(P1), d(P2), d(P3)) = 3.
Do GT c c t G bng cch thm vo 3 cnh: (B, I), (I, H), (G, K) v GT l
th Euler. Vy hnh trnh ngn nht cn tm l i theo chu trnh Euler trong GT:
A, B, C, D, E, F, K, G, K, E, C, J, K, H, J, I, H, I, B, I, A.

4.1.7. nh l: th c hng lin thng yu G l th Euler khi v ch khi mi


nh ca G u c bn bc vo bng bn bc ra.
Chng minh: Chng minh tng t nh chng minh ca nh l 4.1.2 v iu kin
cng cn c b di y tng t nh B 4.1.3.

4.1.8. B : Nu bc vo v bc ra ca mi nh ca th c hng G khng nh


hn 1 th G cha chu trnh n.

4.1.9. H qu: th c hng lin thng yu G l na Euler (m khng l Euler) khi


v ch khi tn ti hai nh x v y sao cho:
dego(x) = degt(x)+1, degt(y) = dego(y)+1, degt(v) = dego(v), vV, v x, v y.
Chng minh: Chng minh tng t nh H qu 4.1.4.
4.1.10. Thut tan 1: Xy dng mt chu trnh Euler (m rng chu trnh):
Bt u t mt nh a, i theo cc cnh ca th mt cch ngu nhin nhng khng lp li
cnh no i qua cho n khi khng th i tip c na, ngha l phi dng mt nh b
no . Lc ny mi cnh ti nh b u i qua, nu nh a khc nh b th d thy rng
s ln i n nh b nhiu hn s ln ri khi nh b l 1: v l. Vy phi c nh b trng
vi nh a. Ni cch khc khi khng th di tip c l cc cnh i qua to thnh mt
chu trnh. Nu c mt nh c trong chu trnh ny l nh u ca mt cnh cha i qua th ta
s m rng chu trnh ny thnh mt chu trnh ln hn bng cch khi hnh li t nh c, ri
tip tc i theo cnh ti nh c cha i qua ni trn cho n khi khng th i tip c
na, ta s to c mt chu trnh mi cha chu trnh c. C tip tc nh th cho n khi
c mt chu trnh m khng th tip tc m rng ra c na, u ny xy ra khi mi
nh trong chu trnh hin c u khng cn cnh no cha i qua.
Gi s G l th Euler, thut ton n gin sau y cho php xc nh chu trnh Euler khi
lm bng tay.

50

void Euler_Cycle()
{
STACK= ; CE= ;
Chon u la mot dinh nao do cua do thi;
STACK u;
while STACK<>
{
x=top(STACK); //x la phan tu dau STACK
if Ke(x)<>
{
y=dinh dau tien trong danh sach Ke(x);
STACK y;
// loai bo canh (x,y) khoi do thi
Ke(x)=Ke(x)\{ y} ;
Ke(y)=Ke(y)\{ x} ;
}
else
{
x STACK;
CE x;
}
}
}

51

Thut ton 2: (Thut ton Flor)


Xut pht t mt nh u no ca G ta i theo cc cnh ca n mt cch tu ch cn tun
th 2 qui tc sau:
(1) Xo b cnh i qua ng thi xo b c nhng nh c lp to thnh.
(2) mi bc ta ch i qua cu khi khng cn cch la chon no khc.
nh l 2.
th c hng lin thng mnh l th Euler khi v ch khi
deg+(v)=deg - (v), v V.

Thut ton Flor tm mt chu trnh EULER


Bc 1:
Tm mt chu trnh C bt k trong G bng cch bt u t mt nh bt k s, ta i
dc theo cc cnh ca G, mi cnh ch i qua mt ln cho n khi no khng i c na.
ta chc chn phi quay v nh xut pht ( do trong th Euler tt c cc nh u c bc
chn)
Bc 2: Nu chu trnh C va tm c cha ton b cc cnh ca G th C l chu
trnh Euler cn tm, ngc li do tnh cht ca th Euler nn trong C tn ti mt nh I k
vi mt cnh khng thuc C. ta bt u i li chu trnh c bt u t nh I ny , ri quay v
bc 1 bt u li t I tip tc m rng C.
V d : ( p dng cho thut ton Flor) cho th G nh sau : .

1
1 2 3 4 5 6

3
Ta c ma trn k

1
1 1
2 1
1 1 1
3 1 1
1
1
4
1 1
5
1
1
6
1
1

Nhn xt : Tng cc phn t trn mi dng ca ma trn k u l s chn ( Ngha l


mi nh ca th u l chn ) , Vy G c chu trnh Euler.
Xt hng 1 ( Chn nh 1) , phn t ct 2 l mt s khc khng ( =1) vy ta chn
nh 2 v c ng 12 gim mt phn t m12 ( hng 1 ct 2 ) v m21 ( xa cnh 12 i
qua ) th v ma trn tr thnh .

52

1
2

1
2
3
4
5
6

3
4

1
1 1
1
1

1 1
1 1
1
1

1
1

Xt hng 2 , m23=1 , vy ta chn nh k tip l 3 v c ng i 1 2 3. th v


ma trn tr thnh

1
-

1
2
3
4
5
6

3
4

1
1 1
1
1

1
1 1
1
1

1
1

Xt hng 3 , m31=1 chn nh k tip l 1 v c ng 1 2 3 1 . th v ma trn


tr thnh .

1
1

1
2
3
4
5
6

3
4

1 1
1
1
1 1
1
1

1
1

Xt hng 1 , mi phn t trn hng ny u bng 0 : Khng th tip tci c na . Xt


tip hng tip theo hng 2 . Trn hng c phn t 2 c phn t m24=1 . Vy ta vit li chu
trnh (breakout) bt u t nh 2 . Vit li chu trnh 2 3 1 2

th v chu trnh nh c

53

Xt hng 2 , c m24=1 , chn nh k tip l 4 v ta c ng : 2 3 1 2 4 . Khi th


v ma trn l :

1
1 2 3 4 5 6

1
2
3
4
5
6

3
4

1
1

1
1

1
1

Xt hng 4 , m43=1 , chn nh k tip l 3 v ta c ng : 2 3 1 2 4 3 Khi


th v ma trn l :

1
1 2 3 4 5 6

1
2
3
4
5
6

3
4

1
1
1

1
1

Xt hng 3 , m36=1 , chn nh k tip l 6 v ta c ng : 2 3 1 2 4 3 6. Khi


th v ma trn l :

1
1 2 3 4 5 6

1
2
3
4
5
6

3
4

1
1

1
1

Xt hng 6 , m 65=1 , chn nh k tip l 5 v ta c ng : 2 3 1 2 4 3 6 5 .


Khi th v ma trn l :

54

1
1 2 3 4 5 6

1
2
3
4
5
6

3
4

1
1

Xt hng 5 , m52=1 , chn nh k tip l 2 v ta c ng l : 2 3 1 2 4 3 6 5 2


Ta c ma trn cn li l ma trn 0 . V ta c ngay chu trnh Euler .( kt thc)

1
1 2 3 4 5 6

1
2
3
4
5
6

3
4

4.2. NG I HAMILTON V TH HAMILTON.


Nm 1857, nh ton hc ngi Ailen l Hamilton(1805-1865) a ra tr chi i
vng quanh th gii nh sau.
Cho mt hnh thp nh din u (a din u c 12 mt, 20 nh v 30 cnh), mi
nh ca hnh mang tn mt thnh ph ni ting, mi cnh ca hnh (ni hai nh) l
ng i li gia hai thnh ph tng ng. Xut pht t mt thnh ph, hy tm ng
i thm tt c cc thnh ph khc, mi thnh ph ch mt ln, ri tr v ch c.
Trc Hamilton, c th l t thi Euler, ngi ta bit n mt cu hc ba v
ng i ca con m trn bn c. Trn bn c, con m ch c th i theo ng cho
ca hnh ch nht 2 x 3 hoc 3 x 2 vung. Gi s bn c c 8 x 8 vung. Hy tm
ng i ca con m qua c tt c cc ca bn c, mi ch mt ln ri tr li
xut pht.
55

Bi ton ny c nhiu nh ton hc ch , c bit l Euler, De Moivre,


Vandermonde, ...
Hin nay c nhiu li gii v phng php gii cng c rt nhiu, trong c quy
tc: mi ln b tr con m ta chn v tr m ti v tr ny s cha dng ti do n khng
ch l t nht.
Mt phng php khc da trn tnh i xng ca hai na bn c. Ta tm hnh trnh
ca con m trn mt na bn c, ri ly i xng cho na bn c cn li, sau ni hnh
trnh ca hai na tm li vi nhau.
Tr chi v cu trn dn ti vic kho st mt lp th c bit, l th
Hamilton.

4.2.1. nh ngha: Chu trnh (t.. ng i) s cp cha tt c cc nh ca th (v


hng hoc c hng) G c gi l chu trnh (t.. ng i) Hamilton. Mt th c
cha mt chu trnh (t.. ng i) Hamilton c gi l th Hamilton (t.. na
Hamilton).
Th d 3: 1)

th Hamilton (hnh thp nh din u biu din trong mt phng) vi chu trnh
Hamilton A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, A (ng t m).
2) Trong mt t thi u bng bn c n (n 2) u th tham gia. Mi u th gp tng
u th khc ng mt ln. Trong thi u bng bn ch c kh nng thng hoc thua.
Chng minh rng sau t thi u c th xp tt c cc u th ng thnh mt hng dc,
ngi ng sau thng ngi ng ngay trc anh (ch) ta.

Xt th c hng G gm n nh sao cho mi nh ng vi mt u th v


c mt cung ni t nh u n nh v nu u th ng vi u thng u th ng
vi v. Nh vy, th G c tnh cht l vi hai nh phn bit bt k u v v, c mt v
ch mt trong hai cung (u,v) hoc (v,u), th nh th c gi l th c hng y
56

. T Mnh 4.2.2 di y, G l mt th na Hamilton. Khi ng i


Hamilton trong G cho ta s sp xp cn tm.
3) Mt li gii v hnh trnh ca con m trn bn c 8 x 8:

ng i Hamilton tng t ng i Euler trong cch pht biu: ng i Euler qua


mi cnh (cung) ca th ng mt ln, ng i Hamilton qua mi nh ca th
ng mt ln. Tuy nhin, nu nh bi ton tm ng i Euler trong mt th c
gii quyt trn vn, du hiu nhn bit mt th Euler l kh n gin v d s dng,
th cc bi ton v tm ng i Hamilton v xc nh th Hamilton li kh hn rt
nhiu. ng i Hamilton v th Hamilton c nhiu ngha thc tin v c
nghin cu nhiu, nhng vn cn nhng kh khn ln cha ai vt qua c.
Ngi ta ch mi tm c mt vi iu kin nhn bit mt lp rt nh cc th
Hamilton v th na Hamilton. Sau y l mt vi kt qu.

4.2.2. nh l (Rdei): Nu G l mt th c hng y th G l th na


Hamilton.
Chng minh: Gi s G=(V,E) l th c hng y v =(v1,v2, ..., vk-1, vk) l
ng i s cp bt k trong th G.
-- Nu i qua tt c cc nh ca G th n l mt ng i Hamilton ca G.
-- Nu trong G cn c nh nm ngoi , th ta c th b sung dn cc nh ny vo v
cui cng nhn c ng i Hamilton.
Tht vy, gi s v l nh tu khng nm trn .
a) Nu c cung ni v vi v1 th b sung v vo u ca ng i c 1=(v, v1,
v2, ..., vk-1, vk).
b) Nu tn ti ch s i (1 i k-1) m t vi c cung ni ti v v t v c cung ni ti vi+1
th ta chen v vo gia vi v vi+1 c ng i s cp 2=(v1, v2, ..., vi, v, vi+1, ..., vk).
57

c) Nu c hai kh nng trn u khng xy ra ngha l vi mi i (1 i k) vi u c


cung i ti v. Khi b sung v vo cui ca ng i v c ng i 3=(v1, v2, ...,
vk-1, vk, v).
Nu th G c n nh th sau n-k b sung ta s nhn c ng i Hamilton.

4.2.3. nh l (Dirac, 1952): Nu G l mt n th c n nh v mi nh ca G


u c bc khng nh hn

n
th G l mt th Hamilton.
2

Chng minh: nh l c chng minh bng phn chng. Gi s G khng c chu trnh
Hamilton. Ta thm vo G mt s nh mi v ni mi nh mi ny vi mi nh ca G,
ta c th G. Gi s k (>0) l s ti thiu cc nh cn thit G cha mt chu
trnh Hamilton. Nh vy, G c n+k nh.

Gi P l chu trnh Hamilton ayb ...a trong G, trong a v b l cc nh ca G, cn


y l mt trong cc nh mi. Khi b khng k vi a, v nu tri li th ta c th b nh
y v c chu trnh ab ...a, mu thun vi gi thit v tnh cht nh nht ca k.
Ngoi ra, nu a l mt nh k no ca a (khc vi y) v b l nh ni tip ngay
a trong chu trnh P th b khng th l nh k vi b, v nu tri li th ta c th thay P
bi chu trnh aa ...bb ... a, trong khng c y, mu thun vi gi thit v tnh cht nh
nht ca k.
Nh vy, vi mi nh k vi a, ta c mt nh khng k vi b, tc l s nh khng
n
k vi b khng th t hn s nh k vi a (s nh k vi a khng nh hn +k). Mt
2
n
khc, theo gi thit s nh k vi b cng khng nh hn +k. V khng c nh no
2
n
va k vi b li va khng k vi b, nn s nh ca G khng t hn 2( +k)=n+2k, mu
2
thun vi gi thit l s nh ca G bng n+k (k>0). nh l c chng minh.

4.2.4. H qu: Nu G l n th c n nh v mi nh ca G u c bc khng nh


hn

n 1
th G l th na Hamilton.
2

Chng minh: Thm vo G mt nh x v ni x vi mi nh ca G th ta nhn c n


n +1
th G c n+1 nh v mi nh c bc khng nh hn
. Do theo nh l
2
58

4.2.3, trong G c mt chu trnh Hamilton. B x ra khi chu trnh ny, ta nhn c
ng i Hamilton trong G.

4.2.5. nh l (Ore, 1960): Nu G l mt n th c n nh v bt k hai nh no


khng k nhau cng c tng s bc khng nh hn n th G l mt th Hamilton.

4.2.6. nh l: Nu G l th phn i vi hai tp nh l V1, V2 c s nh cng


bng n (n 2) v bc ca mi nh ln hn

n
th G l mt th Hamilton.
2

Th d 4:

th G ny c 8 nh, nh no cng

th G ny c 5 nh bc 4 v 2 nh

c bc 4, nn theo nh l 4.2.3, G l

bc 2 k nhau nn tng s bc ca hai nh

th Hamilton.

khng k nhau bt k bng 7 hoc 8, nn


theo nh l 4.2.5, G l th Hamilton.
th phn i ny c bc ca mi nh bng 2 hoc
3 (> 3/2), nn theo nh l 4.2.6, n l th
Hamilton.

4.2.7. Bi ton sp xp ch ngi:


C n i biu t n nc n d hi ngh quc t. Mi ngy hp mt ln ngi quanh
mt bn trn. Hi phi b tr bao nhiu ngy v b tr nh th no sao cho trong mi
ngy, mi ngi c hai ngi k bn l bn mi. Lu rng n ngi u mun lm quen
vi nhau.
Xt th gm n nh, mi nh ng vi mi ngi d hi ngh, hai nh k nhau
khi hai i biu tng ng mun lm quen vi nhau. Nh vy, ta c th y Kn.
th ny l Hamilton v r rng mi chu trnh Hamilton l mt cch sp xp nh yu cu
59

ca bi ton. Bi ton tr thnh tm cc chu trnh Hamilton phn bit ca th y


Kn (hai chu trnh Hamilton gi l phn bit nu chng khng c cnh chung).

nh l: th y Kn vi n l v n 3 c ng

n 1
chu trnh Hamilton phn
2

bit.
n(n 1)
cnh v mi chu trnh Hamilton c n cnh, nn s chu
2
n 1
trnh Hamilton phn bit nhiu nht l
.
2
Chng minh: Kn c

Gi s cc nh ca Kn l 1, 2, ..., n. t nh 1 ti tm ca mt ng trn v cc nh
2, ..., n t cch u nhau trn ng trn (mi cung l 3600/(n-1) sao cho nh l nm
na ng trn trn v nh chn nm na ng trn di. Ta c ngay chu trnh
Hamilton u tin l 1,2, ..., n,1. Cc nh c gi c nh, xoay khung theo chiu kim
ng h vi cc gc quay:
n 3 360 0
360 0
360 0
360 0
, 2.
, 3.
, ...,
.
,
2 n 1
n 1
n 1
n 1
n3
n 1
khung phn bit vi khung u tin. Do ta c
chu trnh
2
2
Hamilton phn bit.
ta nhn c

Th d 5: Gii bi ton sp xp ch ngi vi n=11.


C (111)/2=5 cch sp xp ch ngi phn bit nh sau:
1 2 3 4 5 6 7 8 9 10 11 1
1 3 5 2 7 4 9 6 11 8 10 1
1 5 7 3 9 2 11 4 10 6 8 1
1 7 9 5 11 3 10 2 8 4 6 1
1 9 11 7 10 5 8 3 6 2 4 1

60

4.2.8. C mt s dng th m ta c th bit khi no l th Hamilton. Mt v d nh


vy l th u loi. th u loi l th c hng m trong hai nh bt k ca n
c ni vi nhau bi ng mt cung. Tn u loi xut hin nh vy v th nh vy c
th dng biu din kt qu thi u bng chuyn, bng bn hay bt c mt tr chi no
m khng cho php ho. Ta c nh l sau:
nh l 5.
i) Mi th u loi l na Hamilton.
ii) Mi th u loi lin thng mnh l Hamilton.
Th d 4. th u loi D5, D6 c cho trong hnh 4.

Hnh 4. th u loi D5, u loi lin thng mnh D6


61

Lit k cc chu trnh Hamilton


(i vi th khng c trng s v c biu din bng ma trn k)
Gi thut tan sau :
void Hamilton(k);
(*Lit k cc chu trnh Hamilton thu c bng vic pht trin dy X[1],X[2],,X[K-1]
ca th G=(V,E) cho bi danh sch k *)
{
for y ke(X[k-1])
if (k==n-1 && y=vo)
ghinhan(X[1],X[2],..,X[N],Vo)
else
if (chuaxet(y))
{
X[k]=y;
chuaxet[y]=0;
Hamilton(k+1)
chuaxet[y]=1;
}
}
void main()
{
for v V chuaxet(v)=1
X[1]=vo; (*vo l mt nh no ca th*)
chuaxet(vo)=0;
Hamilton(2);
}

4.2.11. Qui tc tm chu trnh Hamilton .


Da vo nhn xt l mi nh trong chu trnh Hamilton u lin kt vi ng hai cnh trong
chu trnh ny , suy ra cc qui tc sau y tm chu trnh Hamilton :
1. Nu tn ti ti mt nh ca G c bc 1m th G khng c chu trnh Hamilton .
2. nu nh x c bc l 2 th c hai cnh ti x u phi thuc chu trnh Hamilton.
3. Chu trh Hamilton khng cha chu trnh con thc s no .
62

4. Trong qu trnh xy dng chu trnh Hamilton, sau khi ly hai cnh ti nh x t vo
chu trnh Hamilton ri th khng th ly thm cnh no ti x na , do c th xa mi
cnh con li ti x .
y l qui tc quan trng tm chu trnh Hamilton .

63

BI TP CHNG IV:

4.1. Vi gi tr no ca n cc th sau y c chu trnh Euler ?


a)

Kn,
b) Cn,
c) Wn,
d) Qn.
4.2. Vi gi tr no ca m v n cc th phn i y Km,n c:
a) chu trnh Euler ?
b) ng i Euler ?
4.3. Vi gi tr no ca m v n cc th phn i y Km,n c chu trnh Hamilton ?
4.4. Chng minh rng th lp phng Qn l mt th Hamilton. V cy lit k tt c
cc chu trnh Hamilton ca th lp phng Q3.
4.5. Trong mt cuc hp c 15 ngi mi ngy ngi vi nhau quanh mt bn trn mt ln.
Hi c bao nhiu cch sp xp sao cho mi ln ngi hp, mi ngi c hai ngi bn cnh
l bn mi, v sp xp nh th no ?
4.6. Hiu trng mi 2n (n 2) sinh vin gii n d tic. Mi sinh vin gii quen t nht
n sinh vin gii khc n d tic. Chng minh rng lun lun c th xp tt c cc sinh vin
gii ngi xung quanh mt bn trn, mi ngi ngi gia hai ngi m sinh vin quen.

4.7. Mt ng vua xy dng mt lu i ct bu vt. Ngi ta tm thy s ca lu


i (hnh sau) vi li dn: mun tm bu vt, ch cn t mt trong cc phng bn ngoi cng
(s 1, 2, 6, 10, ...), i qua tt c cc ca phng, mi ca ch mt ln; bu vt c giu sau
ca cui cng.
Hy tm ni giu bu vt
1

3
7

11

8
13

12

6
10

14
15

16
20

17

18
21

19

4.8. th cho trong hnh sau gi l th Peterson P.


a) Tm mt ng i Hamilton trong P.
b) Chng minh rng P \ {v}, vi v l mt nh
bt k ca P, l mt th Hamilton.

4.9. Gii bi ton ngi pht th Trung Hoa vi th cho trong hnh sau:
64

4.10. Chng minh rng th G cho trong


hnh sau c ng i Hamilton (t s n r)
nhng khng c chu trnh Hamilton.

4.11. Cho th d v:
a) th c mt chu trnh va l chu trnh Euler va l chu trnh Hamilton;
b) th c mt chu trnh Euler v mt chu trnh Hamilton, nhng hai chu trnh
khng trng nhau;
c) th c 6 nh, l th Hamilton, nhng khng phi l th Euler;
d) th c 6 nh, l th Euler, nhng khng phi l th Hamilton.

4.12. Chng minh rng con m khng th i qua tt c cc ca mt bn c c 4 x 4


hoc 5 x 5 vung, mi ch mt ln, ri tr v ch c.
4.13.Kim tra xem cc th sau c cha chu trnh hoc ng i Euler hay khng ?

4-15. Kim tra xem cc th sau c cha chu trnh hoc ng i Euler hay khng ?
65

4.16.Cho th PeterSon(P)
a.Tm mt ng i Hamilton trong P
b.P c cha chu trnh Hamilton hay khng ?
4-17.Kim tra xem cc th sau c cha chu trnh hoc ng i Hamilton hay khng ?
1

Bi tp thc hnh
4-18.Bi ton ngi a th:
Cho n thnh ph, cc thnh ph c nh s t 1 n n. Mt ngi a th mun i qua
tt c cc con ng, mi con ng ng 1 ln. Hy lp l trnh cho ngi a th hoc
thng bo khng tn ti ng i.
4-19.Cho th c biu din bng ma trn k. Hy lit k tt c cc chu trnh Hamilton
ca th.
4-20.Bi ton hnh trnh ngi bn hng (TRAVELING SALESMAN PROBLEM)
C n thnh ph (c nh s t 1 n n), mt ngi bn hng xut pht t mt thnh ph,
mun i qua cc thnh ph khc, mi thnh ph mt ln ri quay v thnh ph xut pht..

66

Gi thit bit c chi ph i t thnh ph i n thnh ph j l c[I,j]. Hy tm mt hnh


trnh cho ngi bn hng sao cho tng chi ph theo hnh trnh ny l thp nht.
4-21.Kim tra ng
Mt trm qung ng giao thng phi chu trch nhim v tnh trng ca mt mng li
giao thng ni gia cc im dn c. Hng thng, h phi c mt i i kim tra mt vng
qua khp mng li xem xt tnh trng hin thi ca cc ng giao thng nhm bo sa
cha kp thi nu c nhu cu. Hy vit chng trnh nhp vo mng li giao thng v gip
trm quyt nh l trnh ca i kim tra sao cho c th thm tt c cc con ng m tng
chiu di on ng i qua l nh nht.
4-22.Hi ngh bn trn
Tng th k i hi ng Lin hp quc triu tp mt cuc hp c N nh ngoi giao ca N
t chc tham gia. Cc i din ngoi giao c b tr ngi quanh mt bn trn. Gia mt s
t chc c quan h cng thng, v vy khng th xp h ngi cnh nhau c. Thng tin v
quan h gia cc t chc c cho di dng cp s nguyn i, j nu gia 2 t chc ny c
quan h cng thng.
Hy lp trnh gip Tng th k Lin hp quc b tr ch ngi quanh bn hp. Cc t chc
c nh s t 1 ti N, 0 < N <= 500.
D liu vo: t file CONF.INP, dng u tin cha s nguyn N, cc dng sau, mi dng
mt cp s i, j cho bit cc i din i v j khng ngi cnh nhau c. Kt thc l mt dng
cha 2 s 0.
Kt qu: a ra file CONF.OUT. Nu khng c cch b tr tha mn yu cu th a ra
thng bo KHONG CO, trong trng hp ngc li a ra dy N s nguyn xc nh v
tr ai ngi cnh ai quanh bn trn.
V d:
CONF.INP

CONF.OUT

67

Ci t mt s thut ton cn bn quan trng


1.Tm chu trnh Euler (bi ton ngi a th).
(Lu chng trnh sau c ci t theo thut ton quay lui/vt cn)
#include <conio.h>

#include <stdio.h>

cout<<endl;

#include <stdlib.h>

getch();

#include <iostream.h>

exit(1);

int m[20][20]; int a[20]; int b[20];

int tc,dau,n; int co;

void euler(int d,int i) {

void nhap() {

int j;

FILE *f; int i,j;

for (j=1;j<=n;j++) if (m[d][j]==1)

f=fopen("D:\\DOTHI\\EULER1.inp","rt");

fscanf(f,"%d",&n); cout<<n<<endl;

a[i]=j;

for (i=1;i<=n;i++) { for (j=1;j<=n;j++)

m[d][j]=0;

{ fscanf(f,"%d",&m[i][j]); cout<<m[i][j]<<"

m[j][d]=0;

"; } cout<<endl;

if (i == tc) xuat();

else

tc=0;

euler(j,i+1);

for (i=1;i<=n-1;i++) for (j=i+1;j<=n;j++) if

m[d][j]=1;

(m[i][j]==1) tc++;

m[j][d]=1;

cout<<"Chu trinh euler bat dau tu dinh :

";cin>>dau; co=0; // cout<<tc;

} void main() {

nhap();

void xuat() {

euler(dau,1);

int i; cout<<dau; for (i=1;i<=tc;i++)

if (!co) cout<<"khong co duong di :";

getch();

cout<<"--->"<<a[i]; co=1;

68

V d:

EULER1.INP

EULER2.INP

EULER3.INP

00111

01111

0111

00111

10111

1000

11011

11011

1000

11101

11101

1000

11110

11110

Yu cu sinh vin ci t thut ton tm chu trnh Euler nh nu trong phn l thuyt.
2.Tm chu trnh Hamilton (bi ton ngi bn hng)
i qua mi nh mt ln sao cho tng chi ph l thp nht.
Thut ton ti u cho bi ton hnh trnh ngi bn hng
Besttour=0; Bestcost=maxint;
while (tm thy mt hon v {xi} ca tp {1,2,,n})
{
// vi mi hon v {xi} ta c mt hnh trnh, tnh chi ph cho tng hnh trnh ny
cost=0;
for (i:=1 ;I<= n-1;I++) cost+=c[xi,xi+1]; cost+=c[xn,x1];
if (cost<bestcost) { bestcots=cost ;besttour=x }
}

69

//TRAVELING SALESMAN PROBLEM(thut ton ti u cho bi ton TSP)


#include <iostream.h>

for (int j=1;j<=n;j++)

#include <conio.h>

if (b[j]==1) { x[i]=j ; b[j]=0;

#include <stdio.h>

if (i==n) output();

#include <values.h>

else permute(i+1);

void output();

b[j]=1;

void readfile();

void permute(int i);

void result();

void readfile() {

const max=50; int c[max][max];

clrscr(); FILE *f;

int tourbest[max], b[max],x[50] ,n ,

f=fopen("d:\\dothi\\tsp1.inp","rt");

costbest ;

fscanf(f,"%d",&n);

void main() {

for (int i=1;i<=n;i++)

readfile();

for (int j=1;j<=n;j++) { fscanf(f,"%d",&c[i]

permute(1);

[j]);

result(); }

if (i==j) c[i][j]=MAXINT;

void output() {

int cost=0;

fclose(f);

for (int i=1;i<n;i++)

costbest=MAXINT;

cost=cost+c[x[i]] [x[i+1]];

for (i=1;i<=n;i++) b[i]=1;

cost=cost+c[x[n]] [x[1]];

if (cost<costbest) {

void result() {

costbest=cost;

cout<<costbest<<endl;

for (int j=1;j<=n;j++) tourbest[j]=x[j];

for (int i=1;i<=n;i++)

cout<<tourbest[i]<<" ";

getch();

void permute(int i) {

}.

70

V d:

TSP1.INP

TSP2.INP

TSP3.INP

035756

01274

0 21 40 32 28

202317

10443

15 0 18 37 25

470224

24012

19 17 0 6 7

374052

74104

9 50 28 0 4

462402

53240

25 6 5 10 0

562530
S DNG NGUYN L THAM LAM GII BI TON NGI BN HNG:
Vi nhng bi ton m khng gian trng thi c th pht sinh cc ln th vic dng phng
php vt cn l iu khng th. Nguyn l tham lam ly tiu chun ti u ton cc lm
tiu chun chn la hnh ng trong phm vi cc b. Mt s v d c th p dng nguyn l
ny nh cc bi ton c m hnh ton hc l bi ton ngi bn hng, bi ton t mu
th. Hn na nu c mt chin lc tham lam hp l, th phng php ny s tm c li
gii ti u (thut ton Kruskal, thut ton Prim s trnh by chng sau).
Lc ca phng php tham lam
Procedure Greedy(A,S)

{ l tp cc ng c vin, S l tp nghim}

begin
S=
While A do
Begin
X=select(A); { chn phn t tt nht trong A}
A=A-{x}
If S {x} chp nhn c then

S= S {x}

End;
End;
Thut gii GTS1(u) Thut gii GTS1 (Greedy Traveling Saleman)
INPUT:

s thnh ph l n nh xut pht u v ma trn chi ph c

OUTPUT:

tour (th t cc thnh ph i qua), cost ch ph ng vi tour tm c


71

v:=u;
tour:={u};
cost=0;
for i=1 to n
{t w l thnh ph k sau thnh ph v.
tour=tour + {w};
cost=cost+c[v,w]
v=w;
}
tour=tour + {u};
cost=cost+c[v,u]
THUT GII GTS2
Input n, c, p,Vi (i=1..p)// vi l cc thnh ph c chn ngu
// nhin trong tp n thnh ph ban u
Output:

besttour, bestcost

Bestcost=0
Besttour={}
For i=1 to p
{

GTS1(vk); // suy ra c tour(vk) v cost(vk)


If cost(vk)<bestcost
{

bestcost=cost(vk)
besttour=tour(vk)

}
}

CHNG 5
72

CY V CY KHUNG CA TH
th v hng lin thng khng c chu trnh gi l cy. Khi nim cy ln u tin c
Cayley a ra vo nm 1857, khi ng s dng chng m mt dng cu trc phn t ca
cc hp cht ho hc trong ho hc hu c. Cy cn c s dng rng ri trong rt nhiu
lnh vc khc nhau, c bit trong tin hc, cy c s dng xy dng cc thut ton t
chc cc th mc, cc thut ton ct gi, truyn d liu v tm kim
5.1. nh ngha cy , rng v bi
nh ngha 5.1.a. Ta gi cy ( tree) l th hu hn, v hng, lin thng, khng c
chu trnh .
nh ngha 5.1.b. Ta gi rng ( forest) l th h hn, v hng, khng c chu trnh .
(Hay : Mt tp hp gm nhiu cy khng c nh chung gi l rng)
nh ngha 5.1.c. Bi l th G=(X,U) hu hn, c hng, l mt bi c gc x1X nu
n c t nht 2 nh v tha mn 3 iu kin sau:
1. Mi nh khc x1 u l im cui ca mt cung duy nht
2. nh x1 khng l nh cui ca bt k cung no
3. th khng c chu trnh , khng c vng

5.2. Chu s
a) Chu s ca th c nh ngha l s sau:
v(G) =m-n+p vi m: cnh,
n: s nh
p: s vng lin thng
b) Pht biu cng thc Euler: Chu s ca th bng s vc t trong h chu trnh c s .
V d: m=5,n=4,p=1 th chu s l v(G)=5-4+1=2. Suy ra s vc t trong
h chu trnh c lp cc i bng 2.
73

5.3. Tnh cht ca Cy


5.3.1. nh l . Cho T l mt cy, th gia hai nh bt k ca T lun lun tn ti mt v
ch mt ng trong T ni chng
5.3.2. nh l . Nu cy T c n nh th c (n-1) cnh .
5.3.3. nh l ( Daisy chain theorem)
Gi s T l mt th v hng n nh . Khi cc mnh sau y l tng ng
i) T l mt cy
ii) T khng cha chu trnh v c n-1 cnh
iii) T lin thng v mi cnh ca T l cu
iv) Hai nh bt k ca T c ni vi nhau bi ng mt ng i n.
v) T khng cha chu trnh nhng h c thm vo n mt cnh ta thu c ng mt chu
trnh .
vi) T lin thng v c n-1 cnh .
Chng minh : Ta cn chng minh i)ii) iii) iv) v) vi) i)
Tht vy : i) ii) do cc nh l 5.3.1 v nh l 5.3.2
ii) iii) Mi thnh phn lin thng ca T u l cy v T khng c chu trnh . Trong mi
cy ny, s cnh +1 bng s nh . M theo gi thit trong T c s cnh +1 = s nh . Vy
T ch c mt thnh phn lin thng, ngha l T ln thng. By gi ta hy i mt cnh
trong T , ta nhn c mt th T c s nh l n v s cnh l (n-2) , hn na T li
khng c chu trnh , nu T l lin thng th T mt cy ( v l) : v s cnh +1 < s cnh )
iii) iv) Gi x,y l hai nh bt k ca T . V T lin thng nn tn ti mt ng i
ni chng. Gi s ta c 2 ng i khc nhau ni x v y khi nu ta hy mt cnh no
trn ng i th nht m khng nm trn ng i th hai th s lm mt tnh lin
thng ca th . Mu thun vi gi thit ( v b i mt cnh m vn cn lin thng )
iv) -> v) : Nu T c mt chu trnh , gi v,w l hai nh phn bit ca chu trnh ny , r
rng , ta c hai ng khc nhau ni v vi w trn chu trnh ny (v l : v T l cy ) vy T
khng c chu trnh .By gi ta thm mt cnh mi ni v v w khi cnh mi ny kt
hp vi mt ng i t v ti w khng cha cnh mi s to nn mt chu trnh trong T
v)-> vi) : Xt hai nh bt k x,y ca T . Thm vo T cnh mi ni x,y th to ra mt
chu trnh . Hy b cnh mi ny ra khi chu trnh th ta c mt ng ni x v y . vy T lin
thng . M theo gi thit T khng c chu trnh vy T l cy .

74

vi) -> i) Gi s T c chu trnh . Hy b mt cnh trong chu trnh ny ta c vn c T


lin thng . Nu th vn cn chu trnh ta tip tc hy mt cnh trong chu trnh mi ny ,
c tip tc nh vy cho n khi T khng cn chu trnh ta c mt th lin thng v
khng c chu trnh .Nhng khi th c n nh m s cnh <n-1 (v l ) .Vy T khng
c chu trnh v T l cy .

5.3. Tm v bn knh ca cy
Xt mt cy c gc T
Mc (level) ca mt nh v trong T l khong cch t gc n v .
Mc ln nht ca mt nh bt k trong cy gi l chiu cao ca cy (height)
Nu cnh xy l cnh ca T th ta gi x l cha (parent) ca y , y l con(child) ca x .
Hai nh cng cha gi l anh em (siblings) ca nhau . Nu c mt ng (c hng) t v
n w th v c gi l nh trc (ancestor) ca w , w gi l nh sau (desendant) ca v .
Nhng nh khng c con gi l l (leaves) , nhng nh khng l l c gi l nh trong
(internal vertices)
-Mt tp hp gm nhiu cy i mt khng c nh chung c gi l rng (forest).
By gi ta xt mt cy t do T
lch tm (eccentricity) ca nh x , k hiu l E(x) l khong cch ln nht t x n mt
nh bt k trong T :
E(x)= Max (x,y), yT
a) Tm v bn kinh ca Cy : nh c lch tm nh nht trong T c gi l Tm
(center) ca T , lch tm ca tm c gi l bn knh ca cy
nh l 5.3.1 : Trong mt cy t do c nhiu nht hai tm

5.4 Cy m-phn
a) nh ngha : Cho mt cy c gc T.Nu s cy con ti a ca mt nh trong T l m v
c t nht mt nh c ng m con th T gi l mt cy m-phn (m-arytree)
Nu mi nh trong T u c ng m con th T gi l mt cy m-phn y
(complete m arytree)

5.4.1. Cy nh phn v php duyt cy


nh ngha : Cy nh phn l mt cy c gcsao cho mi nh u c nhiu nht l hai
con . T gc , c th c mt hay hai cnh i xung , nh ni vi gc pha tri (phi) bng

75

cc cnh ny gi l cy con tri (phi) .Mi mt trong cc nh con ny li c con bn tri


hay con bn phi .v c nh th cho n l .
Ngi ta c th nh ngha quy cho cy nh phn nh sau:
Mt cy nh phn hoc l tp rng hoc gm mt gc vi hai cy con nh phn cch
bit gi l cy con bn tri v cy con bn phi .
Gc

Cy con bn tri

Cy con bn phi

5.4.2. Php duyt cy .


Duyt cy ( tree searching)l a ra mt danh sch lit k tt c cc nh ca cy ,
mi nh mt ln .
Thng thng c ba gii thut duyt cy nh phn .

Preorder Search, Inorder search v Posorder search

a) Gii thut Preorder search ( QUY)


Bc 1: n gc
Bc 2: n cy con bn tri , dng Preorder
Bc 3: n cy con bn phi , dng Preorder .
Th d : Xt cy nh phn :

Gii thut Preorder cho ta th t cc nh nh sau:


A, [ cy con bn tri ],[cy con bn phi]
Kt qu : A B D E C F
76

B) Gii thut Inorder search ( QUY)


Bc 1: n cy con bn tri , dng in order
Bc 2: n gc
Bc 3: n cy con bn phi , dng Inorder .
Th d : Xt cy nh phn :

Gii thut Inorder cho ta th t cc nh nh sau:


[ cy con bn tri ], A [cy con bn phi]
Kt qu : D B E A C F .

C) Gii thut Posorder search ( QUY)


Bc 1: n cy con bn tri , dng Posorder
Bc 2: n cy con bn phi , dng Posorder
Bc 3: n gc .
Th d : Xt cy nh phn :

Gii thut Posorder cho ta th t cc nh nh sau:


[ cy con bn tri ], [cy con bn phi],A
Kt qu : D E B C F A
77

5.5. Cy bao trm ca th


inh ngha : Cho mt th v hng G .Mt cy T gi l cy bao trm ( Spanning tree)
ca G nu T l mt th con cha mi nh ca G .
Bi ton cy bao trm nh nht ca th l mt trong nhng bi ton ti u trn th
tm c ng dng trong nhiu lnh vc khc nhau ca i sng . Trong mc ny chng ta
s trnh by nhng thut ton c bn gii cc bi ton ti u cho cy bao trm ( cy
khung) . Trc ht ta pht biu ni dung bi ton .
Gi s G=(V,E) l th v hng lin thng. Cy T(V,F) vi FE c gi l cy bao
trm ( spanning tree) ca th G
5.5.1. nh l. th G c cy bao trm nu v ch nu G lin thng .
tm cy bao trm ca th ta c th s dng thut ton duyt th theo chiu su
hoc duyt theo chiu rng.
5.5.2. Bi ton cy bao trm ti thiu
Gi s 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 G c gn vi mt trng s khng m c(e)
c gi l di ca n. Gi s H=(V,T) l cy bao trm ca th G. Ta gi di c(H)
ca cy bao trm H l tng di ca cc cnh ca n.
C(H)= c(e)

vi e T.

Cy bao trm c di nh nht c gi l cy bao trm ti thiu( minimal


spanning tree: MST) .
Thut ton tm cy bao trm c th dng thut ton duyt theo chiu su hoc duyt theo
chiu rng.
y chng ta minh ha thut ton tm cy bao trm bng duyt theo chiu su.
5.5.3. Php duyt cy theo chiu su :Deepth First Search (DFS)
Bc 1 : Chn mt nh bt k ca G lm gc ca T
Bc 2 : To mt ng i t gc i qua cc nh khng trong T , ko di ng
ny n khi khng th ko di thm c na . t ng ny vo T ri quay tr v nh
trc , xem nh ny l gc . lp li th tc ny cho n khi mi nh ca G nu nm
trong T .
procedure SPANNING_TREE_DFS(v)
{G l th v hng lin thng c cho bi danh sch k }
begin
chuaxet[v]:=false;
78

for u ke(v) do
if chuaxet(u) then
begin
T:=T {(v,u)}
SPANNING_TREE_DFS(v)
end;
end;
begin
(*khi to*)
for u V do
chuaxet:=true;
T:=; (*T l tp cnh ca cy khung*)
SPANNING_TREE_DFS(root) (*root l nh no ca th*)
end.
5.5.4. Php duyt cy theo chiu rng :Breeth First Search (BFS)
Bc 1 : Chn mt nh bt k ca G lm gc ca T
Bc 2 : t mi cnh ni gc vi mt nh ngoi T vo T . ln lt xt tng nh
con ca gc , xem nh ny l gc mi . lp li th tc ny cho n khi mi nh ca G u
nm trong T .
Th d: Cho th lin thng G nh sau :

Ly nh 1 lm gc .
Ta c cy bao trm to theo b su l :
79

Ta c cy bao trm to theo chiu rng .

5.5.5. Thut ton Kruskal tm cy bao trm ti thiu


Xt th G=(V,T) tc G cha tt c cc nh nh th G , nhng tp cnh ca
G l TE. Ban u T=, th G=(V, ) c n thnh phn lin thng , mi thnh
phn lin thng ch cha mt nh . Trong qu trnh xy dng T th G=(V,T) gm
mt s thnh phn lin thng . Vic chn cnh (u,v) trong mi bc thm vo T
c thc hin nh sau: Ta xt cc cnh ca th G theo th t di tng dn .
Vi mi cnh (u,v) E , nu u,v nm trong hai thnh phn lin thng khc nhau ca
G th ta thm (u,v) vo T, v khi hai thnh phn lin thng ny c hp nht
thnh mt thnh phn lin thng ca G. Cn nu u,v cng thuc mt thnh phn
lin thng th ta loi b cnh (u,v) ( v trong trng hp ny nu ta thm (u,v)
vo T th mt chu trnh s c to ra ). Qu trnh trn c lp li cho n khi no
G=(V,T) ch c mt thnh phn lin thng v T l cy bao trm. Cn lu rng v
T c n nh nn T cha ng (n-1) cnh , do qu trnh trn c lp li cho n
khi T cha ng (n-1) cnh.
80

C th ta c cc bc sau :
Bc 1:

T= { V, }

Bc 2:

Nu T lin thng th dng , nu khng qua bc 3

Bc 3: Chn mt cnh c trng s nh nht khng trong T sao cho khi thm cnh ny
vo th T khng to thnh chu trnh . t cnh ny vo T . Tr v bc 2 .

Procedure Kruskal;
Begin
T:=
While |T| <|n-1| and (E ) do
Begin
Chn e l cnh c di nh nht trong E
E:=E\{e}
If (T {e} khng cha chu trnh ) then
T:=T {e};
End;
If |T| <|n-1| then
th khng lin thng
End;

V d:
Tm cy bao trm ti thiu ca th sau:

Sp xp cc cnh c di tng dn :
BC,BE,GD,AD,AB,EG,EC,GH,DE,GF,BD,DF,CH,EH
Th t cc cnh to thnh cy bao trm l :
BC,BE,GD,AD,AB,GH,GF,

81

c(H)= c(e)= 2+2+2+3+3+3+4=19

5.5.6. Thut ton Prim tm cy bao trm ti thiu


Thut ton Kruskal lm vic km hiu qu i vi nhng th dy ( th vi s cnh m
(n-1)/2 cnh ) Trong trng hp thut ton Prim t ra c hiu qu hn. Thut ton
Prim cn c gi l phng php ln cn gn nht.
Trong thut ton Prim , ta gi U l tp nh k cc cnh trong T. Ban u U cha mt nh
ty ca G, cn tp cc cnh T rng . mi bc , ta s chn cnh (u,v) ngn nht sao cho
uU, vV-U, ri thm v vo U v thm cnh (u,v) vo T. iu ny m bo rng sau mi
bc T lun lun l mt cy . Chng s tip tc pht trin T cho n khi U=V.Lc T tr
thnh cy bao trm ca th G. Chng ta biu din thut ton Prim bi th tc sau:
C th ta c cc bc sau:
Bc 1: chn ty mt nh ca G t vo T

Bc 2: Nu mi nh ca G u nm trong T th dng , nu khng qua bc 3


Bc 3: Tm mt cnh c trng s nh nht ni mt nh trong T vi mt nh ngoi
T . Thm cnh ny vo T . Tr v bc 2 .

Procedure Prim
Var U: tp cc nh ;
U,v: nh
Begin
U:={mt nh ty }
T:= ;
Repeat
Chn cnh (u,v) ngn nht vi u U, v V-U
U:=U {v}
T:=T {(u,v)}
Until U=V;
82

End;

BI TP CHNG V
Bi tp l thuyt
5-1.Gi s th G lin thng, c 13 nh v 20 cnh. Hi cy khung ca G c bao nhiu
nh ? c bao nhiu cnh ?
83

5-2.Tm cy khung ca th (hnh 1,2) sau theo phng php DFS, BFS (chn nh 1 lm
gc)
2

Hnh 1

Hnh 2

5-3.Tm cy khung b nht ca cc th sau (hnh 3,4) theo phng php KrusKal, Prim
3

20

11

33

8
18

1
17

14
4
3

4
5

18

16

13

1
12

4
5

Hnh 3

Hnh 4

84

5-4.Tm cy khung b nht ca cc th sau (hnh 5,6) theo phng php KrusKal,
Prim

8
10

11

18

16

30
2

14
4

12

10

26

6
1

Hnh 5

Hnh 6

5-5.Tm cy khung b nht ca cc th sau (hnh 7) theo cc phng php


KrusKal,Prim
A

66
4

2 42

8 8

E
1010

3
G
G

Hnh 7

85

Bi tp thc hnh
5-6. Mng an ton
Cho mt mng N (N <= 20) my tnh c nh s t 1 n N. S mng c cho bi
h gm M knh (on) ni trc tip gia mt s cp my trong mng, m knh tng ng
vi m cp. Cho bit chi ph truyn 1 n v thng tin theo mi knh ca mng.
Ngi ta cn chuyn mt bc thng ip t my s n my t. m bo an ton, ngi ta
chuyn bc thng in ny theo hai ng truyn tin khc nhau (tc khng c knh no)
ca mng c s dng trong c hai ng truyn tin; cho php hai ng truyn tin cng
i qua mt s my tnh). Chi ph ca mt ng truyn c hiu l tng chi ph trn cc
knh ca n. n gi ng truyn t my s sang my t c tnh nh sau:
Vi hai my s v t, cng bc thng ip c di l 1 n v thng tin, n gi truyn cho
cp (s, t) c tnh bng tng chi ph chuyn thng ip an ton (bng tng chi ph ca hai
ng truyn tin) l nh nht.
Ngi ta mong mun mng my tnh (mng truyn tin ni trn tha mn tnh cht an ton
theo ngha l t mt my bt k lun truyn c (mt cch an ton) thng ip ti mt
my bt k khc. Khi mt mng an ton, ngi ta tnh c n gi ca mng l tng n
gi mi ng truyn t mt my bt k ti mt my bt k khc.
Ma trn n gi ca mng l mng hai chiu A c N dng v N ct, m gi tr phn t A[i,
j] chnh l n gi t my i sang my j.
Cu 1: Cho trc mt mng, hy kim ra tnh an ton ca mng .
Cu 2: Khi mng khng an ton c php b sung mt s knh truyn n tr thnh an
ton. n gi mi knh truyn b sung theo c coi bng hai ln gi tr cc i n gi
cc knh c. Mi knh b sung c coi c n gi nh nhau. Hy tm cch b sung cc
knh mi m n gi mng l nh nht.
Cu 3: Khi mng an ton hoc sau khi b sung knh mng an ton, hy in ra n gi
mng v ma trn n gi.
D liu vo: cho trong file INP.B2 vi cu trc nh sau:
Dng u tin ghi 2 s n, m cch nhau bi du cch.
Mi dng th i trong s m dng tip theo ghi thng tin v knh ni th i ca mng gm 3 s
d[i], c[i], g[i] trong d[i], c[i] l ch s ca hai my tng ng vi knh ny v g[i]
(nguyn dng) l chi ph truyn mt n v thng tin t my d[i] n my c[i] theo

86

knh ny. Cc gi tr g[i] cho trc khng vt qu 40 (v nh vy n gi cc knh b


sung khng vt qu 80).
Kt qu: ghi ra file OUT.B2 theo qui cch sau:
Dng u tin ghi 1 s nguyn p th hin mng c an ton hay khng v p c ngha l s
lng knh cn b sung. p=0 c ngha mng an ton; p>0 c ngha mng khng an ton v
cn b sung p knh na mng an ton vi chi ph b sung t nht.
p dng tip theo ghi p knh b sung. Cch ghi nh trong file d liu vo.
Dng tip theo ghi n gi ca mng an ton.
N dng tip theo ghi ma trn n gi ca mng an ton: mi hng ca ma trn ghi trn mt
dng.
5-7.Xy dng ng ng nc
C 1 trm cp nc v N im dn c. Hy xy dng chng trnh thit k tuyn ng
ng nc cung cp n mi nh sao cho tng chiu di ng ng phi dng l t nht. Gi
s rng cc ng ng ch c ni gia 2 im dn c hoc gia trm cp nc vi im
dn c.

Ci t mt s thut ton cn bn quan trng


Tm cy khung da vo DFS
1.

#include <conio.h>

2.

#include <iostream.h>

3.

#include <stdio.h>

4.

int daxet[100];

5.

int a[100][100];

6.

int dau[100],cuoi[100];

7.

int socanh=0;

8.

int n;

9.

void dfs(int v)

10.

11.

daxet[v]=1;

12.

for (int u=1;u<=n;u++)

13.

if (a[v][u]!=0 && !daxet[u])

14.

15.

dau[++socanh]=v;
87

16.

cuoi[socanh]=u;

17.

dfs(u);

18.

19.

20.

void readfile()

21.

22.

FILE *f;

23.

clrscr();

24.

f=fopen("d:\\dothi\\tree.inp","rt");// hinh2.inp

25.

fscanf(f,"%d",&n);

26.

for (int v=1;v<=n;v++)

27.

for (int u=1;u<=n;u++)

28.

fscanf(f,"%d",&a[u][v]);

29.

fclose(f);

30.

31.

void find()

32.

33.

for (int v=1;v<=n;v++)

34.

daxet[v]=0;

35.

for (v=1;v<=n;v++)

36.

if (!daxet[v])

37.

dfs(v);

38.

39.

void treedfs()

40.

{ cout<<"cay khung cua do thi:"<<endl;

41.

for (int i=1; i<=socanh;i++)

42.

cout<<"("<<dau[i]<<","<<cuoi[i]<<")"<<endl;

43.

44.

void main()

45.

46.

readfile();

47.

find();
88

48.

treedfs();

49.

}
TREE.INP

TREE.OUT
?

8
00010100
00011001
00000100
11001110
01010010
10110000
00011001
01000010

Tm cy khung da vo BFS
1.

#include <conio.h>

2.

#include <iostream.h>

3.

#include <stdio.h>

4.

int daxet[100];

5.

int a[100][100];

6.

int Queue[100];

7.

int dau[100],cuoi[100];

8.

int socanh=0;

9.

int n;

10.

void BFS(int u)

11.

12.

int w,v;

13.

int dauQ,cuoiQ;

14.

dauQ=1;cuoiQ=1;

15.

Queue[dauQ]=u;

16.

daxet[u]=1;

17.

while (dauQ<=cuoiQ)

18.

{
89

19.

v=Queue[dauQ++];

20.

for (w=1;w<=n;w++)

21.

if (a[v][w]==1 && !daxet[w])

22.

23.

Queue[++cuoiQ]=w;

24.

daxet[w]=1;

25.

dau[++socanh]=v;

26.

cuoi[socanh]=w;

27.

28.

29.

30.

void find()

31.

32.

for (int v=1;v<=n;v++)

33.

daxet[v]=0;

34.

for (v=1;v<=n;v++)

35.

if (!daxet[v])

36.

BFS(v);

37.

38.

void readfile()

39.

40.

FILE *f;

41.

clrscr();

42.

f=fopen("d:\\dothi\\tree.inp","rt");

43.

fscanf(f,"%d",&n);

44.

for (int v=1;v<=n;v++)

45.

for (int u=1;u<=n;u++)

46.

fscanf(f,"%d",&a[u][v]);

47.

fclose(f);

48.

49.

void treebfs()

50.

{
90

51.

{ cout<<"cay khung cua do thi:"<<endl;

52.

for (int i=1; i<=socanh;i++)

53.

cout<<"("<<dau[i]<<","<<cuoi[i]<<")"<<endl;

54.

55.

56.

void main()

57.

58.

readfile();

59.

find();

60.

treebfs();

61.

}
TREE.INP

TREE.OUT
?

00010100
00011001
00000100
11001110
01010010
10110000
00011001
01000010

THUT TON KRUSKAL


D liu vo:
c lu trn file kruskal.inp c cu trc nh sau:
Dng u ghi 2 s nguyn dng n,m ln lt l s nh v s cnh ca th.
Trong m dng tip theo mi dng ghi 3 s ln lt l nh u, nh cui v trng s
ca cnh tng ng.
D liu ra:
Xut ln mn hnh cc thng tin:
Cc cnh to thnh cy khung b nht v tng di ca cy khung b nht ny.
91

V d
69
2 3 18
2 4 20
1 2 33
354
468
459
5 6 14
3 4 16
1 3 17
Phn khai bo cc bin
Khai bo kiu d liu c tn l canh lu tr thng tin cc cnh ca th, mi cnh ca
th c biu din bi nh u (dau), nh cui (cuoi) v trng s (w). n l s nh ca
th v m l s cnh ca th. c l mt mng 1 chiu kiu canh. connect l mng 2 chiu
cho bit hai nh no trong cy khung tm c c lin thng nhau hay khng ?
connect[i][j] =1 nu i v j l lin thng v ngc li
.const max=100; // hoac viet #define max 100
struct canh
{

int dau,cuoi;
int w;

};
int

n,m,connect[max][max];

canh c[max];
Chng ta cn thc hin mt s hm sau:
1.Hm c file
2.Hm sp xp cc cnh theo chiu tng dn
3.Hm cp nht li cc nh lin thng ca cy khung tm c
Ti mi thi im ta xt cnh (u,v) trong dy cc cnh c sp, nu hai nh u,v
l khng lin thng - ngha l connect[u][v]=0 thi cnh (u,v) ny s c a vo cy khung
kt qu v ta cn cp nht li s lin thng ca cc nh c trong cy khung ang tm
thy n thi im bng cch cho connect[i][j]=1 v connect[j][i]=1 v ch l khi a
92

mt cnh (u,v) mi vo cy khung th ta phi cp nht tt c cc nh c trong cy


khung cng vi hai inh u,v l lin thng.
4.Hm KrusKal
Nu tm thy mt cnh (trong dy cnh c sp) c 2 nh khng lin thng th ta lm mt
s bc nh sau:
Tng s cnh ca cy khung ln 1
Cp nht li s lin thng ca cc nh trong cy khung ang tm c
Thm trng s cnh ang xt vo di ca cy khung.
Ton vn ca chng trnh ny nh sau:
1.

#include<conio.h>

2.

#include<stdio.h>

3.

#include<iostream.h>

4.

const max=100; // hoac viet #define max 100

5.

struct canh

6.

{ int dau,cuoi;

7.

int w;

8.

};

9.

int n,m,connect[max][max];

10.

canh

11.

void readfile()

12.

13.

FILE

14.

f=fopen("d:\\dothi\\kruskal.inp","rt");

15.

fscanf(f,"%d%d",&n,&m);

16.

for (int i=1;i<=m;i++)

17.

fscanf(f,"%d%d%d",&c[i].dau,&c[i].cuoi,&c[i].w);

18.

fclose(f);

19.

for (i=1;i<=n;i++)

20.

for (int j=1;j<=n;j++)

21.

connect[i][j]=0;

22.

for (i=1;i<=n;i++)

c[max];

*f;

93

23.

connect[i][i]= 1;

24.

25.

void sort()

26.

{canh temp;

27.

for (int i=1;i<=m-1;i++)

28.

for (int j=i+1;j<=m;j++)

29.

if( c[i].w > c[j].w)

30.

31.

c[i]=c[j];

32.

c[j]=temp;

33.

34.

for (i=1;i<=m;i++)

35.

cout<<"Canh thu "<<i<<" noi dinh "<<c[i].dau<<" voi dinh

temp=c[i];

"<<c[i].cuoi<<" co trong so = " <<c[i].w<<endl;


36.

37.

void updateconnect(int i, int j)

38.

39.

connect[i][j] = 1;

40.

connect[j][i] = 1;

41.

for (int k=1;k<=n;k++)

42.

for (int l=1;l<=n;l++)

43.

if(connect[k][i]==1 && connect[j][l] ==1 )

44.

45.

connect[k][l]=1;

46.

connect[l][k]=1;

47.

48.

49.

void kruskal()

50.

51.

int tong=0,i=1,socanhchon=0,dinhdau,dinhcuoi;

52.

while (socanhchon < n-1)

53.

{dinhdau=c[i].dau;
94

54.

dinhcuoi=c[i].cuoi;

55.

if( connect[dinhdau][dinhcuoi]==0)

56.

57.

socanhchon++;

58.

updateconnect(dinhdau,dinhcuoi);

59.

cout<<dinhdau<<","<<dinhcuoi<<","<<c[i].w<<endl;

60.

tong=tong+c[i].w;

61.

62.

i++;

63.

64.

cout<<tong;

65.

66.

void main()

67.

68.

readfile();

69.

sort();

70.

kruskal();

71.

Ton vn ca chng trnh cho thut ton Prim ny nh sau:


1.

#include<conio.h>

2.

#include<stdio.h>

3.

#include<iostream.h>

4.

const max=100; // hoac viet #define max 100

5.

const MAXINT=32767;

6.

int n,c[max][max];

7.

void readfile()

8.

9.

FILE

10.

f=fopen("d:\\dothi\\prim1.inp","rt");

11.

fscanf(f,"%d",&n);

12.

for (int i=1;i<=n;i++)

*f;

95

13.

for (int j=1;j<=n;j++)

14.

fscanf(f,"%d",&c[i][j]);

15.

fclose(f);

16.

17.

void prim()

18.

19.

int vh[max],daxet[max];

20.

int tong=0,dinhdau, dinhcuoi,sodinh=1;

21.

vh[sodinh]=1;

22.

for (int i=1;i<=n;i++) daxet[i]=0;

23.

daxet[sodinh]=1;

24.

while (sodinh<n)

25.

26.

int min=MAXINT;

27.

for (int i=1;i<=sodinh;i++)

28.

for (int j=1;j<=n;j++)

29.

if (vh[i]!=j && c[vh[i]][j]!=0 && !daxet[j] && c[vh[i]][j]<min)

30.

31.

min=c[vh[i]][j];

32.

dinhdau=vh[i];

33.

dinhcuoi=j;

34.

35.

daxet[dinhcuoi]=1;

36.

vh[++sodinh]=dinhcuoi;

37.

tong=tong+c[dinhdau][dinhcuoi];

38.

cout<<dinhdau<<"," <<dinhcuoi<<endl;

39.

40.

cout<<"Tong do dai cua cay khung nho nhat la : "<< tong;

41.

42.

void main()

43.

44.

clrscr();
96

45.

readfile();

46.

prim();

47.

}
PRIM1.INP

PRIM1.OUT
?

0 33 17 0 0 0
3 3 0 18 20 0 0
17 18 0 16 4 0
0 20 16 0 9 8
0 0 4 9 0 14
0 0 0 8 14 0

97

CHNG VI

BI TON NG I NGN NHT


Trong cc ng dng thc t, vi ton tm ng i ngn nht gia hai nh ca mt th
lin thng c mt ngha to ln. C th dn v bi ton nh vy nhiu bi ton thc t
quan trng. V d, bi ton chn mt hnh trnh tit kim nht (theo tiu chun hoc
khong cch hoc thi gian hoc chi ph) trn mt mng giao thng ng b, ng thy
hoc ng khng; bi ton chn mt phng php tit kim nht a ra mt h thng
ng lc t trng thi xut pht n trng mt trng thi ch, bi ton lp lch thi cng cc
cng cc cng on trong mt cng trnh thi cng ln, bi ton la chn ng truyn tin
vi chi ph nh nht trong mng thng tin, v.v Hin nay c rt nhiu phng php
gii cc bi ton nh vy. Th nhng, thng thng, cc thut ton c xy dng da
trn c s l thuyt th t ra l cc thut ton c hiu qu cao nht. Trong chng ny
chng ta s xt mt s thut ton nh vy.
6.1. CC KHI NIM M U
Trong chng ny chng ta ch xt th c hng G =(V,E), |V|=n, |E|=m vi cc cung
c gn trng s, ngha l, mi cung (u,v) E ca n c t tng ng vi mt s thc
a(u,v) gi l trng s ca n. Chng ta s t a(u,v) = , nu (u,v) E. Nu dy
v0, v1, . . ., vp
l mt ng i trn G, th di ca n c nh ngha l tng sau
P

a(v
I =1

i 1

, vi )

tc l, di ca ng i chnh l tng ca cc trng s trn cc cung ca n. (Ch


rng nu chng ta gn trng s cho tt c cung u bng 1, th ta thu c nh ngha
di ca ng i nh l s cung ca ng i ging nh trong cc chng trc xt).
Bi ton tm ng i ngn nht trn th di dng tng qut c th pht biu nh sau:
tm ng i c di nh nht t mt nh xut pht s V n nh cui (ch) t V.
ng i nh vy ta s gi l ng i ngn nht t s n t cn di ca n ta s k hiu
l d(s,t) v cn gi l khong cch t s n t (khong cch nh ngha nh vy c th l s
m). Nu nh khng tn ti ng i t s n t th ta s t d(s,t)= . R rng, nu nh
mi chu trnh trong th u c di dng, trong ng i ngn nht khng c nh
no b lp li (ng i khng c nh lp li s gi l ng i c bn). Mt khc nu
98

trong th c chu trnh vi di m (chu trnh nh vy gi ngn gn ta gi l chu


trnh m) th khong cch gia mt s cp nh no ca th c th l khng xc nh,
bi v, bng cch i vng theo chu trnh ny mt s ln ln, ta c th ch ra ng i
gia cc nh ny c di nh hn bt c s thc cho trc no. Trong nhng trng
hp nh vy, c th t vn tm ng i c bn ngn nht, tuy nhin bi ton t ra s
tr nn phc tp hn rt nhiu, bi v n cha bi ton xt s tn ti ng i Hamilton
trong th nh l mt trng hp ring.
Trc ht cn ch rng nu bit khong cch t s n t, th ng i ngn nht t s n t,
trong trng hp trng s khng m, c th tm c mt cch d dng. tm ng i,
ch cn l i vi cp nh s, t V tu (s <> t) lun tm c nh v sao cho
d(s,t) = d(s,v) + a(v,t).
Thc vy, nh v nh vy chnh l nh i trc nh t trong ng i ngn nht t s n t.
Tip theo ta li c th tm c nh u sao cho d(s,v) = d(s,u) + a(u,v), . . . T gi thit v
tnh khng m ca cc trng s d dng suy ra rng dy t, v, u, . . . khng cha nh lp li
v kt thc nh s. R rng dy thu c xc nh (nu lt ngc th t cc nh trong
n) ng i ngn nht t s n t. T ta c thut ton sau y tm ng i ngn
nht t s n t khi bit di ca n.
void Find_Path()
(*
u vo:
D[v] - khong cch t nh s n tt c cc nh cn li v V;
- nh ch;
a[u,v], u, v V ma trn trng s trn cc cung.
u ra:
Mng Stack cha dy nh xc nh ng i ngn nht t s n t
*)
stack= ; stack t; v=t;
while (v <> s)
{
u=nh tho mn d[v]=d[u]+a[u,v];
stack u;
v=u;
99

}
}
Ch rng phc tp tnh ton ca thut ton l O(n2), do tm nh u ta phi xt qua
tt c cc nh ca th. Tt nhin, ta cng c th s dng k thut ghi nhn ng i
trnh by trong chng 3: dng bin mng Truoc[v], v V, ghi nh nh i trc v
trong ng i tm kim.
Cng cn lu thm l trong trng hp trng s trn cc cnh l khng m, bi ton tm
ng i ngn nht trn th v hng c th dn v bi ton trn th c hng, bng
cch thay i mi cnh ca n bi n bi hai cung c hng ngc chiu nhau vi cng
trng s l trng s ca cc cnh tng ng. Tuy nhin, trong trng hp c trng s m,
vic thay nh vy c th dn n chu trnh m.
6.2.NG I NGN NHT XUT PHT T MT NH
Phn ln cc thut ton tm khong cch gia hai nh s v t c xy dng nh k thut
tnh ton m ta c th m t tng quan nh sau: t ma trn trng s a[u][v], u,v V, ta
tnh cn trn d[v] ca khong cch t s n tt c cc nh v V. Mi khi pht hin
d[u] + a[u][v] < d[v] (1)
cn trn d[v] s c lm tt ln: d[v] + a[u][v].
Qu trnh s kt thc khi no chng ta khng lm tt thm c bt k cn trn no.
Khi , r rng gi tr ca mi d[v] s cho khong cch t nh s n nh v. Khi th hin
k thut tnh ton ny trn my tnh, cn trn d[v] s c gi l nhn ca nh v, cn
vic tnh li cc cn ny s c gi l th tc gn. Nhn thy rng tnh khong cch
t s n t, y, ta phi tnh khong cch t s n tt c cc nh cn li ca th. Hin
nay vn cha bit thut ton no cho php tm ng i ngn nht gia hai nh lm vic
thc s hiu qu hn nhng thut ton tm ng i ngn nht t mt nh n tt c cc
nh cn li.
S tnh ton m ta va m t cn cha xc nh, bi v cn phi ch ra th t cc nh u
v v kim tra iu kin (1). Th t chn ny c nh hng rt ln n hiu qu ca
thut ton.
By gi ta s m t thut ton Ford-Bellman tm ng i ngn nht t nh s n tt c
cc nh cn li ca th. Thut ton lm vic trong trng hp trng s ca cc cung l
tu , nhng gi thit rng trong th khng c chu trnh m.
100

void Ford_Bellman()
(*
u vo:
th c hng G = (V,E) vi n nh, s V l nh xut pht, a[u][v], u, v

V, ma trn trng s;
Gi thit: th khng c chu trnh m.
u ra:
Khong cch t nh s n tt c cc nh cn li d[v], v V.
Trc[v], v V, ghi nhn nh i trc v trong ng i ngn nht t s n
v.
*)
(* Khi to *)
for v V
{
d[v]=a[s][v];
Truoc[v]=s;
};
d[s]=0;
for k=1 to n-2
for v V\{s}
for u V
if (d[v] > d[u] +a[u][v] )
{
d[v]=d[u]+a[u][v];
Truoc[v]=u;
}
}
Tnh ng n ca thut ton c th chng minh trn c s trn nguyn l ti u ca quy
hoch ng. R rng l phc tp tnh ton ca thut ton l O(n3). Lu rng chng ta
c th chm dt vng lp theo k khi pht hin trong qu trnh thc hin hai vng lp trong
khng c bin d[v] no b i gi tr. Vic ny c th xy ra i vi k<n-2, v iu lm
101

tng hiu qu ca thut ton trong vic gii cc bi ton thc t. Tuy nhin, ci tin
khng thc s ci thin c nh gi phc tp ca bn thn thut ton. i vi th
tha tt hn l s dng danh sch k Ke(v), v V, biu din th, khi vng lp
theo u cn vit li di dng
for u Ke(v)
if (d[v] > d[u] + a[u][v] )
{
d[v]=d[u]+a[u][v];
Truoc[v]=u;
}
Trong trng hp ny ta thu c thut ton vi phc tp O(n,m).
Th d 1.
Xt th trong hnh 1. Cc kt qu tnh ton theo thut ton c m t trong bng di
y
(3)

A=

-5

Hnh 1. Minh ha thut ton Ford_Bellman


d[1] Truoc[1]

d[2] Truoc[2]

d[3] Truoc[3]

d[4] Truoc[4]

d[5] Truoc[5]

0,1

1,1

,1

,1

3,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

Bng kt qu tnh ton theo thut ton Ford_Bellman


Trong cc mc tip theo chng ta s xt mt s trng hp ring ca bi ton tm ng i
ngn nht m gii chng c th xy dng nhng thut ton hiu qu hn thut ton
102

Ford_Bellman. l khi trng s ca tt c cc cung l cc s khng m hoc l khi th


khng c chu trnh.
6. 3. TRNG HP MA TRN TRNG S KHNG M - THUT TON
DIJKSTRA
Trong trng hp trng s trn cc cung l khng m thut ton do Dijkstra ngh lm
vic hu hiu hn rt nhiu so vi thut ton trnh by trong mc trc. Thut ton c
xy dng da trn c s gn cho cc nh cc nhn tm thi. Nhn ca mi nh cho bit
cn ca di ng i ngn nht t s n n. Cc nhn ny s c bin i theo mt
th tc lp, m mi bc lp c mt nhn tm thi tr thnh nhn c nh. Nu nhn ca
mt nh no tr thnh mt nhn c nh th n s cho ta khng phi l cn trn m l
di ca ng i ngn nht t nh s n n. Thut ton c m t c th nh
sau.Thut ton Dijkstra ( Trng hp vi ma trn trng s khng m)
Thut ton c da trn c s xy dng mt cy L v cc hm : V[0;] v
Hm : V\{v0} V .
Procedure Dijkstra ;
( * u vo : th c hng G=(V,E) vi n nh , s V l nh xut pht , a[u,v]
l ma trn trng s , vi a[u,v] 0, u,v V
u ra : Khong cch t nh s n cc nh cn li l d[v] , v V
Begin
Bc 1: ( * Khi to *)
t L={ v0} , (v0)=0. Vi v V\{v0}. (v)=c(v0,v) va (v)=v0
Bc 2: Nu mi nh ca G u thuc L th dng , nu khng qua bc 3
Bc 3: Chn v L sao cho (v) nh nht
Nu v*=v . a thm nh v* v cnh (v*)v* vo L
Bc 4: Vi mi w V\L , nu (w)> (v*) +c(v*,w) th t (w)= (v*)
+c(v*,w) v (w)=v* . Tr v bc 2.
V d :

103

Dng thut ton Dijkstra tm ng i ngn nht t nh A n cc nh cn li.


Bc 1, Ta lp bng sau:

A B C
L
0 2
A A


1
A A A

Chn nh F t vo L v ta c bng sau:

A B C
L
0 2
A A

D E
4
F A

F
L
1
A

6
F

Chn nh B t vo L v ta c bng sau:


A B C D E
L L
0 2 4 4 6
A B F B

F
L
1
A

6
F

Chn nh C vo L v ta c bng sau:

A B C D E F
L L L
L
0 2 4 4 6 1
A B F B A

6
F

5
A

Chn nh D vo L v ta c bng sau:


L

A B C
L L L
0 2 4
A B

D E
L
4 6
F B

F
L
1
A

6
F

5
C

104

Chn nh H vo L v ta c bng sau:


L

A B C
L L L
0 2 4
A B

D E
L
4 6
F B

F
L
1
A

H
L
5
C

6
F

Chn nh E vo L v ta c bng sau:

A B C
L L L
0 2 4
A B

D E
L L
4 6
F B

F
L
1
A

G
6
F

H
L
5
C

Cui cng chn nh G vo L v ta c bng :


L

A B C
L L L
0 2 4
A B

D E
L L
4 6
F B

F
L
1
A

G
L
6
F

H
L
5
C

Thut ton kt thc khi cc nh ca G u c trong L v ta c :


ng i ngn nht t nh A n nh H l : 5
ng i ngn nht t nh A n nh C l : 4
ng i ngn nht t nh A n nh G l : 6
ng i ngn nht t nh A n nh E l : 6
ng i ngn nht t nh A n nh D l : 4
ng i ngn nht t nh A n nh B l : 2
ng i ngn nht t nh A n nh F l : 1

105

Ta c chng trnh m t thut ton Dijkstra theo NN C nh sau:


#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.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()
{
FILE *f;int I,j;
f=fopen(Diskstra.INP,rt);
fscanf(f,%d,&n);
printf( \n so dinh cua DOTHI la %d,n);
printf(\n Ma tran khoang cach:);
for(i=1; i<=n;i++)
{
printf(\n);
for(j=1;j<=n;j++)
{
fscanf(f,%d, &CP[I,j]);
printf(%3d,CP[i][j]);
if(CP[i]j]==0) CP[i][j]=32000;
}
}
}
f close(f);
}
//----------------------------------------------106

Void Result()
{
Int I,j ;
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()
{
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]))
107

{
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]=+CP[u][v];
Truoc[v]=u;
}
}
}
}
}
}
//------------------------------------------------------------Void main()
{
Clrscr();
Init();
Disktra();
Result();
Getch();
}
nh l 1.
Thut ton Dijkstra tm c ng i ngn nht trn th sau thi gian c O(n2).
Ch :
Nu ch cn tm ng i ngn nht t s n mt nh t no th c th kt thc thut
ton khi nh t tr thnh c nhn c nh.
4. NG I NGN NHT GIA TT C CC CP NH

108

R rng ta c th gii bi ton tm ng i ngn nht gia tt c cc cp nh ca th


bng cch s dng n ln thut ton m t mc trc, trong ta s chn s ln lt l cc
nh ca th. R rng, khi ta thu c thut ton vi phc tp O(n4) (nu s dng
thut ton Ford_Bellman) hoc O(n3) i vi trng hp trng s khng m hoc th
khng c chu trnh. Trong trng hp tng qut, s dng thut ton Ford_Bellman n ln
khng phi l cch lm tt nht. y ta s m t mt thut ton gii bi ton trn vi
phc tp tnh ton O(n3):

a. Thut ton Floyd. Thut ton c m t trong th tc sau y.


void Floyd()
(* Tm ng i ngn nht gia tt c cc cp nh
u vo: th cho bi ma trn trng s a[i,j], i, j =1, 2,. . ,n.
u ra:
Ma trn ng i ngn nht gia cc cp nh
d[i][j]=, i,j = 1, 2. . .,n,
trong d[i,j] cho di ng i ngn nht t nh i n nh j.
Ma trn ghi nhn ng i
p[i][j], i, j = 1, 2.. . , n,
trong p[i][j] ghi nhn nh i trc nh j trong ng i ngn nht t i
n j.
*)
(* Khi to *)
for i=1 to n
for j=1 to n
{
d[i][j]=a[i][j];
p[i][j]=i;
}
(* Bc lp *)
for k=1 to n
for i=1 to n
for j=1 to n
109

if (d[i][j]>d[i][k]+d[k][j])
{
d[i][j]=d[i][k]+d[k][j];
}
}
R rng phc tp tnh ton ca thut ton l O(n3).

b.Gia thut Floy m rng .


Bng cch t P0[i,j]=vj nu c ng ni vi vi vj v P0[i,j] khng xc nh nu
khng .

Gii thut Floy m rng m t nh sau :


Xc nh Wk v Pk da vo Wk-1 v Pk-1 nh sau :
Vi i=1 n n
Vi j=1 n n
Nu Wk-1[i,j]>Wk-1[i,k]+Wk-1[k,j] th t :
Wk[I,j]=Wk-1[i,k]+Wk-1[k,j]
V

Pk[i,j]=Pk-1[i,k]

Nu khng , Wk[i,j]=Wk-1[i,j]
V

Pk[i,j] =Pk-1[i,j]

Ta thy rng khi gii thut kt thc, ngoi ma trn khong cch ngn nht ni hai
nh ca th, ta cn c thm ma trn P=Pn cho ta xc nh ng ngn nht ny,
t Vi n Vj nh sau :
I, P*[i,j], P*[P[i,j],j],....., P*[P*[i,j],j],....,j

V d. Xt th c hng sau

Ta c :

7
W0

=
4

5
7
11

2
6

P0

=
1

3
3
3

4
110

Xt dng 1 , ct 1
7
W1

5
7

=
4

5
7

13
6

P1

3
3

=
1

3
3

2
4

Xet dng 2 , ct 2
W2

=
4

P2

=
1

Xt dng 3 , ct 3
W3

5
7

13
6

17
10

7
7

5
7

P3

3
3

2
4

2
4

2
4

3
3

2
4

Xt dng 4 , ct 4
W*=

W4

P4

Ta c chng trnh m t cho thut ton Floy nh sau :


#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<dos.h>
#define MAX 10000;
#define TRUE 1
#define false 0
Int n,s,t;
Char chon;
Int A[50][50],d[50][50],S[50][50];
Int n,u,v,k;
111

FILE *f;
//---------------------------------------------------------------Void Init()
{
f=fopen(Floy1.INP,rt);
if(f==NULL)
{
Printf(\n khong co File *.INP);
Getch();
Return ;
}
for(i=1; i<=n;i++)
for(j=1;j<=n;j++)
A[i][j]=0;
fscanf(f,%d, &CP[I,j]);
printf(%d%d%d,&n,&u,&v);
printf(\n so dinh cua DOTHI %d,n);
printf(\n Duong di tu dinh %d den dinh %d la:,u,v);
printf(\n ma tran trong so);
for(i=1i<=n;i++)
{
FOR(J=1;J<=N;J++)
{
fscanf(f,%d,&A[i][j]);
printf(%d5d,A[i][j]);
if(I !=j && A[i][j]==0)
A[i][j]=MAX;
}
}
f close(f);
getch();
}
//----------------------------------------------Void Result()
{
If(D[u][v]>=MAX)
112

{
printf(\n khong co duong di);
getch();
return;
}
Else
{
Printf(\n duong di ngan nhat :%d,D[u][v])
Printf(\n Dinh %3d,u);
While(u!=v)
{
Printf(%3d,u);
While(u!=v)
{
Printf(%3d,S[u][v];
U=S[u][v];
}
}
}
//--------------------------------------------------------Void Floy()
{
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]==A[MAX) S[i][j]=0;
Else
S[i][j]=j;
}
}
// Mang D[i,j] la mang chua cac gia tri khoang cach ngan nhat tu I den j
// MangS[i,j] la mang chua gia tri phan tu ngay sau cua i tren duong di ngan nhat
// tu i den j
113

For(k=1;k<=n;k++)
{
For(i=1 ;i<=n;i++)
{
For(j=1;j<=n;j++)
If( ( D[i][j]!=MAX ) && (D[i][k]>D[k][j]))
{
// tim D[I,j] nho nhat co the
D[i][j]=D[j][k]+D[k][j];
S[i][j]=S[i][k];
// ung voi phan tu ngay sau i
}
}
}
}
}
//------------------------------------------------------------Void main()
{
Clrscr(); Init();
Floy();

Result();

Getch();
}

114

BI TP CHNG VI
Bi tp thc hnh:
6-1.Di chuyn gia cc o
Trn mt o quc, c N hn o. Gi s tt c cc o u c hnh dng l hnh ch nht
nm ngang. Trn mi hn o c th c sn bay nm trung tm o, c th c cng nm
4 gc o. Trn mi o u c tuyn ng xe but ni 4 gc o vi nhau v vi trung
tm o. Gia 2 o c th i li bng my bay nu c 2 o u c sn bay v c th i
li bng tu nu c 2 o u c cng.
Gi s rng:
Cc tuyn ng (b, khng, thy) u l ng thng.
Chi ph cho mi km v tc ca mi loi phng tin l:
Phng tin

Tc (km/h)

Chi ph (/km)

My bay

1000

1000

Xe but

70

100

Tu thy

30

50

Hy vit chng trnh xc nh tuyn ng v cch di chuyn gia 2 hn o trong o


quc sao cho:
Thi gian di chuyn t nht.
Chi ph di chuyn t nht.
Thi gian di chuyn t nht nhng vi mt s tin chi ph khng qu ng.
Chi ph di chuyn t nht nhng vi thi gian di chuyn khng vt qu T gi.
115

6-2.Tm hnh trnh tn t xng nht


Trn mt mng li giao thng, mt ngi mun i t im A n im B bng xe
my. Xe cha c ti a 3 lt xng v chy 100km ht 2,5 lt. Cc trm xng ch
c t cc im dn c, khng t gia ng v ngi ny khng mang
theo bt k thng cha xng no khc. Hy vit chng trnh nhp vo mng li
giao thng v xc nh gip ngi ny tuyn ng i t A n B sao cho t tn
xng nht.
6-3.Tm ng ngn nht
Gi s X l tp cc khu dn c, U l tp cc ng s ni lin cc khu . Ta gi s
mi ch giao nhau ca cc con ng u thuc X. Vi con ng u, s l(u) l
di ca u tnh bng km. Hy ch ra tuyn ng i t mt khu i sang khu j sao cho
tng chiu di l nh nht.

116

CHNG 7
BI TON LUNG CC I TRONG MNG
Bi ton lung cc i trong mng l mt trong s bi ton ti u trn th tm c
nhng ng dng rng ri trong thc t cng nh nhng ng dng th v trong l thuyt t
hp. Bi ton c xut vo u nm 1950, v gn lin vi tn tui ca hai nh ton
hc M l Ford v Fulkerson. Trong chng ny chng ra s trnh by thut ton Ford Fulkerson gii bi ton t ra v nu mt s ng dng ca bi ton.
7. 1. MNG. LUNG TRONG MNG. BI TON LUNG CC I
7.1.1. nh ngha
Ta gi mng l th c hng G=(V,E), trong duy nht mt nh a khng c cung i
vo gi l nh pht, duy nht mt nh z khng c cung i ra gi l im thu v mi cung
e=(v,w) E c gn vi mt s khng m c(e) =c(v,w) gi l kh nng thng qua ca
cung e.
thun tin cho vic trnh by ta s qui c rng nu khng c cung (v,w) th kh nng
thng qua c(v,w) c gn bng 0.
7.1.2. nh ngha
Mng ( network) l mt n th c hng c trng s G=(V,E) trn chn mt
nh a gi l nh pht ( source vertex) v mt nh z gi l nh thu (sink vertex).
Xt mt th G=(V,E) vi nh pht a v nh thu z , Gi c(e) l trng s ca cnh c(e)
( c(e) N) . Vi mi nh x, t :
In(x) = { eE e ti trong x }
Out(x) = { eE e ti ngoi x }.
Mt hm ti ( flow function) trn G l mt hm :
117

Mot ham tai (flow function) tren G la mot ham : : E N


Tha mn cc iu kin sau:
: E N
i)

(e) c(e) , e E

ii)

(e) =0 , e In(a) Out(z)


(e)

iii)

(e)

e In(x)

, x V\ {a,z}

e out(x)

Mt php ct (cut) xc nh bi mt tp hp con P ca V , k hiu (P, P ) l tp hp


(P, P )= {xy x P v y P }
Trong P =V \ P. Php ct (P, P ) c gi l php ct (a-z) nu a P v z P

7.1.3. nh l Gi l mt hm ti trn mng G v P V\{a,z} Th :

(P, P

e (P, P )

( P ,P)

e( P ,P)

Chng minh :

(e)

(e)

x P , e In(x)

x P , e out(x)

Nu c mt cnh e c hai nh cng nn trong P th s hng (e) xut hin c hai v ca ng


thc trn. n gin cc s hng (e) nh th i , ta cn li ng thc

(e)

e (P, P )

(e)

e( P ,P)

7.1.4 nh l Vi mi hm ti (e) trn mng G , lng ti khi a bng lng ti vo z .

Ngha l :

(e)

(e)

e out(x)

e In(x)

7.1.5.nh l : Mi lt ct ( P ,P) ta nh ngha trng s ( Capacity) ca php ct ny l


c(P, P )

c(e)
e (P, P )

7.1.6. nh l : Vi mi hm ti v mi php ct a-z (P, P ) trong mng G ta c :


c(P, P )
7.1.7.H qu: Vi mi hm ti trn mng G , v mi php ct a-z ( P ,P) trong mng G ,
= c(P, P ) ,nu v ch nu hai iu kin sau c tha mn :
i) e ( P ,P) , (e)=0
ii) e(P, P ) , (e)=c(e)
Hn na khi = c(P, P ) th l hm ti c ti trng ln nht v (P, P ) l lt ct a-z c
trng s hp nht .

7.1.7 nh ngha :
118

Mt dy chuyn ( chain) a-z trn mng G l mt ng v hng ni a vi z .. Cho mt hm ti


trn G , s(e) =c (e)- (e) ta gi i lng ny l lch ti (slack) ca e i vi .
Nu s(e)=0 th ta ni cnh e bo ha (saturated) i vi
Xt mt dy chuyn a-z K trn G . Ta nh ngha hm :
k:E {-1,0,1}

Nh sau:
0 Neu e khng thuc K
k(e)=

Nu e K v c hng thun t a ti z

-1 Nu eK v c hng nghch t z ti a

7.1.8. THUT TON FORD-FULKERSON


Bt u t mt hm ti trn G ( Chng hn c th t (e)=0 vi mi cnh e )

Bc 1: Mi nh u cha xt (scan) v cha c nhn (label).


Gn nhn cho nh a l (- , (a)) vi (a) = . t P0=a

Bc 2: Xt P0 . Thc hin th tc ghi nhn cho cc nh k vi P0 nh sau :

a) Vi mi cnh e = p 0 q sao cho q cha c nhn v s(e)>0 th gn nhn cho q l

(q)=( p0+, (q)) , trong (q) =min((p0),s(e)).

Bc 3: Nu nh z ghi nhn th qua bc 4 ,ngc li qua bc 5


Bc 4: Dng thnh phn th nht ca nhn tm dy chuyn a-zK bng cch i ngc
(backtracking) t z v a.
t = + (z).

. Ri quay v bc 1.

Bc 5: Tm mt nh p no c nhn nhng cha xt . Nu tn ti mt nh p nh vy th t


p0=p . Quay v bc 2 .Nu khng tn ti nh p no nh vy th t P l tp hp
gm tt c cc nh c nhn ( v xt ), Ta s c php ct a-z(P, P )
. Dng gii thut .

7.1.9 nh l p dng thut ton FORD-FULKERSON vo mng G . Khi gii thut kt thc
th l hm ti ti i v (P, P ) l mt php ct a-z ti thiu ca G .

7.1.10. nh l Trong mt mng G , ti trng ca mt hm ti ti i bng trng s ca mt


php ct a-z ti thiu .
V du 1: Xt mng G , vi hm ti trn G nh sau:

119

Gn nhn (- , (a)) cho nh a vi (a) = . t P0=a

Xt nh a . Thc hin ghi nhn cho nh a . Khng c cnh no ti trong a c , cn hai cnh

ngoi a l ab v ac .

Coi nh b. V s (ab) =0 nn khng nhn cho nh b .

Coi nh c: v (a) = v s (ac) =3 nn ta gn nhn cho nh c l ( a+,3)


Xt nh c: t nhn cho nh d l ( c+,2)
Xt nh d: t nhn cho d l ( d-,2)
Xt nh b : t nhn cho e l ( b+,2)
Xt nh e : t nhn cho z l ( e+,2) . n y nh z c nhn .
Bng phng ln ngc t z , ta tm c y chuyn K=acdbez ta c
(z)=2 trn dy chuyn K hm ti c sa thnh
= + (z).

v lung trn mng nh sau:

120

Lp li gii thut trn


Li gn nhn cho nh a l (-, ).
Xt nh a . t nhn cho cho c l ( a+,1)
Xt nh c : Ta thy rng khng th gn nhn cho nh no khc .

Vy hm ti trn G nh trn l ti i v ( {a,c}, {b,d,e,z}) l mt php ct a-z ti thiu


V d 2. Cho mng G nh sau :

Vi l hm ti bng 0 trn G
Xt nh a . Khng c nh no ti trong a c

Thc hin ghi nhn cho nh a l : (-, ). C 3 cnh ti ngoi a l : ab , ac , v ad

Coi nh b: nh b cha c nhn v s (ab) = 6 . Vy gn nhn cho nh b l ( a+,6)


Tng t gn nhn cho nh c l ( a+,4) v cho nh d l (a+,7)

Xt nh b: t nhn cho e l (b+,6)


Xt nh c: t nhn cho f l (c+,3)
Xt nh e: t nhn cho cho z l (e+,4).By gi nh z c nhn .
Ta c dy chuyn abez v sa li hm ti nh sau :
121

Lp li th tc trn
Gn li nhn cho a l (- , )
Xt nh a.
t nhn cho b l ( a+,2) , nhn cho c l (a+,4) , nhn cho d l (a+,7).
Xt nh b.
t nhn cho e l ( b+,2)
Xt nh c.
t nhn cho f l (c+,3)
Xt nh f : t nhn cho z l (f+,3).

Ta c dy chuyn acfz v hm ti c sa li nh sau :

122

Lp li gii thut trn .


Xt nh a . t nhn cho a l (- , )
, nhn cho b l (a+ , 2 ) , nhn cho c l (a+ , 1 ), nhn cho d l (a+ , 7)
Xt nh b: t nhn cho e l (b+ , 2 )
Xt nh d . t nhn cho f l (d+ , 7 ).
Xt nh f . t nhn cho z l (f+ , 7 ).

Ta c dy chuyn adfz v hm ti c sa li nh sau.

Lp li th tc trn .
Xt nh a. t nhn cho a l (-, )

, t nhn cho b l (a+, 2 ) , Nhn cho c l (a+,1 )


Xt nh b .
t nhn cho e l (b+, 2 )
Xt nh c: t nhn cho d l (c+, 1 )
Xt nh d: t nhn cho f l (d+, 1 )
Xt nh f : t nhn cho z (f+, 1 ).

123

Ta c dy chuyn acdfz v hm ti c sa li nh sau :

Lp li gii thut trn


t nhn cho a l (-, )
Xt nh a. , t nhn cho b l (a+,2)
Xt nh b: t nhn cho e l (b+,2)
Xt nh e : t nhn cho c l (e+,2)
Xt nh c : t nhn cho d l (c+,2)
Xt nh d : t nhn cho f l (d+,1)
Xt nh f : t nhn cho cho z l (f+,1)

Ta c dy chuyn : abecdfz v hm ti c sa li nh sau :

124

Lp li gii thut trn :


t nhn cho a l (-, )
Xt nh a .t nhn cho b l (a+,1)
Xt nh b .t nhn cho e l (b+,1)
Xt nh e . t nhn cho c l (e+,1)
Xt nh c . t cho b l (c+,1)
Xt nh d . n y ta khng th gn nhn cho cho f v z . Nn hm ti trn G l ti i v
( {a,b,e,c,d}, {f,z}) l lt ct a-z ti thiu .

Hai th tc tm ng dy chuyn a-z K v tng hm ti trn ng dy chuyn c


th m t nh sau.
void Find_Path()
(* Th tc gn nhn tm ng tng hm ti
125

p[v], [v] l nhn ca nh v;


VT danh sch cc nh c nhn nhng cha xt;
c[[u,v] kh nng thng qua ca cung (u,v), u, v V;
f[u, v] Hm ti trn cung (u, v), u, v V . *)
p[s]=s;
[s]=+ ;
VT={s} ;
PathFound=1;
While VT<>
{
U VT; (* Ly u t VV *)
For v VT
{
If (f[u,v] <c[u,v]
{
p[v]=u;
[v]=min {[u], c[u,v] f[u,v] };
VT= VT { v } ; (* Np v vo danh sch nh c nhn *)
if v = t
exit;
else
if (f[v,u]>0)
{
p[v]=u;
[v]=min{ [u], f[v,u]};
VT= VT{v} ; (* Np v vo danh sch nh c nhn *)
if v = t
exit;
}
}
}
126

PathFound=0;
}
void Inc_Flow()
(* Tng hm ti theo dy chuyn (a-z) K *)
v=p[t]; u=t; tang= [t];// (z) = [t]
while u<> s
{
if v>0 then
f[v,u] = f[v,u] + tang;
else
{
v = -v;
f[u,v] = f[u,v] - tang;
}
u = v;
v = p[u];
}
}
Thut ton Ford_Fulkerson c thc hin nh th tc:
void Max_Flow()
(*Thut ton Ford_Fulkerson *)
(* Khi to: Bt u t lung vi gi tr 0 *)
for u V
for v V
f[u,v] = 0;
stop=0;
while (!stop)
{
find_path;
if pathFound
Inc_Flow
127

else stop=1;
}
<Lung cc i trong mng l f[u,v], u, v V >
<Lt ct hp nht l (VT, V\VT)>
}

BI TP CHNG VII
128

Bi tp l thuyt
Thc hin thut ton Ford-Fulkerson tm lung cc i trong mng ca cc hnh v sau.
Trnh by cc kt qu tnh ton trong mi bc lp bao gm :
- th tng lung (mng thng d)
-ng tng lung (ng i b sung) tm c theo tm kim theo chiu rng v kh
nng thng qua ca n (gi thit khi duyt cc nh k ca mt nh ta duyt theo th t
tng dn ca ch s).
-Mng cng lung tm c sau khi tng lung.
Kt qu cui cng: Cn a ra gi tr lung cc i.
7-1.

5,6

2
5,5

6,6

1,3

1
1,6

0,3

2,5

7-2.

1,1

0,5

5
4

0,18

0,7
0,2

0,2
0,3
0,15

0,8

7-3.

0,9
V4

V2
0,2

6,6

V6

0,2

4,4

10,10
4,5

6,8

0,3

0,1

0,2

6,9
4,4

10,10

Bi tp thc hnh

4,9

V3

V5

V7

129

7-4.C m chng trai, n c gi v k b mi, Mi b mi p (p=1,2,,k) c mt danh sch L p


mt s chng trai v c gi trong s cc chng trai v c gi ni trn l khch hng ca b
ta. B mi p c th se duyn cho bt c cp trai gi no l khch hng ca b ta, nhng
khng sc t chc qu dp m ci. Hy xy dng thut ton cn c vo danh sch Lp,
dp, p=1,2,,k; a ra cch t chc nhiu nht cc m ci gia m chng trai v n c gi
vi s gip ca cc b mi.
7-5.Cho hai dy s nguyn dng {pi, i=1,2,,m} v {qj,j=1,2,,n}. Hy xy dng ma
trn A={aij:i=1,2,,m; j=1,2,n} vi cc phn t ai j {0,1} c tng cc phn t trn
dng i l pi , tng cc phn t trn ct j l qj.
Phn ci t cc thut ton cn bn quan trng
Lung cc i trong mng
1.

#include <conio.h>

2.

#include <stdio.h>

3.

#include <iostream.h>

4.

#define max 100

5.

int c[max][max],f[max][max],d[max],p[max];

6.

int pathfound,n,m,s,t;

7.

void Nhapsolieu()

8.

9.

FILE *ftext;

10.

int u,v;

11.

clrscr();

12.

ftext=fopen("D:\\DOTHI\\FM.inp","rt");

13.

fscanf(ftext,"%d%d%d%d",&n,&m,&s,&t);

14.

for (int i=1;i<=m;i++)

15.

16.

fscanf(ftext,"%d",&u);

17.

fscanf(ftext,"%d",&v);

18.

fscanf(ftext,"%d",&c[u][v]);

19.

20.

fclose(ftext);
130

21.

22.

int min(int a,int b)

23.

24.

if (a< b) return a;

25.

return b;

26.

27.

void Find_path()

28.

29.

int nvt=1,u,vt[max];

30.

for (int i=1;i<=max;i++)

31.

{p[i]=0;d[i]=0;}

32.

p[s]=s;

33.

d[s]=max;

34.

vt[nvt]=s;

35.

pathfound=1;

36.

while (nvt!=0)

37.

38.

u=vt[nvt--];

39.

for (int v=1;v<=n;v++)

40.

if (p[v]==0)

41.

42.

if (c[u][v]>0 && f[u][v]<c[u][v])

43.

44.

p[v]=u;

45.

d[v]=min(d[u],c[u][v]-f[u][v]);

46.

vt[++nvt]=v;

47.

if (v==t) return;

48.

49.

if (c[v][u]>0 && f[v][u]>0)

50.

51.

p[v]=-u;

52.

d[v]=min(d[u],f[v][u]);
131

53.

vt[++nvt]=v;

54.

if (v==t) return;

55.

56.

57.

58.

pathfound=0;

59.

60.

void Inc_flow()

61.

62.

int v=p[t],u=t,tang=d[t];

63.

while (u!=s)

64.

65.

if (v>0) f[v][u]+=tang;

66.

else

67.

68.

v=-v;

69.

f[u][v]-=tang;

70.

71.

u=v;

72.

v=p[u];

73.

74.

75.

void Max_flow()

76.

{int stop=0;

77.

while (stop==0)

78.

79.

Find_path();

80.

if (pathfound==1) Inc_flow();

81.

else stop=1;

82.

83.

84.

void main()
132

85.

86.

Nhapsolieu();

87.

Max_flow();

88.

int valf=0;

89.

for (int u=1;u<=n;u++)

90.

if (c[s][u]>0)

91.

valf+=f[s][u];

92.

cout<<"Ma tran c va f ket qua(dinh dau, dinh cuoi,Tai nang, luong tren

canh):\n";
93.

for (u=1;u<=n;u++)

94.

for (int v=1;v<=n;v++)

95.

if (c[u][v]>0)

96.

cout<<u<<" "<<v<<" "<<c[u][v]<<" "<<f[u][v]<<endl;

97.

cout<<"Gia tri cuc dai cua luong trong mang la :"<<valf;

98.

getch();

99.

FM.INP
6916
126
139
231
244
253
357
567
468
543

133

Ti liu tham kho


[1] L Thuyt th
GS-TS Nguyn Cam TS Chu c Khnh
[2] Ton ri rac
PGS-TS Nguyn c Ngha TS Nguyn T Thnh
[3] L thuyt th v ng dng
PGS-TS ng Huy Run
[4]

K Thut lp trnh C

134

You might also like