Tải bản đầy đủ (.pdf) (63 trang)

Giáo án môn lý thuyết đồ thị

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (725.61 KB, 63 trang )

Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
1
v2
v1
v3
v4
....
e1
e2
e3
e4
€GIÁO ÁN
MÔN LÝ THUYẾT ĐỒ THN
Số tiết học: 60 tiết ( 45 tiết lý thuyết + 15 tiết thực hành)
Tài liệu tham khảo:

1) Toán rời rạc, PGS. TS Đỗ Đức Giáo, Nhà xuất bản Đại học Quốc gia Hà Nội 2002
2) Toán rời rạc, Nguyễn Đức Nghĩa, Nguyễn Tô Thành, Nhà xuất bản Đại học Quốc gia Hà Nội
2003
3) Giáo trình Lý thuyết đồ thị, Nguyễn Thanh Hùng, Nguyễn Đức Nghĩa
4) Toán học rời rạc ứng dụng trong tin học, Dịch từ Discrete Mathematics and Its Applications,
Nhà xuất bản khoa học kỹ thuật

Chương 1



CÁC KHÁI NIỆM CƠ BẢN CỦA LÝ THUYẾT ĐỒ THN
(9 tiết)

1.1 Giới thiệu
Lý thuyết đồ thị là nghành khoa học đã có từ lâu nhưng lại có rất nhiều ứng dụng hiện đại. Những
ý tưởng cơ sở ban đầu của nó được đưa ra từ những năm đầu thế kỷ 18 bởi nhà toán học người Thuỵ
Sỹ là Leonhard Euler.
Lý thuyết đồ thị được dùng để giải quyết các bài toán thuộc nhiều lĩnh vực khác nhau. Chẳng
hạn: Dùng mô hình đồ thị để xác định xem hai máy tính trong một mạng máy tính có trao đổi thông
tin được với nhau hay không?. Đồ thị với các trọng số được gắn cho các cạnh có thể dùng để giải
quyết bài toán tìm đường đi ngắn nhất giữa hai thành phố trong một mạng lưới giao thông. Chúng ta
cũng có thể phân biệt các hợp chất hoá học có cùng công thức phân tử nhưng có cấu trúc khác nhau
nhờ vào đồ thị...

1.2 Các định nghĩa và tính chất cơ bản
Định nghĩa 1:
Giả sử V là một tập khác rỗng các phần tử nào đó và
VxVE ⊆
(E là tập con của tích đề các
VxV). Bộ G = (V, E) được gọi là một đồ thị.
Mỗi phần tử
Vv ∈
được gọi là một đỉnh của đồ thị, V được gọi là tập các đỉnh của đồ thị.
Mỗi phần tử
Evue ∈= ),(
được gọi là một cạnh của đồ thị, E được gọi là tập các cạnh của đồ thị.
Ví dụ 1:

G = (V = {v1, v2, v3, v4,...}, E = {e1 = (v1,v2), e2 = (v1,v3), e3 = (v2,v3), e4 = (v3,v4),... })










Như vậy ta có thể hình dung đồ thị là một cấu trúc rời rạc gồm các đỉnh và các cạnh nối các đỉnh
này với nhau.
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
2
Thanh hoá
Nghệ an
Hà nội
TP.HCM
v1
v3 v2
Tây hồ
Hồ gươm CVThủ lệ
TTCPQG
Đồ thị có hướng
Đồ thị vô hướng
v1 v2 v3
e1 e2

e3
Chú ý:

Nếu tập V là tập hữu hạn các phần tử thì G = (V,E) được gọi là đồ thị hữu hạn. Từ đây về sau chủ
yếu ta nghiên cứu các đồ thị hữu hạn. (có thể coi đây là một định nghĩa về đồ thị)
Ví dụ 2:

G = (V={Thanh hoá, Nghệ an, Hà nội, TP.HCM},E={(Thanh hoá,Nghệ an),(Thanh hoá, Hà nội),
(Nghệ an, Hà nội), (Hà nội, TP.HCM) })












Định nghĩa 2:

a) Hai đỉnh được gọi là kề nhau nếu có cạnh nối hai đỉnh đó với nhau. Cạnh nối hai đỉnh được gọi
là cạnh liên thuộc.
b) Hai cạnh được gọi là kề nhau nếu giữa chúng có đỉnh chung.
c) Nếu e = (v,v) là một cạnh của đồ thị thì e được gọi là một khuyên. Trong trường hợp này đồ thị
được gọi là giả đồ thị.
Ví dụ 3:




v1 và v2 được gọi là hai đỉnh kề nhau, e1 được gọi là cạnh liên thuộc hai đỉnh v1 và v2.
e1 và e2 được gọi là hai cạnh kề nhau, e3 được gọi là một khuyên.
Định nghĩa 3:

