You are on page 1of 4

BI TP C T HNH THC TUN 9

Cho trc cc c t kiu d liu sau:


VERTEX =
GRAPH ::
n:
A: **
Gii thch:
n:l s lng nh trong th
A l ma trn k, vi quy c:

A(i)(j) = 0 nu khng c cung t nh i n nh j


A(i)(j) 0 l trng s ca cung t nh i n nh j

TapDinh(g: GRAPH) r: VERTEX-set


pre
post r = {x ((x > 0) ^ (x <= g.n))}
Bi 81: c t hm kim tra th G c phi l th v hng hay khng.
LaDoThiVoHuong(g: GRAPH) r:B
pre
post ( i, j TapDinh(g) ((g.A(i)(j) 0) (g.A(j)(i) 0) = r
Bi 82: c t hm kim tra th G c cha cnh c trng s m hay khng
CoCanhTrongSoAm(g: GRAPH) r:B
pre
post ( i, j TapDinh(g) (g.A(i)(j) < 0)) = r
Bi 83: c t hm tnh bc ca mt nh v trong th G cho trc.
Degree (G: GRAPH, v: VERTEX) deg :
Degree(g: GRAPH, v: VERTEX) deg: N
pre (v TapDinh(g))
post (card {u TapDinh(g) ((g.A(v)(u) 0))} + card {t TapDinh(g) ((g.A(t)(v) 0))}) = deg
Bi 84: T c t kiu d liu PATH lu tr c mt ng i trn th. c t hm tnh di
mt ng i cho trc. Lu : ng i bao gm cc cung lin tip nhau (v phi tn trng hng
ca cung)

PATH::
G: GRAPH
P: VERTEX*
inv-PATH(p: PATH) r: B
pre (len p.P > 0)
post ( v inds (tl p.P) (p.G.A(p.P(v - 1))(p.P(v)) 0)) = r
Bi 85: c t hm kim tra c tn ti dy chuyn t nh u n nh v trong th G hay khng.
Lu :
- Cc cung trn dy chuyn KHNG cn tn trng hng
-

th G c th v hng hoc c hng

CoDuongDiVoHuong(g: GRAPH, u: VERTEX, v: VERTEX) r: B


pre (u, v TapDinh(g))
post (g.A(u)(v) 0 v g.A(v)(u) 0) = r
CoDayChuyen(g: GRAPH, u: VERTEX, v: VERTEX) r: B
pre (u, v TapDinh(g))
post ((CoDuongDiVoHuong(g, u, v)) v
(!CoDuongDiVoHuong(g, u, v) ^
( t TapDinh(g) (CoDayChuyen(g, u, t) ^ CoDayChuyen(g, t, v)))
)
)=r
Bi 86: c t hm kim tra mt th G c lin thng hay khng. Gi : Trong th lin thng,
lun tn ti dy chuyn ni lin hai nh phn bit bt k
LaDoThiLienThong(g: GRAPH) r: B
pre
post ( u, v TapDinh(g) (u != v) (CoDayChuyen(g, u, v))) = r
Bi 87: c t hm kim tra mt th G c phi l cy hay khng. Gi : cy l th lin thng c
ng n-1 cnh (vi n l s lng nh ca th)
SoCanh(g: GRAPH) r: N
pre
post (card { u, v TapDinh(g) (g.A(u)(v) 0)}) = r

// co huong

SoCanh(g: GRAPH) r: N
pre
post (card { u, v TapDinh(g) ((u > v) ^ (g.A(u)(v) 0))}) = r

LaCay(g: GRAPH) r: B
pre
post ((LaDoThiLienThong(g)) ^ SoCanh(g) = g.n - 1) = r

Bi 88: T c t kiu d liu SPANNING-TREE lu tr mt cy khung ca th. c t iu


kin hp l inv-SPANNING-TREE cho kiu d liu ny.

SPANNING-TREE
Parent: GRAPH
G: GRAPH
LaDoThiCon(sub: GRAPH, parent: GRAPH) r:B
pre
post ( u, v TapDinh(sub)
(
(u, v TapDinh(parent)) ^
((sub.A(u)(v) 0) (parent.A(u)(v) 0))
)
)
Inv-SPANNING-TREE(sp: SPANNING-TREE)
pre
post (LaCay(sp.G)) ^ (LaDoThiCon(sp.G, sp.Parent))
Bi 89: c t hm tnh trng s ca mt cy khung cho trc. c t hm xc nh cy khung nh
nht (c tng trng s nh nht) ca mt th v hng G cho trc. (khng x l khi th khng
lin thng)
TongMang(A: R*) r: N
pre
post ((r = 0) ^ (len A = 0)) v ((len A > 0) ^ (r = hd A + TongMang(tl A)))
TongMang2Chieu(A**: N) r: N
pre
post ((r = 0) ^ (len A = 0)) v ((len A > 0) ^ (r = TongMang(hd A) + TongTrongSo (tl A)))
TrongSo(sp: SPANNING-TREE) r:N
pre
post TongMang2Chieu(sp.G.A) / 2 = r
TapCayKhung (g: GRAPH) sp_set: SPANNING-TREE-set
pre
post sp_set = {sp: SPANNING-TREE (sp.Parent = g)}
min_of_set_spanningtree (sp_set: SPANNING-TREE-set) sp: SPANNING-TREE
pre
post ( s sp_set (TrongSo(sp) >= TrongSo(s)))
CayKhungNhoNhat(g: GRAPH) sp: SPANNING-TREE

pre
post sp = min_of_set_spanningtree(TapCayKhung(g))
Bi 90: c t hm kim tra mt th v hng G c tn ti ng i Euler hay khng? Gi :
th G c tn ti ng i Euler nu G c 0 hoc 2 nh bc l.

SoDinhBacLe(g: GRAPH) r: N
pre
post (card { u TapDinh(g) (Degree(g, u) mod 2 0)}) = r
CoDuongDiEuler(g: GRAPH) r: B
pre
post ((SoDinhBacLe(g) = 0) v (SoDinhBacLe(g) = 2)) = r

You might also like