ð th
(Graph)
Nguy n Phương Thái
B môn Khoa H c Máy Tính – Khoa CNTT
Trư ng ð i h c Cơng ngh - ðHQGHN
Email:
ð th (graph)
• G = (V, E)
– V: T p ñ nh
– E = { (u,v) | u, v ∈ V}: T p c nh
Ví d : Bi u di n b n ñ ñư ng ñi trong thành ph b ng ñ th G = (V, E)
– V: T p h p các ñi m trong thành ph
– E: T p h p các ñư ng ñi trong thành ph , m i ñư ng ñi n i hai ñi m
ð th có hư ng và khơng có hư ng
(directed and undirected graph)
G = (V, E) là đ th khơng có hư ng n u (u, v) ∈ E thì (v, u) ∈ E
ð th có tr ng s và khơng có tr ng s
(weighted and unweighted graph)
G = (V, E) là ñ th có tr ng s n u m i c nh (u, v) ∈ E ñư c gán m t
giá tr
ð th có chu trình và khơng chu trình
(cyclic and acyclic graph)
ð th khơng có nhãn và đ th có nhãn
(unlabled and labled graph)
Friend graph
B c c a ñ nh
(vertex degree)
Bi u di n ñ th
G = (V, E); V = {0, 1,…, n-1}
• Bi u di n b ng ma tr n li n k A
– A[u][v] = 1 n u có cung (u,v)
– A[u][v] = 0 n u khơng có cung (u,v)
0
1
2
3
4
0
0
1
1
0
0
1
0
0
1
0
1
2
0
0
0
1
1
3
1
0
0
0
0
4
0
0
0
1
0
Bi u di n ñ th
G = (V, E); V = {0, 1,…, n-1}
• Bi u di n b ng danh sách k
ði qua ñ th theo chi u r ng
(Breadth first search)
• ði qua t t c các đ nh c a ñ th , m i ñ nh ñúng m t l n
• B t đ u xu t phát t m t ñ nh s, l n lư t thăm các ñ nh li n k v i s. Ti p
t c q trình thăm các đ nh theo nguyên t c: ð nh nào ñư c thăm trư c
thì các đ nh li n k v i đ nh đó s đư c thăm trư c
• Xem ví d
/>
ði qua ñ th theo chi u r ng
(Breadth first search)
//ði qua ñ th theo b r ng xu t phát t v
BreadthFirstSearch (v) {
(1) Kh i t o hàng ñ i Q r ng;
(3) Xen v vào hàng ñ i Q;
(2) ðánh d u ñ nh v ñã ñư c thăm;
(4) while (hàng đ i Q khơng r ng) {
(5)
L y ñ nh w ñ u hàng ñ i Q;
(6)
for (m i ñ nh u k w)
(7)
if ( u chưa đư c thăm) {
(8)
Xen u vào đi hàng đ i Q;
(9)
ðánh d u u ñã ñư c thăm;
}
(10)
Lo i w ra kh i hàng ñ i Q
} // h t vòng l p while.
}
ði qua ñ th theo chi u r ng
(Breadth first search)
// ði qua ñ th G=(V, E) theo b r ng
BreadthFirstSearch_traversal (G) {
(10) for (m i v ∈V)
(11)
ðánh d u v chưa ñư c thăm;
(12) for (m i v ∈V)
(13)
if (v chưa ñư c thăm)
(14)
BreadthFirstSearch(v);
}
ði qua ñ th theo chi u sâu
(Depth first search)
//ði qua ñ th theo chi u sâu xu t phát t v
DepthFirstSearch (v) {
for (m i ñ nh u k v i v)
if (u chưa ñư c thăm) {
thăm u và ñánh d u u ñã ñư c thăm
DepthFirstSearch (u)
}
}
Xem ví d
/>
ði qua ñ th theo chi u sâu
(Depth first search)
// ði qua ñ th G=(V, E) theo chi u sâu
DepthFirstSearch_traversal (G) {
(10) for (m i v ∈V)
(11)
ðánh d u v chưa ñư c thăm;
(12) for (m i v ∈V)
(13)
if (v chưa ñư c thăm)
(14)
DepthFirstSearch(v);
}