a) Nếu mỗi cạnh
Evue ∈= ),(
là không phân biệt thứ tự của các đỉnh u và v, (tức là từ u tới v
không kể hướng) thì ta nói đồ thị G = (V,E) là đồ thị vô hướng.
b) Nếu mỗi cạnh
Evue ∈= ),(
có phân biệt thứ tự của các đỉnh u và v, (tức là từ u tới v khác với
từ v tới u) thì ta nói đồ thị G = (V,E) là đồ thị có hướng. Cạnh của đồ thị có hướng còn được gọi là
cung.
Ví dụ 4:









Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-

§HQG Hµ Néi
3
R5
R1
R3
R2
R1

Định nghĩa 4:

Đồ thị G =(V,E) được gọi là đơn đồ thị nếu giữa hai đỉnh bất kỳ của đồ thị được nối với nhau bởi
không quá một cạnh (cung).
Ví dụ 5:





Định nghĩa 5:

Đồ thị G = (V,E) được gọi là đa đồ thị nếu có ít nhất một cặp đỉnh được nối với nhau bởi hai cạnh
(hai cung) trở lên.

Ví dụ 6:



Định nghĩa 6:

Đồ thị G = (V,E) được gọi là đồ thị phẳng nếu nó có dạng biểu diễn hình học trên mặt phẳng mà

các cạnh (cung) chỉ cắt nhau ở đỉnh. Cách vẽ như vậy được gọi là biểu diễn phẳng
của đồ thị. Trong
trường hợp ngược lại đồ thị là không phẳng.
Ví dụ 7:









Biểu diễn phẳng của một đồ thị chia mặt phẳng thành các miền. Ví dụ biểu diễn phẳng của đồ thị
dưới đây chia mặt phẳng thành 5 miền.





Định nghĩa 7:

Đồ thị G = (V,E) được gọi là đồ thị đầy đủ nếu mỗi cặp đỉnh đều có cạnh (cung) nối giữa chúng.

Ví dụ 8:






Đồ thị phẳng
Đồ thị không phẳng
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
4
v1
v4
v5
v2
v3
v2
v1
v6
v3
v5
v4

Định nghĩa 8:

Cho đồ thị vô hướng G = (V,E). Với v

V là một đỉnh của đồ thị, ta kí hiệu deg(v) là số các cạnh
thuộc đỉnh v, riêng với khuyên thì đựơc tính là 2. deg(v) được gọi là bậc của đỉnh v.
Nếu deg(v) = 0 thì v được gọi là đỉnh cô lập, nếu deg(v) = 1 thì v được gọi là đỉnh treo.
Bậc của đồ thị vô hướng G = (V,E) được kí hiệu là deg(G) và được tính deg(G) =


∈Vv
v)deg(
Ví dụ 9:






Với đồ thị trên ta có:
deg(v5) = 0, v5 được gọi là đỉnh cô lập
deg(v4) = 1, v4 được gọi là đỉnh treo
deg(v3) = 4, deg(v2) = 3, deg(v1) = 2
Định nghĩa 9:
Cho đồ thị có hướng G = (V,E). Với v
V∈
là một đỉnh của đồ thị, ta ký hiệu deg
-
(v) là số các
cung vào của đỉnh v, deg
+
(v) là số các cung ra của đỉnh v. Khi đó deg
-
(v) được gọi là bậc vào của
đỉnh v, deg
+
(v) được gọi là bậc ra của đỉnh v và bậc của đỉnh v là deg(v) = deg
-
(v) + deg
+

(v).
Nếu deg
+
(v) = deg
-
(v) = 0 thì v được gọi là đỉnh cô lập, nếu deg
+
(v) = 0, deg
-
(v) = 1 hoặc deg
+
(v)
= 1, deg
-
(v) = 0 thì v được gọi là đỉnh treo.
Bậc của đồ thị có hướng G = (V,E) được kí hiệu là deg(G) và được tính deg(G) =
∑∑
∈∈
+−
+
VvVv
vv )(deg)(deg

Ví dụ 10:







Với đồ thị trên ta có:
deg
-
(v1) = 2, deg
+
(v1) = 5
deg
-
(v2) = 2, deg
+
(v2) = 1
deg
-
(v3) = 1, deg
+
(v3) = 0, đỉnh v3 được gọi là đỉnh treo
deg
-
(v4) = deg
+
(v4) = 0, đỉnh v4 được gọi là đỉnh cô lập
deg
-
(v5) = 3, deg
+
(v5) = 0
deg
-
(v6) = 1, deg
+

(v6) = 3
Định lý 1:
Giả sử G = (V,E) là đồ thị hữu hạn. Khi đó bậc của đồ thị G bằng hai lần số cạnh của đồ thị, tức
là deg(G) = 2|E|
Chứng minh:
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
5
e
d
c
b
a
Giả sử u,v

V và e = (u,v)

E
Nhận xét: Giả sử u

v. Khi đó nếu xoá cạnh (cung) e thì bậc của đồ thị sẽ giảm đi 2. Nếu ta xoá tất
cả các cạnh có dạng như trên thì đồ thị còn lại chỉ gồm các đỉnh cô lập hoặc các đỉnh có khuyên.
Tại mỗi đỉn u có khuyên, nếu ta xoá khuyên thì bậc của đồ thị cũng sẽ giảm đi 2. Như vậy nếu ta
xoá một cạnh hoặc một khuyên thì bậc của đồ thị giảm đi 2 và sau khi xoá hết tất cả các cạnh và các
khuyên của đồ thị thì bậc của đồ thị còn lại là bằng 0.
Từ nhận xét trên, hiên nhiên ta có đẳng thức deg(G) = 2|E| (đpcm)

Định lý 2:
Giả sử G = (V,E) là đồ thị hữu hạn. Khi đó số các đỉnh bậc lẽ của đồ thị là một số chẵn.
Chứng minh:
Giả sử V = {v
1
,v
2
,...v
n
} và trong n đỉnh có k đỉnh bậc lẻ là v
1
,v
2
,...,v
k
. Các đỉnh còn lại có bậc
chẵn là v
k+1
, v
k+2
,...v
n
I Ở đây ta có deg(v
i
) = 2m
i
+1 với i=1,2..,k và deg(v
j
) = 2m
j

với j=k+1, ...,n.
m
i
,m
j
là các số nguyên dương.
Theo định lý 1
ta có: deg(G) =
∑∑
+==
+
n
kj
j
k
i
i
vv
11
)deg()deg( = 2|V| = 2n
Do
∑∑∑
===
+=+=
k
i
k
i
ii
k

i
i
kmmv
111
2)12()deg(

∑∑∑
+=+=+=
==
n
kj
n
kj
n
kj
jjj
mmv
111
22)deg(

Suy ra deg(G) =
∑∑
+==
+
n
kj
j
k
i
i

vv
11
)deg()deg(
=
kmmmkm
n
kj
j
k
i
i
k
i
n
kj
ji
+








+=++
∑∑∑∑
+===+= 1111
222
=2n

Từ đó suy ra k là một số chẵn. (đpcm).

Ví dụ 11:
Có bao nhiêu cạnh trong một đồ thị có 10 đỉnh, mỗi đỉnh có bậc bằng 5?
Giải:
Vì bậc của đồ thị bằng 10.5 = 50, mà 2.e = 50 Suy ra e = 25
1.3 Đường và chu trình trong đồ thị
Định nghĩa 10:
Cho đồ thị G = (V,E). Một đường đi trong đồ thị là một dãy v
i1
e
i1
v
i2
e
i2
...v
ij
e
ij
...v
ik
e
ik
v
ik+1
, Trong
đó vij
V∈
là các đỉnh, eij


E là các cạnh sao cho với
k}{1,2,..,∈∀j thì đỉnh v
ij
và đỉnh v
ij+1
là hai
đỉnh kề nhau. Đường đi đó xuất phát từ đỉnh v
ij
và kết thúc tại đỉnh v
ik+1
(hoặc ngược lại).
Độ dài của đường bằng số các cạnh (hoặc cung) trong đường đi đó.
Chu trình trong đồ thị là một đường đi có đỉnh xuất phát và đỉnh kết thúc trùng nhau.
Ví dụ 12:





Trong đồ thị trên ta co:
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
6
c
a

d
b
c
a
d
b
v
i1
v
i2
v
i3
v
ij
v
ij+1

e
i1
e
i2
e
ij

a,b,e,d là một đường đi có độ dài 3
c,e,b,a,d là một đường đi có độ dài 4
a,d,c,a là một chu trình có độ dài 3
d,a,b,c,d là một chu trình có độ dài 4
a,b,d không phải là một đường đi
a,d,e,a không phải là một chu trình

Ví dụ 13:




Trong đồ thị trên ta có:
a,c,d là một đường đi có độ dài 2
c,d,a,b là một đường đi có độ dài 3
a,b,d,a là một chu trình có độ dài 3
a,c,d,b,d,a là một chu trình có độ dài 5
a,c,b không phải là một đường đi
a,b,c,a không phải là một chu trình
Định nghĩa 11:
Đường hay chu trình trong đồ thị được gọi là đơn nếu nó đi qua mỗi cạnh (cạnh của đường hay
chu trình) không quá một lần.
Đường hay chu trình trong đồ thị được gọi là sơ cấp nếu nó đi qua mỗi đỉnh đúng một lần.
Ví dụ 14:






Với đồ thị trên ta có:
a,b,c,d là một đường đi đơn trong đồ thị
d,a,b,c,d là một chu trình đơn trong đồ thị
a,b,c,d,a là một chu trình sơ cấp của đồ thị
a,b,c là một đường sơ cấp
Định lý 3:
Giả sử G = (V,E) là đồ thị vô hướng. Nếu trong đồ thị mà mỗi đỉnh v


V đều có bậc deg(v)

2
thì đồ thị có chu trình sơ cấp
Chứng minh:
Xét tất cả các đường sơ cấp có thể có trong đồ thị. Rõ ràng số các đường này là hữu hạn, vì vậy
trong số các đường sơ cấp đó sẽ tồn tại một đường có độ dài lớn nhất. Giả sử đó là đường w:
v
i1
e
i1
v
i2
e
i2
...v
ij
e
ij
v
ij+1
dạng hình học của nó là:




Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ



NguyÔn Minh §øc
-
§HQG Hµ Néi
7
v
i0


Theo giả thiết deg(v
ij
)

2 nên phải tồn tại ít nhất một đỉnh v
i0
và một cạnh nối đỉnh vi1 và vi0.
Đỉnh vi0 phải trùng với một đỉnh, chẳng hạn là đỉnh vij trong đường w, vì nếu không trùng thì
đường w không phải là đường sơ cấp dài nhất, điều này trái với giả thiết w là đường có độ dài lớn
nhất. Điều này chứng tỏ phải tồn tại một chu trình trong đồ thị đang xét. Vì các đường đang xét là
các đường sơ cấp, cho nên chu trình này là chu trình sơ cấp. Định lý đã được chứng minh.
1.4 Đồ thị con, đồ thị bộ phận và đồ thị liên thông
Định nghĩa 12:
Cho đồ thị G = (V,E)
a) Nếu trong đồ thị G ta bỏ đi một số đỉnh nào đó và các cạnh chứa các đỉnh đó thì phần còn lại
của đồ thị được gọi là đồ thị con của đồ thị G.
b) Nếu trong đồ thị G ta bỏ đi một số cạnh nào đó và giữ nguyên các đỉnh thì phần còn lại của đồ
thị được gọi là đồ thị bộ phận của đồ thị G.
Ví dụ 15:
Đồ thị G





