Tải bản đầy đủ (.doc) (59 trang)

Những vấn đề cơ bản và một số thuật toán trên đồ 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 (414.56 KB, 59 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2
KHOA TOÁN
*************

NGUYỄN THÚY LINH

NHỮNG VẤN ĐỀ CƠ BẢN VÀ
MỘT SỐ THUẬT TOÁN
TRÊN ĐỒ THỊ

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC
Chuyên ngành Ứng
dụng

Người hướng dẫn khoa học
TS. TRẦN MINH TƯỚC

HÀ NỘI – 2014


LỜI CẢM ƠN
Trong quá trình thực hiện khoá luận em đã nhận được nhiều sự giúp
đỡ quý báu và bổ ích từ các thầy cô và bạn bè. Em xin chân thành cảm
ơn các thầy cô trong khoa Toán trường Đại học Sư phạm Hà Nội 2 đã
tận tâm giảng dạy, truyền thụ kiến thức và kinh nghiệm quý báu để em
hoàn thành tốt khoá học. Đặc biệt, em xin bày tỏ lòng cảm ơn sâu
sắc của mình tới thầy Trần Minh Tước, thầy đã trực tiếp hướng dẫn,
nhiệt tình giúp đỡ và chỉ bảo em trong suốt quá trình thực hiện khoá
luận.
Em xin chân thành cảm ơn các thầy cô trong tổ toán Ứng dụng –
khoa Toán, thư viện nhà trường, gia đình và bạn bè đã tạo mọi điều kiện,


động viên, giúp đỡ để em hoàn thành khoá luận này.
Xuân Hòa, ngày 06 tháng 5 năm 2014
Sinh viên
Nguyễn Thúy Linh


LỜI CAM ĐOAN
Tôi cam đoan khoá luận “Những vấn đề cơ bản và một số
thuật toán trên đồ thị” là kết quả nghiên cứu của tôi dưới sự hướng dẫn
của TS.Trần Minh Tước. Tôi xin khẳng định kết quả nghiên cứu trong
khoá luận này không sao chép kết quả của bất cứ tác giả nào khác. Nếu
sai sót tôi xin chịu hoàn toàn trách nhiệm.
Xuân Hòa, ngày 06 tháng 5 năm 2014
Sinh viên
Nguyễn Thúy Linh


MỤC LỤC
MỞ ĐẦU ............................................................................................... 1
Chương 1. MỘT SỐ KIẾN THỨC CƠ BẢN VỀ ĐỒ THỊ ..................... 2
1. Một số khái niệm của đồ thị ............................................................... 2
1.1. Định nghĩa đồ thị............................................................................. 2
1.2. Các thuật ngữ cơ bản ....................................................................... 5
1.3. Một số đồ thị đặc biệt ...................................................................... 9
2. Biểu diễn đồ thị ................................................................................ 11
2.1. Biểu diễn đồ thị bằng ma trận kề, ma trận trọng số ........................ 11
2.2. Ma trận liên thuộc.......................................................................... 13
2.3. Ý nghĩa của các cách biểu diễn đồ thị............................................ 14
Chương 2. MỘT SỐ THUẬT TOÁN TRÊN ĐỒ THỊ.......................... 16
1. Bài toán duyệt đồ thị ........................................................................ 16

1.1. Thuật toán tìm kiếm theo chiều sâu DFS (Depth First Search) ...... 16
1.2. Thuật toán tìm kiếm theo chiều rộng BFS (Breath First Search) .... 20
1.3. Ý nghĩa của bài toán duyệt đồ thị .................................................. 24
2. Bài toán tìm đường đi ngắn nhất....................................................... 24
2.1. Thuật toán tìm đường đi ngắn nhất Dijkstra................................... 24
2.2 Thuật toán Floyd ............................................................................ 30
2.3. Ý nghĩa của bài toán tìm đường đi ngắn nhất................................. 33
3. Bài toán cây khung cực tiểu.............................................................. 34
3.1. Cây, cây khung và một số tính chất ............................................... 34
3.2. Bài toán cây khung cực tiểu........................................................... 35
3.3. Ý nghĩa của bài toán cây khung cực tiểu........................................ 42
KẾT LUẬN.......................................................................................... 44
TÀI LIỆU THAM KHẢO .................................................................... 45


MỞ ĐẦU

Lý thuyết đồ thị là ngành khoa học được phát hiện từ lâu nhưng lại
có nhiều ứng dụng hiện đại. Những tư tưởng cơ bản của lý thuyết đồ thị
được đề xuất từ những năm đầu của thế kỉ XVIII bởi nhà toán học lỗi lạc
người Thụy Sĩ Leonhard Euler. Chính ông là người đã sử dụng đồ thị để
giải bài toán nổi tiếng về các cây cầu ở thành phố Königsberg. Từ đó lý
thuyết đồ thị ngày càng khẳng định được vị trí quan trọng trong việc giải
quyết các bài toán thực tế. Lý thuyết đồ thị không những có nhiều ứng
dụng trong thực tế mà còn là công cụ đắc lực cho ngành công nghệ thông
tin. Nó giúp cho chúng ta mô tả dễ dàng các bài toán phức tạp một cách
cụ thể, để từ đó ta có thể mã hóa các bài toán đó bằng máy tính. Tuy
nhiên, đây là kiến thức hoàn toàn mới, không có trong chương trình học
của tôi. Với mong muốn học hỏi và tìm tòi kiến thức mới nên tôi chọn
đề tài “Những vấn đề cơ bản và một số thuật toán trên đồ thị”.

Nội dung khóa luận của tôi tuy không phải là những kết quả mới
tìm được nhưng với tinh thần học hỏi kiến thức mới, hi vọng đề tài này
sẽ đem lại nhiều kiến thức bổ ích cho bản thân và cho độc giả. Nội dung
khóa luận gồm hai chương:
Chương 1. Một số kiến thức cơ bản về đồ
thị. Chương 2. Một số thuật toán trên đồ thị.
Tuy đã có nhiều cố gắng, song do hạn chế về thời gian và năng lực
của bản thân, nên khóa luận không tránh khỏi sai sót, rất mong được sự
quan tâm góp ý của thầy cô và các bạn.
Tôi xin chân thành cảm ơn!

1


Chương 1
MỘT SỐ KIẾN THỨC CƠ BẢN VỀ ĐỒ THỊ

1. Một số khái niệm của đồ thị
1.1. Định nghĩa đồ thị
Ta có thể hình dung đồ thị như tập hữu hạn các đối tượng và những
mối liên hệ giữa các đối tượng đó. Sơ đồ biểu diễn một mạng máy tính là
một hình ảnh của đồ thị. Các đối tượng là các máy tính, mỗi kênh
thoại sẽ biểu diễn mối liên hệ giữa hai máy tính trong mạng.
Có nhiều loại đồ thị được xây dựng dựa vào cấu trúc của đồ thị, cụ
thể là tùy thuộc vào sự xác định mối liên hệ giữa các đối tượng. Khuôn
khổ khóa luận này tôi chỉ đề cập tới đồ thị vô hướng và đồ thị vô hướng
có trọng số.
Định nghĩa 1.1. Đồ thị là một cặp G  (V ,
E)


gồm hai tập hợp hữu hạn

V và E thỏa mãn điều kiện E  {{u,v}| u,v V ;u  v}
Phần tử của V được gọi là đỉnh, phần tử của E được gọi là cạnh
của đồ thị G.
Người ta thường ký hiệu V  {v1,v2
,...,vn},cạnh

e  {u,v} thường

viết gọn hơn là uv (cũng trùng với vu).
Trong định nghĩa này, mỗi phần tử của E là một tập gồm hai phần
tử khác nhau thuộc V. Như vậy, các đồ thị được xét ở đây là các đồ thị
hữu hạn, không có khuyên và cạnh bội (xem [1]) , gọi tắt là đồ thị.
Một cách trực quan, người ta thường biểu diễn đồ thị bằng sơ đồ
đỉnh – cạnh như sau:
- Biểu diễn mỗi đỉnh của đồ thị bằng một vòng tròn nhỏ (rỗng hoặc
đặc).
- Một cạnh được biểu diễn bởi một đoạn (cong hay thẳng) nối hai
2


đỉnh liên thuộc với cạnh đó.
Ví dụ. Đồ thị G  (V , với V  {v1,v2
E)
,...,v7},

E  {v1v2 v1v5 ,
,


v2v3 , v1v3 , v2v6 , v2v7 v3v4 , v3v5 , v3v7 , v4v6 , v5v6 , v6v7 }
,
là đồ thị được biểu diễn trong hình 1.
v1
v2
v










v5

v4

3





v7

v6


Hình1. Đồ thị G được biểu diễn bằng sơ đồ đỉnh – cạnh
Định nghĩa 1.2. Giả sử G  (V ,
E)
G  (V ,
E)

là đồ thị không rỗng. Đồ thị

được gọi là đồ thị con của G, kí hiệu G  G , nếu V  
V

và E  E . Trong trường hợp V  V thì ta nói rằng G là đồ thị con
bao trùm của G.
Ví dụ. Đồ thị G và G là đồ thị con của G. Đồ thị G là đồ thị con
bao
trùm của G.


v2



v1






v


v1

v3

v4
G

v2





v1

v2









v3

v4


3

G

G


Hình 2. Đồ thị G và các đồ thị con G và G của G .
Định nghĩa 1.3. Đồ thị G  (V ,
E)
hàm:

được gọi là đồ thị có trọng số nếu

w: E WE
được xác định, ở đây giá trị WE  . Giá trị w(e) cho e E được
gọi là trọng số của canh e.
Kí hiệu:G  (V , E, w)
Các phần tử của WE có thể chỉ đơn thuần là các dữ liệu nhưng
thường thì có một ý nghĩa định lượng nào đấy.
Ví dụ. Cho G  (V , E, f với V  {v1,v2 ,...,v7},
)
E  {v1v2 v1v7 , v2v3 , v2v5 , v2v6 , v2v7 , v3v4 , v3v5 , v4v5 , v5v6 , v6v7}
,
Và w: E
WE

được xác định như sau:

w(v1v7 )  w(v3v4 )  w(v3v5 ) 1; w(v2v3 )  w(v2v7 )  2

w(v2v5 )  w(v6v7 )  w(v4v5 )  4
3;
w(v1v2 )  5; w(v5v6 )  w(v2v6 )  7
6;
Khi đó G là đồ thị có trọng số được biểu diễn bởi hình 3.
v1


2
1

6

v7

5

v2

v3




1
1

2
3


7


v6

3

 v4
4



v5


Hình 3. Đồ thị có trọng số G


1.2. Các thuật ngữ cơ bản
1.2.1. Liên thuộc, kề
Định nghĩa 1.4. Giả sử G  (V , E) là đồ thị không rỗng với v V

e E , ta nói đỉnh v liên thuộc với cạnh e (hay cạnh e liên thuộc với đỉnh
v) nếu ve . Các đỉnh liên thuộc với một cạnh được gọi là các đầu mút
của cạnh đó.
Hai đỉnh u và v của G được gọi là kề nhau nếu uv là một cạnh của
G.
Ví dụ.
v1




e1

e2

v2



e3


v5

e4

v3



e5

e6

e8

v4




e7


v6

Hình 4. Đơn đồ thị G
Xét đồ thị G được cho trong hình 4:
Đỉnh v1 liên thuộc với e1,e2 . Đỉnh v2 kề với các đỉnh v1,v3 ,v5 .
1.2.2. Bậc của đỉnh
Định nghĩa 1.5. Giả sử G  (V ,
E)

là đồ thị không rỗng với v là một

đỉnh của G. Ta kí hiệu E(v) là tập các cạnh liên thuộc với v. Khi đó bậc
của v ký hiệu là deg(v) là số cạnh liên thuộc với v, nghĩa là
deg(v)  | E(v) | . Đỉnh bậc 0 được gọi là đỉnh cô lập. Đỉnh bậc 1 được
gọi là đỉnh treo.


Ví dụ.

v1



v2

v3





 v4





v5



v6

v7

Hình 5. Bậc của các đỉnh trên đồ thị G.
Xét đồ thị G được cho trong hình 5 ta có
deg(v1 ) = 1, deg(v2 ) = 3, deg(v3 ) = 4, deg(v4 ) = 2
deg(v5 ) = 0, deg(v6 ) = 3, deg(v7 ) = 3
Từ khái niệm ta có đỉnh v5 là đỉnh cô lập, v1 là đỉnh treo.
Định lý 1.1.[2] Trong đồ thị G = (V, E) bất kì ta luôn có

 deg(v) = 2|E| 



*Nhận xét: Ta thấy rằng mỗi cạnh e 

uv

được tính một lần trong

vV

deg(u) và một lần trong deg(v) . Từ đó ta suy ra được rằng tổng của tất
cả các bậc của các đỉnh bằng hai lần số cạnh.
1.2.3. Đường đi, chu trình
Định nghĩa 1.6. Giả sử G  (V , E) là đồ thị không rỗng, một đường
đi
trong G là một dãy phân biệt các đỉnh v0 ,v1,v2 ,...,vn , vi V sao cho
vi vi1  E với mọi i  0,1,...,n 1. Khi đó n được gọi là độ dài,
đỉnh
v0 được gọi là đỉnh đầu, còn đỉnh

trên.


vn được gọi là đỉnh cuối của đường
đi


Một đường đi được gọi là chu trình nếu đỉnh đầu và đỉnh cuối của
nó trùng nhau.
Ví dụ. Giả sử G  (V ,
E)
e1
v1 


là đồ thị như ở hình 6.
v2

v3

e4



e5
3

e e2



e7


v4

e9
e8





e6
v5

v6
Hình 6. Đường đi và chu trình trên G.
Khi đó:
Dãy v1,v2 ,v3 ,v4 ,v6 là đường đi đơn độ dài 4.
Dãy v1,v2 ,v4 ,v6 ,v5 ,v1 là chu trình có độ dài 5.
1.2.4. Liên thông, thành phần liên thông
Định nghĩa 1.7. Đồ thị G = (V, E) được gọi là liên thông nếu với hai
đỉnh u và v khác nhau bất kỳ của G tồn tại một đường đi trong G
với đỉnh đầu là u và đỉnh cuối là v .
Trong trường hợp ngược lại, đồ thị được gọi là không liên thông.
Ví dụ. Đồ thị G  (V ,
E)

cho trong hình 7 là đồ thị liên thông.
v1



v3 
v5 

v2



 v
4
 v6

Hình 7. Đồ thị liên thông G



Như vậy có thể thấy một đồ thị G không liên thông là tập hợp các
đồ thị liên thông.
Mỗi đồ thị liên thông là đồ thị con của G và được gọi là một
thành phần liên thông của đồ thị G đã cho.
Ví dụ. Đồ thị G  (V , cho trong hình 8 là đồ thị không liên thông. Nó
E)
gồm 3 thành phần liên thông G1,G2 ,G3 .




G1







G2

G3

G
Hình 8. Đồ thị G không liên thông.
1.2.5. Đỉnh cắt
Định nghĩa 1.8. Giả sử G  (V , E) là đồ thị không rỗng với v là một
đỉnh của G. Đỉnh v được gọi là đỉnh cắt nếu khi loại bỏ v cùng với các

cạnh liên thuộc với nó thì đồ thị nhận được sẽ có số thành phần liên
thông lớn
hơn số thành phần liên thông của đồ thị ban
đầu.
Ví dụ. Trong đồ G thị ở hình 9, đỉnh v2 ,v3 là đỉnh cắt.
v1

v3 




v2

 v4

Hình 9. Đỉnh cắt trong đồ thị G



v5


1.2.6. Cạnh cầu
Định nghĩa 1.9. Giả sử G  (V ,
E)

là đồ thị không rỗng với e là một

cạnh của G. Cạnh e được gọi là cầu nếu khi loại bỏ nó khỏi đồ thị

nhận được sẽ có số thành phần liên thông lớn hơn số thành phần liên
thông
của đồ thị ban đầu.
v
1

Ví dụ. Trong đồ thị G được



v2

cho ở hình 10 các cạnh:
v1v3 ,v2v3 ,v4v3 ,v5v3

 v3

đều là cạnh cầu.




v4

1.3. Một số đồ thị đặc biệt

v5

Hình 10. Cạnh cầu trên đồ thị G


1.3.1. Đồ thị đầy đủ

Đồ thị mà giữa hai đỉnh bất kỳ của nó luôn có cạnh nối được gọi là
đồ thị đầy đủ. Đồ thị đầy đủ n đỉnh, ký hiệu là K n .
Ví dụ. Các đồ thị K2 , K3 , K4 , K5 cho trong hình 11 dưới đây.














K2





K3



K4







K5

Hình 11. Đồ thị đầy đủ
Có thể thấy rằng đồ thị đầy đủ K n có tất cả

n( n
2
cạnh, nó

C
n
 1)
2


là đồ thị có nhiều cạnh nhất.
1.3.2. Đồ thị vòng
Đồ thị gồm n đỉnh v1,v2 ,...,vn (n  3) và các cạnh v1v2 , v2v3 ,
...,vn1vn , vnvn1 được gọi là đồ thị vòng Cn .
Ví dụ. Đồ thị vòng C3 ,C4 ,C5 ,C6 cho trong hình 12.


























C3



C4






C5

C6

Hình 12. Đồ thị vòng C3 ,C4 ,C5 ,C6

1.3.3. Đồ thị bánh xe
Đồ thị bánh xe thu được bằng cách bổ sung vào đồ thị vòng Cn
một đỉnh mới nối với tất cả các đỉnh của Cn . Kí hiệu Wn .
Ví dụ. Đồ thị bánh xe W3 ,W4 ,W5
cho trong hình 13.
,W6












W3





















W4






W5

Hình 13. Đồ thị bánh xe W3 ,W4 ,W5 ,W6
1.3.4. Đồ thị hai phía






W6




Đồ thị G = (V, E) được gọi là hai phía nếu như tập đỉnh V của nó
có thể phân hoạch thành hai tập X và Y sao cho mỗi cạnh của đồ thị chỉ


nối một đỉnh nào đó trong X với một đỉnh nào đó trong Y. Khi đó ta sẽ sử
dụng ký hiệu G =(X Y, E) để chỉ đồ thị hai phía với tập đỉnh X Y.

Đồ thị hai phía G = (XY, E) với X = m, Y = n được gọi là đồ
thị hai phía đầy đủ và kí hiệu là K m,n nếu mỗi đỉnh trong tập X đều được
nối với mỗi đỉnh trong Y.
Ví dụ. Các đồ thị K2,3 , K3,3 , K3,4 được cho trong hình 15



























K 2,3



K3,3

K 3,4



Hình 15. Đồ thị hai phía
2. Biểu diễn đồ thị
2.1. Biểu diễn đồ thị bằng ma trận kề, ma trận trọng số
2.1.1. Ma trận kề
Giả sử G = (V, E) là một đồ thị hữu hạn với V  {v1,v2 ,...,vn }. Khi
đó ma trận kề của đồ thị G là ma trận:



 a1
A=[a ]
ij nn

a12

1
a22

a21



 an1 an2

a1n 
a2 n 
 , trong đó:

ann 

- aij 1 nếu vi v j  E,
- aij  0 nếu vi v j  E.
Ví dụ. Ma trận kề của đồ thị G được cho trong hình 17 là:

1

1

A  
1
0

0
0

0 1 0 1 0



2

1 0 0 1 0


0 0 0 1 0
1 1 1 0 1

v4
0 0 0 1

v3


v5

v6

Hình 16. Đồ thị G


2.1.2. Ma trận trọng số
Giả sử G  (V , E, là đồ thị có trọng số. Khi đó ma trận trọng số
w)
của G là ma trận:
 b1

b12

b1n 

b22

b2n 
 , trong đó:


1


B = [b ]
ij nn

b
 21


bn bn2

bnn 


1

- b ij = ∞

nếu i  j và vi v j  E,


- bij = w (vi v j ) nếu vi v j  E,
- bij = 0

nếu i  j và vi v j  E.


Ví dụ. Giả sử G  (V , E,
w)

là đồ thị có trọng số được biểu diễn bằng

hình 18. Khi đó G được biểu diễn bằng ma trận:
0

2

   3

55  
2 



2 0

 5 0
B  
  2
 2 1
v3   


2

0

1

4

0

4
5



5
0

v2
v1


v3

2
2
v4



3



5

6

1

2


4



v5

Hình 17. Đồ thị G.
* Nhận xét
Ưu điểm:

- Đơn giản, trực quan, dễ cài đặt trên máy tính
- Để kiểm tra xem hai đỉnh (i, j) của đồ thị có kề nhau hay không, ta
chỉ việc kiểm tra bằng một phép so sánh: b ij ≠ 0.
Nhược điểm:
- Bất kể số cạnh của đồ thị là nhiều hay ít, ma trận liền kề luôn luôn
đòi hỏi n 2 ô nhớ để lưu các phần tử ma trận, điều đó gây lãng phí bộ nhớ
dẫn tới việc không thể biểu diễn được đồ thị với số đỉnh lớn.
2.2. Ma trận liên thuộc
Giả sử G = (V, E) là một đồ thị với V ={v1,v2 ,...,vn } và E =
{e1,e2 ,...,em }. Khi đó ma trận liên thuộc của đồ thị G là:


 c1
C = [c ]
ij nn

c12

1
c22

c21



cn1 cn2

c1n 
c2n 
 , trong đó:


cnn 

- cij = 0 nếu cạnh e j liên thuộc với đỉnh vi
- cij = l nếu cạnh e j liên thuộc với đỉnh vi
Ví dụ. Giả sử G = (V, E) là đồ thị với tập đỉnh V  {v1,v2 ,v3 ,v4 ,v5} và
tập
cạnh E  {e1,e2 ,e3 ,e4 ,e5 ,e6} được cho trong hình 18. Khi đó ma trận
liên
v2
thuộc của đồ thị G là:
v


1

1 0 1 1 0 0 


0 1 0 0 0 0

C  1 1 0 0 1
0

0 0 1 0 1
 
1
0 0 0 1 0 1




e4

e2

e1
e3

v 

 v3

5

e6


e5

v4

Hình 18. Đồ thị G.
* Nhận xét
Ưu điểm:
- Ma trận liên thuộc tốn ít bộ nhớ hơn khi đồ thị có ít cạnh.
- Nhìn vào ma trận ta có thể dễ dàng biết được số lượng cạnh, số
lượng đỉnh và bậc của các đỉnh.
Nhược điểm:
- Biểu diễn phức tạp nếu đồ thị có số lượng cạnh nhiều.



2.3. Ý nghĩa của các cách biểu diễn đồ thị
Trong những ứng dụng rộng rãi của đồ thị đối với các lĩnh vực khoa


học khác và đối với thực tế cuộc sống, việc biểu diễn đồ thị đóng một
vai trò quan trọng.
Biểu diễn đồ thị với sơ đồ đỉnh cạnh được dùng khi muốn mô hình
hóa nhiều bài toán trong thực tế.
Với các loại ma trận (kề, liên thuộc, trọng số) và một số cách biểu
diễn khác nữa không được đề cập ở đây (Xem [1]), người ta sẽ mô
phỏng được đồ thị trong các hệ thống máy tính thuận tiện cho việc lập
trình.
Phối hợp cả hai dạng biểu diễn nói trên, việc lập trình giải quyết
nhiều bài toán thực tế sẽ trở nên đơn giản, thuận tiện hơn.


Chương 2
MỘT SỐ THUẬT TOÁN TRÊN ĐỒ THỊ

1. Bài toán duyệt đồ thị
Một bài toán quan trọng trong lý thuyết đồ thị là bài toán duyệt đồ
thị. Ta phải duyệt qua tất cả các đỉnh của đồ thị, bắt đầu từ một đỉnh xuất
phát nào đó. Vấn đề này đưa về một bài toán liệt kê mà yêu cầu của nó là
không được bỏ sót và cũng không được lặp lại bất kỳ đỉnh nào. Chính vì
vậy mà ta phải xây dựng những thuật toán cho phép duyệt các đỉnh một
cách hệ thống. Những thuật toán như vậy gọi là những thuật toán tìm
kiếm trên đồ thị. Ở đây ta quan tâm đến hai thuật toán cơ bản đó là thuật
toán tìm kiếm theo chiều sâu và thuật toán tìm kiếm theo chiều rộng.
1.1. Thuật toán tìm kiếm theo chiều sâu DFS (Depth First Search)

Tư tưởng: Cho G  (V , là đồ thị với các đỉnh u,v, wV . Ta sẽ
E)
bắt đầu tìm kiếm từ đỉnh v nào đó của đồ thị. Sau đó với mỗi đỉnh u tùy
ý kề với v, ta lặp lại quá trình một cách đệ quy đối với u. Ở bước tổng
quát, giả sử đang xét đỉnh v, nếu như trong số các đỉnh kề với v ta tìm
được một đỉnh nào đó là chưa xét thì ta sẽ xét đỉnh này và bắt đầu từ nó
ta sẽ tiếp tục quá trình tìm kiếm. Còn nếu như không có đỉnh nào kề với
v là chưa xét thì ta nói đỉnh này là đã duyệt xong và quay trở lại tiếp tục
tìm kiếm từ đỉnh mà trước đó ta đến được đỉnh v. Quá trình này có thể
mô tả bởi thủ tục đệ quy sau:
Procedure DFS(v);
(*Tìm kiếm theo chiều sâu bắt đầu từ đỉnh v*)
begin
Thăm_đỉnh(v);
Chuaxet[v] := false;


×