Một số đồ thị con của đồ thị G







Mộ số đồ thị bộ phận của đồ thị G






Định nghĩa 13:
Cho đồ thị G = (V,E)
a) Hai đỉnh u,v

V được gọi là liên thông nếu tồn tại một đường đi nối hai đỉnh u,v với nhau.
b) Đồ thị G được gọi là liên thông nếu với hai đỉnh phân biệt bất kỳ trong đồ thị đều là liên thông.
Ví dụ 16:
Các đồ thị liên thông






Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
8
I
G
H

Các đồ thị không liên thông






Định nghĩa 14:
Cho đồ thị có hướng G = (V,E)
a) Đồ thị G được gọi là liên thông mạnh nếu luôn tìm được đường đi giữa hai đỉnh bất kỳ của nó.
b) Đồ thị G được gọi là liên thông yếu nếu đồ thị vô hướng tương ứng với nó là đồ thị liên
thônng.
Ví dụ 17:
Đồ thị liên thông mạnh




Đồ thị liên thông yếu






Định nghĩa 15:
Cho đồ thị G = (V,E), H = (W,F) là đồ thị con của G.
Nếu H là đồ thị liên thông thì H được gọi là thành phần liên thông của G.
Ví dụ 18:







Trong ví dụ này H, I là các thành phần liên thông của G
Định lý 4:
Đồ thị G = (V,E) là liên thông khi và chỉ khi nó có một thành phần liên thông.
Chứng minh:
Điều khẳng định được trực tiếp suy ra từ các định nghĩa.
Định lý 5: (Công thức Euler)
Cho G = (V,E) là một đơn đồ thị phẳng liên thông với e cạnh và v đỉnh. Gọi r là số miền trong
biểu diễn phẳng của G. Khi đó r = e – v +2.
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi

9
R1
a
n+1

b
n+1

a
n+1

b
n+1

R
Chứng minh:
Trước tiên ta xác định biểu diễn phẳng của G. Ta sẽ chứng minh định lý bằng cách xây dựng một
dãy các đồ thị con G1, G2, ..,Ge = G, ở mỗi bước ghép thêm một cạnh vào đồ thị ở bước trước. Để
làm điều này ta sử dụng định nghĩa đệ quy say: Lấy tuỳ ý một cạnh của G để nhận được G
1
.
Để nhận được G
n
từ G
n-1
ta thêm tuỳ ý một cạnh liên thuộc với một cạnh của G
n-1
và thêm một đỉnh
khác liên thuộc với cạnh mới đó nếu đỉnh đó chưa có trong G
n-1

, điều này làm được vì G là liên
thông. G sẽ nhận được sau khi e cạnh được ghép thêm vào các đồ thị tạo ra trước. Gọi r
n
, e
n
, và v
n

tương ứng là số miền, số cạnh, số đỉnh của biểu diễn phẳng của G
n
sinh ra. Ta sẽ chứng minh bằng
quy nạp biểu thức r = e – v +2
Với G
1
thì biểu thức r
1
= e
1
– v
1
+ 2 là đúng, vì r1 = 1, e1 = 1, v1 = 2, điều này được thể hiện như
hình sau:

Giả sử ta có r
n
= e
n
– v
n
+ 2.

Gọi (a
n+1
, b
n+1
) là cạnh gộp vào G
n
để được G
n+1
. Khi đó có hai khả năng xảy ra.
Trường hợp thứ nhất hai đỉnh a
n+1
, b
n+1
đã thuộc G
n
. Khi đó nó phải ở trên biên của miền chung
R nếu không thì không thể gộp cạnh (a
n+1
,b
n+1
) vào G
n
mà không có các cạnh cắt nhau (G
n+1

phẳng). Cạnh mới này sẽ chia miền R thành hai miền con. Do đó r
n+1
=r
n
+1, e

n+1
= e
n+1
, v
n+1
= vn.
Do vậy ta có công thức r
n+1
= e
n+1
– v
n+1
+2. Trường hợp này được minh hoạ như sau:







Trường hợp thứ hai, một trong hai đỉnh của cạnh chưa thuộc G
n
. Ta giả sử a
n+1
thuộc G
n
còn b
n+1

không thuộc. Trong trường hợp này cạnh thêm (a

n+1
, b
n+1
) không sinh ra miền mới nào vì b
n+1
phải
nằm trong miền có a
n+1
và ở trên biên của nó (G
n+1
phẳng). Do đó r
n+1
= rn. Nhưng e
n+1
= e
n
+1 và
v
n+1
= v
n
+1. Mỗi vế của công thức không đổi nên công thức vẫn đúng, hay r
n+1
=e
n+1
– v
n+1
+2.
Trường hợp này được minh hoạ như sau:







Vậy với mọi n ta đều có r
n
= e
n
– v
n
+2. Vì đồ thị gốc là G
e
nhận được sau khi thêm e cạnh, định lý
được chứng minh.
Ví dụ 19:
Cho đơn đồ thị G phẳng liên thông có 20 đỉnh, mỗi đỉnh đều có bậc là 3. Hỏi biểu diễn phẳng của
đồ thị này chia mặt phẳng thành bao nhiêu miền?
Giải:
Ta có v = 20, deg(G) = v.3 = 20.3 = 60 = 2.e Suy ra e = 30.
Áp dụng công thức Euler : r = e – v +2 = 12. Vậy mặt phẳng bị chia thành 12 miền.


G1
R
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-

§HQG Hµ Néi
10
a b c
d e f
v1 v2
v3
v4
v5
Bài tập chương 1
Bài 1:

Hãy gọi tên (Đồ thị đơn, đa, đầy đủ,...) các đồ thị cho dưới đấy


























Bài 2:
Vẽ đồ thị vô hướng và đồ thị có hướng cho bởi G = (V,E)
V = {A, B, C, D, E, G, H}
G = {(A,B), (B,C), (A,C), (G,H), (H,E), (E,A), (D,A)}

Bài 3:
Hãy tìm số đỉnh, số cạnh, bậc của mỗi đỉnh trong các đồ thị vô hướng cho dưới đây. Xác
định các đỉnh cô lập và đỉnh treo. Xác định bậc của đồ thị và kiểm tra xem nó có bằng hai lần số
cạnh không?









Bài 4:
G1 G2 G3
G4 G5 G6
G7
G8

G1 G2
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
11
a b c
d e f
v3
v2
v1
e a
d
c
b
v2 v1
e4 e3 e2 e1
Hãy tìm số đỉnh, số cạnh, bậc ra, bậc vào và bậc của mỗi đỉnh trong các đồ thị vô hướng cho
dưới đây. Xác định các đỉnh cô lập và đỉnh treo. Xác định bậc của đồ thị và kiểm tra xem nó có bằng
hai lần số cạnh không?












Bài 5:
Có tồn tại đồ thị đơn có 10 đỉnh, mỗi đỉnh có bậc bằng 5 không?
Bài 6:
Trong một cuộc liện hoan mọi người bắt tay nhau. Hãy chỉ ra rằng tổng số lượt người được
bắt tay được bắt tay là một số chẵn.(Giả sử rằng không ai tự bắt tay mình)
Bài 7:
Liệt kê tất cả các đồ thị con của đồ thị sau











Bài 8:
Cho đơn đồ thị phẳng liên thông G với 5 đỉnh và 9 cạnh. Hỏi đồ thị này chia mặt phẳng
thành bao nhiêu miền?.

Bài 9:

Có bao nhiêu cạnh trong một đồ thị có 6 đỉnh mà hai đỉnh có bậc 4, hai đỉnh có bậc 6, hai
đỉnh có bậc 8 ?.



Bài 10:
Chỉ ra môt vài đường đơn và chu trình đơn có thể có trong đồ thị sau:






G1
G2
G
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
12
v3
v4
v5
e6
e5
v1
v2
v3
v4
e6 e5
e1

e2
e3 e4
a
b
d
c
e



Bài 11:
Chỉ ra tất cả các đường sơ cấp và chu trình sơ cấp có thể có của đồ thị sau









Bài 12:
Mỗi danh sách các đỉnh sau đây có tạo nên đường đi trong đồ thị đã cho hay không? Đường đi
nào là đơn? Đường đi nào là chu trình? Độ dài của các đường đi này là bao nhiêu?
a)

a, b, e, c, b
b)

a, d, b, e, a

c)

a, d, a, d, a
d)

a, b, e, c, b, d, a




Bài 13:
Trong các đồ thị cho dưới đây, đồ thị nào liên thông, đồ thị nào không liên thông?























G1 G2 G3
G4 G5
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
13
v1
v2
v4
v3
v3
v2
v1

Chương 2

CÁC PH ƯƠNG PHÁP BIỂU DIỄN ĐỒ THN
(6 tiết)

2.1 Biểu diễn bằng hình học
Cho đồ thị G = (V, E), khi đó ta có thể biểu diễn G bằng phương pháp hình học như sau:
Mỗi v


V ta đặt tương ứng với một điểm trong mặt phẳng, điểm đó gọi là đỉnh của đồ thị.
a) Trường hợp G là đồ thị vô hướng, nếu e = (u,v)

V thì trong mặt phẳng, các đỉnh u, v được
nối với nhau bởi một cạnh không có hướng. Nếu e = (u,u)

V thì tại đỉnh u sẽ có một khuyên.
b) Trường hợp G là đồ thị có hướng, Nếu e = (u,v)

V thì trong mặt phẳng sẽ có một cung có
hướng đi từ u đến v. Nếu u = v thì tại đỉnh u sẽ có một khuyên có hướng vào chính nó.
Ví dụ 1:
Đồ thị vô hướng G = ({v
1
, v
2
, v
3
, v
4
}, {(v
1
,v
2
), (v
2
,v
3
), (v
2

,v
4
), (v
3
,v
4
), (v
4
,v
4
)}) được biểu diễn
hình học như sau:







Đồ thị có hướng G = ({v
1
, v
2
, v
3
}, {(v
1
,v
1
), (v

1
,v
2
), (v
2
,v
3
), (v
3
,v
1
), (v
3
, v
2
)}) được biểu diễn hình
học như sau:







Biểu diễn đồ thị bằng hình học là một cách biểu diễn đơn giản, trực quan nhưng không có nhiều ý
nghĩa trong việc xử lý bằng máy tính.
2.2 Biểu diễn bằng ma trận kề (liền kề), ma trận trọng số
Xét đơn đồ thị vô hướng G = (V,E), với tập đỉnh V = {v
1
, v

2
, ..,v
n
}, tập cạnh E = {e
1
, e
2
, .., e
m
}.
Ta gọi ma trận kề của đồ thị G là ma trận:
A = {a
ij
: i,j = 1,2,...,n}
với các phần tử aij được xác định theo quy tắc sau:
a
ij
= 1 nếu (v
i
,v
j
)

E
a
ij
= 0 nếu (v
i
,v
j

)

E , i,j = 1, 2, .., n
Ví dụ 2:
Cho đồ thị vô hướng G = ({v
1
, v
2
, v
3
},{(v
1
,v
1
), (v
1
,v
2
), (v
1
,v
3
), (v
2
,v
3
)})
Ma trận kề của G là
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ



NguyÔn Minh §øc
-
§HQG Hµ Néi
14
2
1
4 3 5
1
3
2

V1 v2 v3
v1
1 1 1
v2
1 0 1
v3
1 1 0

Ví dụ 3:
Cho đồ thị vô hướng G như sau:






Ma trận kề của G là



1 2 3 4 5
1
0 1 0 1 0
2
1 0 1 0 1
3
0 1 0 1 0
4
1 0 1 0 1
5
0 1 0 1 0

Chú ý:
Ma trận kề của một đồ thị tuỳ thuộc vào thứ tự liệt kê các đỉnh. Do vậy có tới n! ma trận kề khác
nhau của một đồ thị n đỉnh vì có n! cách sắp xếp n đỉnh.
Các tính chất của ma trận kề của đồ thị đơn vô hướng:
a) Ma trận kề của đơn đồ thị vô hướng n đỉnh là một ma trân vuông đối xứng cấp nxn.
b) Tổng các phần tử trên hàng i (cột j) của ma trận kề chính bằng bậc của đỉnh i (đỉnh j).
c) Nếu kí hiệu
njia
p
ij
,..,2,1,, =
là các phần tử của ma trận tích
321
p
p
AAAA ....
=


Khi đó
njia
p
ij
,..,2,1,, =
cho ta số đường đi khác nhau từ đỉnh i đến đỉnh j qua p-1 đỉnh trung
gian.

Ma trận kề của đồ thị đơn có hướng cũng được định nghĩa tương tự, nhưng lưu ý ma trận này là
không đối xứng.
Ví dụ 4:
Cho đơn đồ thị có hướng G




Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
15
4
1
2
3
4
5

v4
v3
v2
v1

Ma trận kề của G là

1 2 3 4
1
0 1 1 0
2
0 0 0 1
3
0 1 0 0
4
1 0 0 0

Trên đây ta chỉ mới xét các đơn đồ thị, đối với đa đồ thị thì ma trận kề cũng được xây dựng hoàn
toàn tương tự, chỉ khác là thay vì ghi 1 vào vị trí a
ij
nếu (v
i
,v
j
) là cạnh (cung) của đồ thị, ta sẽ ghi k
là số cạnh (cung) nối hai đỉnh v
i
và v
j
.

Ví dụ 5:
Cho đa đồ thị vô hướng G như sau:







Ma trận kề của G là

1 2 3 4 5
1
0 1 1 3 1
2
1 0 1 1 1
3
1 1 1 0 2
4
3 1 0 0 0
5
1 1 2 0 0

Ví dụ 6:
Cho đa đồ thi có hướng G như sau:













Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
16
v1
8
v5
6
10
3
v4
v3
7
5
v2

Ma trận kề của G là


V1 v2 v3 v4

v1
0 0 0 0
v2
1 0 2 1
v3
1 1 0 0
v4
1 1 0 0

Trong rất nhiều ứng dụng của lý thuyết đồ thị, mỗi cạnh e = (u,v) của đồ thị được gắn một con số
c nào đó (c(e), c(u,v)) gọi là trọng số của cạnh e. Đồ thị có các cạnh được gán trọng số gọi là đồ thị
có trọng số. Trong trường hợp đồ thị có trọng số, để biểu diễn đồ thị thay vì dùng ma trận kề ta dùng
ma trận trọng số như sau:
C = c
ij
, i,j=1, 2, .., n
Với
cij = c(eij)) nếu eij

E
cij =
θ
nếu eij

E , i = 1,2,..,n; j = 1,2,..,n
Trong đó số
θ
tuỳ từng trường hợp cụ thể, có thể được đặt bằng một trong các giá trị sau: 0, -

,

+

.
Ví dụ 7:
Cho đồ thị vô hướng có trọng số G như sau












Ma trận trọng số của G là

v1 v2 v3 v4 v5
v1
0 0 0 10 8
v2
0 0 7 0 5
v3
0 7 0 3 0
v4
10 0 3 0 6
v5
8 5 0 6 0


Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
17
b c
d
e
3
7
7
5
4 9
4
a
v2
v3
e1
v4
e2
v5
e4
e3
e5
e6
v1


Ví dụ 8:
Cho đồ thị có hướng có trọng số G như sau:








Ma trận trọng số của G là

a B c d e
a
0 0 0 0 5
b
4 0 7 0 4
c
0 0 0 3 0
d
0 0 0 0 7
e
0 0 9 0 0

Ưu điểm lớn nhất của phương pháp biểu diễn đồ thị bằng ma trận kề (hoặc ma trận trọng số) là để
trả lời câu hỏi: Hai đỉnh u, v có kề nhau trên đồ thị hay không, chúng ta chỉ phải thực hiện một phép
so sánh. Nhược điểm lớn nhất của phương pháp này là: Không phụ thuộc vào số cạnh của đồ thị, ta
luôn phải sử dụng n
2
đơn vị bộ nhớ để lưu trữ ma trận kề của nó.

2.3 Biểu diễn bằng ma trận liên thuộc đỉnh - cạnh
Giả sử G = (V,E) là một đồ thị vô hướng với tập đỉnh V = {v
1
,v
2
,.., v
n
}, và tập các cạnh E =
{e
1
,e
2
,..,e
m
}. Khi đó ma trận liên thuộc đỉnh - cạnh A = aij, i = 1,2,..n, j = 1,2,...m của nó được xác
định như sau:
A
ij
= 1 nếu cạnh e
j
nối với đỉnh v
i

A
ij
= 0 nếu cạnh e
j
không nối với đinh v
i
, i = 1,2,..,n, j = 1,2,..,m

Ví dụ 9:
Cho đồ thị G như sau











Khi đó ma trận liên thuộc đỉnh - cạnh của G như sau
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
18
e4
v2
v3
v4
e1
v5
e2
e3
e5

e8
e7 e6
v1

e1 e2 e3 e4 e5 e6
v1
1 1 0 0 0 0
v2
0 0 1 1 0 1
v3
0 0 0 0 1 1
v4
1 0 1 0 0 0
v5
0 1 0 1 1 0

Ma trận liên thuộc cũng có thể được dùng để biểu diễn đồ thị có cạnh bội và khuyên
Ví dụ 10:
Cho đồ thị G như sau








Khi đó ma trận liên thuộc đỉnh cạnh của G là









Ma trận liên thuôc đỉnh - cạnh
còn rất hay được sử dụng trong
các bài toán liên quan đến đồ thị
có hướng mà trong đó phải xử lý các cung của đồ thị.
Cho G = (V,E) , V = {v
1
,v
2
,..,v
n
}, E = {e
1
,e
2
,..,e
m
}, là đồ thị có hướng. Khi đó ma trận liên thuộc
đỉnh - cạnh A = aij , i = 1,2,..,n; j = 1,2,..., m của G được xác định như sau:

a
ij
= 1 nếu đỉnh vi là đỉnh đầu của cung ej
a
ij

=-1 nếu đỉnh vi là đỉnh cuối của cung ej
a
ij
= 0 nếu đỉnh vi không là đầu mút của cung ej



e1 e2 e3 e4 e5 e6 e7 e8
v1
1 1 1 0 0 0 0 0
v2
0 1 1 1 0 1 1 0
v3
0 0 0 1 1 0 0 0
v4
0 0 0 0 0 0 1 1
v5
0 0 0 0 1 1 0 0
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
19
6
5
4
3
2

1
3
2
4
5
6
1
Ví dụ 11:
Cho ma trận G như sau






Ma trận liên thuộc cạnh - đỉnh của G như sau

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

2.4 Biểu diễn bằng danh sách cạnh (cung)
Xét đồ thị G = (V,E), với |V| = n, |E| = m. Để biểu diễn đồ thị theo phương pháp danh sách cạnh
(cung) chúng ta sẽ lưu trữ danh sách tất cả các cạnh (cung) của đồ thị vô hướng (có hướng). Mỗi
cạnh (cung) e = (u,v) của đồ thị sẽ tương ứng với hai biến Dau[e] và Cuoi[e]. Như vậy để lưu trữ đồ
thị ta cần sử dụng 2m đơn vị ô nhớ. Trong trường hợp đồ thị có trọng số ta phải cần thêm m đơn vị ô
nhớ nữa để lưu trữ trọng số của các cạnh.
Ví dụ 12:
Cho đồ thị vô hướng G như sau






Danh sách cạnh của G như sau

Dau Cuoi
1 2
1 3
2 3
2 5
3 4
4 5
4 6
5 6
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-

§HQG Hµ Néi
20
v1
v3
v2
v3
v2
v4
v5
v1
Ví dụ 13:
Cho đồ thị có hướng G như sau




Khi đó danh sách cạnh của G là
Dau Cuoi
v1 v2
v1 v3
v2 v3
v3 v2

2.5 Biểu diễn bằng danh sách kề
Trong rất nhiều vấn đề ứng dụng của lý thuyết đồ thị, cách biểu diễn đồ thị dưới dạng danh sách
kề là cách biểu diễn thích hợp được sử dụng. Trong cách biểu diễn này, với mỗi đỉnh v của đồ thị
chúng ta lưu trữ danh sách các đỉnh kề với nó. Để làm được điều này chúng ta có thể sử dụng cấu
trúc mảng các mảng (mảng hai chiều) hoặc mảng các danh sách liên kết.
Ví dụ 1:
Cho đồ thị vô hướng G như sau







Khi đó, danh sách kề lưu trữ dưới dạng mảng như sau
v1
v2 v4 v5
v2
v1 v3 v4
v3
v2 v4 v5
v4
v1 v2 v3 v5
v5
v1 v3 v4
Danh sách kề lưu trữ dưới dạng danh sách liên kết như sau:

v1
v2 v4 v5 nill
v2
v1 v3 v4 nill
v3
v2 v4 v5 nill
v4
v1 v2 v3 v5 nill
v5
v1 v3 v4 nill


Chúng ta có rất nhiều phương pháp khác nhau để biểu diễn đồ thị, mỗi phương pháp đều có
những ưu và nhược điểm riêng của nó. Vì vậy việc lựa chọn phương pháp biểu diễn đồ thị sao cho
việc xử lý nó có hiệu quả nhất phải tuỳ thuộc vào từng bài toán và giải thuật cụ thể.
Cài đặt thuật toán:
(nhập và hiển thị DS kề của một đồ thị biểu diễn bằng danh sách lien kết:
//----------------------------------------------------------------------------
// Chuong trinh nhap va in ra danh sach ke.
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
21
//----------------------------------------------------------------------------
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

#define VMAX 100 //So dinh toi da cho mot do thi

typedef struct pp //Cau truc tu tro
{
int v;
struct pp *next;
}Link;

Link *Ke[VMAX]; //Danh sach ke cua do thi
int n;
char ch; //So dinh cua do thi

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

{
p->next = (Link*)malloc(sizeof(Link));
p=p->next;
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ


NguyÔn Minh §øc
-
§HQG Hµ Néi
22
}
p->v=v;
p->next = NULL;
}
Ke[i]->next = pd;
}
}
//--------------------------------------------------------------------------
// Ham hien thi danh sach ke cua do thi co n dinh
//--------------------------------------------------------------------------
void in_dsk(Link *Ke[], int n)
{
int i;
Link *pd;
printf("\nDanh sach ke cua cac dinh cua do thi:\n");
printf("\n ------------------\n");
for(i=1;i<=n;i++)
{
printf("\n Danh sach cac dinh ke cua dinh %d:",Ke[i]->v);
pd = Ke[i]->next;

while(pd!=NULL)
{
printf("%5d",pd->v);
pd=pd->next;
}
}
}
// Ham in tieu de cua chuong trinh
//--------------------------------------------------------------------------
void tieu_de()
{
printf("\n CHUONG TRINH CAI DAT CAC THUAT TOAN TIM KIEM TREN DO THI");
printf("\n --------------***--------------\n\n");
}
//--------------------------------------------------------------------------
// Ham hien thi Menu chon chuc nang cua chuong trinh
//--------------------------------------------------------------------------
char menu()
{
printf("\n Menu chon chu nang");
printf("\n ---***---\n");
printf("\n\n 1. Nhap do thi cho boi danh sach ke");
printf("\n\n 2. Hien thi danh sach ke cua do thi");
printf("\n\n 5. Ket thuc chuong trinh");
printf("\n\n ----------------------------------------");
printf("\n\n Ban chon:"); ch=getche();
return ch;
}
//--------------------------------------------------------------------------
Gi¸o ¸n m«n: Lý ThuyÕt §å ThÞ



NguyÔn Minh §øc
-
§HQG Hµ Néi
23
// Chuong trinh chinh
//--------------------------------------------------------------------------
void main()
{
int kt=0,i;
char ch;
do
{
clrscr();
tieu_de();
ch = menu();
switch(ch)
{
case '1': //Nhap danh sach ke cua do thi
clrscr();
tieu_de(); kt=1;
printf("\n\n1.Nhap danh sach ke cua do thi");
printf("\n------------------------------\n\n");
printf("\n\nSo dinh cua do thi n ="); scanf("%d",&n);
nhap_dsk(Ke,n);
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
break;

case '2': //Hien thi danh sach ke cua do thi
clrscr();
tieu_de();
printf("\n\n2.In danh sach ke cua do thi");
printf("\n----------------------------\n\n");
if(kt)
in_dsk(Ke,n);
else
printf("\nDo thi chua duoc nhap vao!");
printf("\n\n\n\n--------------------------------");
printf("\nGo mot phim bat ky de tro ve menu chon chuc nang!");
getch();
break;
case '5': //Ket thuc chuong trinh
printf("\n\nXin cam on ban da su dung chuong trinh!");
getch();
break;
}
}while(ch!='5');
}





Giáo án môn: Lý Thuyết Đồ Thị


Nguyễn Minh Đức
-

ĐHQG Hà Nội
24
Chng 3



CC THUT TON TèM KIM TRấN THN V NG DNG


Trong lý thuyt th, cú rt nhiu thut toỏn c xõy dng da trờn c s duyt qua tt c cỏc
nh ca th sao cho mi nh ch c duyt ỳng mt ln. Do vy, vic xõy dng cỏc thut toỏn
cho phộp duyt qua tt c cỏc nh ca th mt cỏch cú h thng l mt vn quan trng thu hỳt
s quan tõm nghiờn cu ca nhiu nh khoa hc. Cỏc thut toỏn nh vy c gi chung l thut
toỏn tỡm kim trờn th.
Trong chng ny chỳng ta s nghiờn cu hai thut toỏn tỡm kim c bn trờn th l Thut
toỏn tỡm kim theo chiu sõu (Depth First Search) v Thut toỏn tỡm kim theo chiu rng (Breadth
First Search) v mt vi ng dng ca hai thut toỏn ny.
n gin cho vic trỡnh by, chỳng ta s xột th vụ hng G = (V,E), |V| = n, |E| = m;
th cú hng s c suy ra mt cỏch tng t vi mt vi im c bit cn chỳ ý.
ỏnh giỏ hiu qu ca cỏc thut toỏn ny, chỳng ta ch chỳ trng n vic ỏnh giỏ phc
tp tớnh toỏn ca thut toỏn, tc s phộp toỏn m thut toỏn cn thc hin trờn mi b d liu vo
trong trng hp xu nht. phc tp tớnh toỏn ny c biu din bng mt hm s ca kớch
thc d liu u vo. C th õy kớch thc ca d liu vo s l s nh n v s cnh m ca
th. Khi ú phc tp tớnh toỏn ca thut toỏn s c biu din bng hm hai bin f(n,m) l s
phộp toỏn nhiu nht m thut toỏn cn phi thc hin i vi mi th n nh, m cnh.
so sỏnh tc tng ca hai hm nhn giỏ tr khụng õm
f(n)
v
g(n)
chỳng ta s dng ký hiu

f(n) = O(g(n))
. iu ny cú ngha tng ng vi vic tỡm c cỏc hng s dng C v N sao
cho:
NnnCgnf

);()(

Trng hp m rng, nu
f(n
1
,n
2
,..,n
k
)
v
g(n
1
,n
2
,..,n
k
)
l cỏc hm biu din, ta vit:
f(n
1
,n
2
,..,n
k

)=O(g(n
1
,n
2
,..,n
k
))


Tỡm c cỏc hng s dng C v N sao cho:
f(n
1
,n
2
,..,n
k
)

Cg(n
1
,n
2
,..,n
k
)
vi
Nn


Nu phc tp tớnh toỏn ca thut toỏn l

O(g(n))
thỡ ta núi l thut toỏn cú thi gian tớnh toỏn
c
O(g(n)).

3.1 Thut toỏn tỡm kim theo chiu sõu trờn th (Depth First Search)
í tng chớnh ca thut toỏn tỡm kim theo chiu sõu cú th c hiu nh sau:
Ban u tt c cỏc nh ca th u cha c duyt n, ta s bt u vic tỡm kim t mt nh
no ú, gi s nh ú l v
1
. Sau ú chn u l mt nh (cú th chn tu ý) trong danh sỏch cỏc nh
k vi nh v
1
m cha c xột n v lp li quỏ trỡnh tỡm kim i vi nh u ny. bc tng
quỏt, gi s ang xột nh v
k
, nu trong cỏc nh k vi nh v
k
ta tỡm c nh w l nh cha
c duyt n thỡ ta s li bt u quỏ trỡnh tỡm kim t ú v w s tr thnh nh ó c duyt
qua. Nu khụng cũn nh no k vi nh v
k
l cha c duyt n thỡ ta núi rng nh ny ó c
duyt xong v quay li tip tc tỡm kim t nh m trc ú ta n c nh v
k
. Quỏ trỡnh c tip
tc nh vy cho n khi tt c cỏc nh ca th ó c duyt ht. Nh vy ta cú th hiu mt
cỏch n gin l vic tỡm kim theo chiu sõu trờn th bt u t nh v c thc hin trờn c s
tỡm kim theo chiu sõu t cỏc nh cha c duyt k vi v.
Quỏ trỡnh ny c mụ t bng th tc quy sau:



Procedure

DFS(v)

Giáo án môn: Lý Thuyết Đồ Thị


Nguyễn Minh Đức
-
ĐHQG Hà Nội
25
1
4
5
2
3
7
8
6
10
9
(* Tỡm kim theo chiu sõu trờn th bt u t nh v *)
(* Cỏc bin Chuaxet v Ke l bin ton cuc *)

Begin
Xet_dinh(v);
Chuaxet[v]:=False;
For u


Ke(v) do
If Chuaxet[u] Then
DFS(u);

End;
(* Chng trỡnh chớnh thc hin th tc *)

BEGIN
(* Khi to bin ton cc Chuaxet *)
For v

V do
Chuaxet[v]:=True;
(* Duyt th *)
For v

V do
If Chuaxet[v] Then
DFS(v);

END.
Nh vy, vi thut toỏn trờn õy rừ rng mi lnh gi DFS(v) s thc hin duyt qua tt c cỏc
nh cựng thnh phn liờn thụng vi nh v, bi vỡ sau mi khi xột nh v l lnh gi n th tc
DFS i vi cỏc nh k vi v. Mt khỏc, do mi khi thm nh v xong, bin Chuaxet[v] c gỏn
giỏ tr False nờn mi nh s c thm ỳng mt ln. Thut toỏn ln lt s tin hnh tỡm kim t
cỏc nh cha c xột n, vỡ vy nú s duyt c qua tt c cỏc nh ca th. (K c th
khụng liờn thụng).
D phc tp tớnh toỏn ca thut toỏn c ỏnh giỏ nh sau:
Trc ht ta thõy rng s phộp toỏn cn thc hin trong hai chu trỡnh ca thut toỏn (Hai vũng

For chng trỡnh chinh) cú c l n. Cũn th tc DFS phi thc hin khụng quỏ m ln. Do ú tng
s phộp toỏn cn thc hin trong cỏc th tc ny cú c l n+m. Vy phc tp tớnh toỏn ca thut
toỏn l O(n+m).
Vớ d 1:
Xột th vụ hng cho bi hỡnh di õy (Hỡnh 3.1)









Gi s danh sỏch k ca th c lu nh sau:

1:
2 3 4
2:
1 3
3:
1 2 5 8
4:
1 9 10
Hỡnh 3.1

×