Tải bản đầy đủ (.docx) (62 trang)

Khóa luận tốt nghiệp toán 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 (438.53 KB, 62 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 ĐAI HOC • • • •
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
________•__________
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 ừong 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 CẢM ƠN
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


LỜI CẢM ƠN
MỤC LỤC
LỜI CẢM ƠN
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ó ừong
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!
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ị

5
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 = (y,E) gồm hai tập hợp hữu hạn
VvàEthỏa mãn điều kiện £c{{m,v}Im , v g V;m^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 = {v
1
,v
2
, ,v
n
},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
6
đỉnh liên thuộc với cạnh đó.

Ví dụ. Đồ thị G = (Y,E) với V ={v
1
,v
2
, ,v
7
}, E = {v
l
v
2
,
Định nghĩa 1.2. Giả sử G = (y,E) /à đồ thị không rỗng. Đồ thị ơ = (y',E') được
gọi là đồ thị con của G, kí hiệu G'cG, nếu VcV và E' <^E. Trong trường hợp V'
-Vthì ta nói rằng ơlà đồ thị con bao trùm của G.
Ví dụ. Đồ thị ơ và G" là đồ thị con của G. Đồ thị G" là đồ thị con bao trùm của
G.
G G' G'
7
V
2
V
3
, v^g, V
2
V
6
, V
2
V
7

, V
3
V
4
, V
3
V
5
, V
3
V
7
, V
4
V
6
, V
3
V
6
, V
6
V
7
}
là đồ thị được biểu diễn trong hình 1.
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) được gọi là đồ thị có trọng số nếu hàm:
W:E—>W
E

được xác định, ở đây giá trị W
E
Ç Z K . . Giá trị w(e) cho e e E được
gọi là trọng số của canh e.
Kí hiệu: G = (У, E, w)
Các phần tử của W
E
có ứiể 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={v
1
,v
2
, ,v
7
},
E = {V{V
2
, v^, V
2
V
3
, V
2
V
5
, V
2
V
6

, V
2
V
7
, V
3
V
4
, V
3
V
5
, V
4
V
5
, V
5
V
6
, V
6
V
7
} Và
w:E—>W
e
được xác định như sau: wCvxV
7
) = w(v

3
v
4
) = w(v
3
v
5
) = 1 ;
w(v
2
v
3
) = w(v
2
v
7
) = 2 w(v
2
v
5
) = w(v
6
v
7
) = 3 ; w(v
4
v
5
) = 4 = 5 ; w(v
5

v
6
)
= 6 ; w(v
2
v
6
) = 7 IQii đó G là đồ thị có ừọng số được biểu diễn bởi hình
3.
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 e V và
ể g £ , 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)
neu V e e. Các đỉnh liên thuộc vón một cạnh được gọi là các đầu mút của
cạnh đó.
Hai đỉnh uvàv của G được gọi là kề nhau nểu uv là một cạnh của
8
Hình 3. Đồ thị có trọng số G
G.
Ví dụ.
Hình 4. Đơn đồ thị G Xét
đồ thị G được cho trong hình 4:
Đỉnh v
l
liên thuộc với Ểj,Ể
2
Đỉnh v
2
kề với các đỉnh v
15

v
3
,v
5
.
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 lá 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(y) là số cạnh liên thuộc với V, nghĩa là deg(v) = I E(v) I. Đỉnh bậc 0 được
gọi là đỉnh cô lập. Đỉnh bậc 1 được gọi là đỉnh treo.
Ví dụ.
Hình 5. Bậc của các đỉnh ừên đồ thị G.
Xét đồ thị G được cho ừong hình 5 ta có
degivj = 1, deg(v
2
) = 3, deg(v
3
) = 4, deg(v
4
) = 2
deg(v
5
) = 0, deg(v
6
) = 3, deg{v
n
) = 3
9
Vi
Từ khái niệm ta có đỉnh v

5
là đỉnh cô lập, V! là đỉnh ừeo.
Định lý 1.1.[2] Trong đồ thị G = (V, E) bất kì ta luôn có

d
degiý)=im □
veV
*Nhận xét: Ta thấy rằng mỗi cạnh e = uv được tính một làn trong 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 = (y,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 v

,v
v
v
2
, ,v
n
, Vị GVsao cho VịV
i+l
G E với mọi ỉ =
0,l, ,n-l. Khi đó n được gọi là độ dài, đỉnh v
0
được gọi là đỉnh đầu, còn đỉnh V
được gọi là đỉnh cuối của đường đi trên.
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) là đồ thị như ở hình 6.

Hình 6. Đường đi và chu trình trên G.
Khi đó:
Dãy v
v
v
2
,v
3
,v
4
,v
6
là đường đi đơn độ dài 4.
Dãy v
1
,v
2
,v
4
,v
6
,v
5
,v
1
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 и
và vkhác nhau bất kỳ của G tồn tại một đường đi trong G với đỉnh đầu là и
và đỉnh cuối là V.

1
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 ttong hình 7 là đồ thị liên thông.
v
2
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 = (Y,E) cho trong hình 8 là đồ thị không liên thông. Nó gồm 3
thành phần liên thông G
V
G
2
,G
3
.
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 = (y,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 v
2
,v
3
là đỉnh cắt.
1

1
Hình 9. Đỉnh cắt trong đồ thị G
1.2.6. Cạnh cầu
Định nghĩa 1.9. Giả sử G = (Y,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í dụ. Trong đồ thị G được cho ở hình 10 các cạnh:
V
1
V
3’
V
2
V
3’
V
4
V
3’
V
5
V
3
đều là cạnh cầu.
1.3. Một số đồ thị đặc biệt
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ị K
2
,K
3
,K
4
,K
5
cho trong hình 11 dưới đây.
Hình 11. Đồ thị đầy đủ Có thể thấy rằng đồ thị đầy
đủ K
n
có tất cả —— = cị cạnh, nó
1
Hình 10. Cạnh càu ừên đồ thị G
là đồ thị có nhiều cạnh nhất.
1.3.2. Đồ thị vòng
Đồ thị gồm n đỉnh v
15
v
2
, ,v (n > 3) và các cạnh VJV
2
, V
2
V
3
,
Vi*». v„v

n+1
được gọi là đồ thị vòng C
n
.
Ví dụ. Đồ thị vòng C
3
,C
4
,C
5
,C
6
cho trong hình 12.
Hình 12. Đồ thị vòng C
3
,C
4
,C
5
,C
6
1.3.3. Đồ thị bánh xe
Đồ thị bánh xe thu được bằng cách bổ sung vào đồ thị vòng C
n
một
đinh mới nối với tất cả các đỉnh của с . Kí hiệu w .
Ví dụ. Đồ thị bánh xe W
3
,W
4

,W
5
,W
6
cho trong hình 13.
W,
Hình 13. Đồ thị bánh xe W
3
,W
4
,W
5
,W
6
1.3.4. Đồ thị hai phía
Đồ thị G = (У, 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ỉ
1
nối một đỉnh nào đó trong X với một đỉnh nào đó ừong Y. Khi đó ta sẽ sử dụng
ký hiệu G =(Xu Y, E) để chỉ đồ thị hai phía với tập đỉnh Xu Y.
Đồ thị hai phía G = (Zu Y, E) với \х\ = т,\у\ = п đượ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ị K
23
,K
33
,K

34
được cho trong hình 15
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 = (У, E) là một đồ thị hữu hạn với V ={v
15
v
2
, ,v
n
}. Khi đó
ma ừận kề của đồ thị G là ma trận:
1
Ví dụ. Ma trận kề của đồ thị G được cho trong hình 77 là:
Hình 16. Đồ thị G
2.1.2. Ma trận trọng sổ
Giả sử G = СV,E,W) là đồ thị có ừọng số. Khi đó ma ừận ừọng số của G
là ma trận:
. , ừong đó:
nếu ì Ф j và VịVj Ể E,

- by = w 0ỉ .vị) nếu VỊV j G E,
nếu i = j và v,v
;
Ể E.
J 1
]
- h = 0
1
a
u ^12
A =[flÿ]„
xn
=
a
2l
a
22
_
a
nl
a
n2
- а
у
= 1 nếu V^e£,
- a
tj
= 0 nếu VịVj Ể E.
, trong đó:
0 1 1 0 0 0

1 0 1 0 1 0
1 1 0 0 1 0
1 0 0 0 1 0
0 1 1 1 0 1
0 0 0 0 1 0
A =
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 ừận:
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 (ỉ, ì) 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ị-Ф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 = (У, E) là một đồ thị vói V ={v
15
v
2
, ,v„} và E = {e
v
e
2
, ,e

m
}.
Khi đó ma trận liên thuộc của đồ thị G là:
1
V
>
1
v
0
2
00
00
00
3
2
0
5
В
c
nl
C
n2
- a-=0 nếu canh e, liên thuôc với đỉnh V
1J • 3 • l
- Cịị = 1 nếu cạnh e
]
liên ứiuộc với đừih V
Ví dụ. Giả sử G = (V, E) là đồ thị với tập đỉnh V - {v
1
,v

2
,v
3
,v
4
,v
5
} và tập
cạnh E - {e

,e
2
,e
3
,e
4
,e
5
,e
6
} được cho trong hình 18. Khi đó ma trận liên
thuộc của đồ thị G là:
'10 110 0'
Hình 18. Đồ thị G.
* Nhận xét Uu
đ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
1
c
= [CyU =
. , trong
C
ll
C
12
C
21
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 ừận (kề, liên thuộc, ừọ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ị ừong 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 ừê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 = (y,E ) là đồ thị với các đính u,v,wgV . Ta sẽ
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ư ừong 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
1
Vlà 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;
for u <E Ke(v) do if Chuaxet[u]
then DFS(u); end; (* đỉnh V đã duyệt
xong *)
Khi đó, tìm kiếm theo chiều sâu trên đồ thị tổng quát được thực hiện nhờ
thuật toán sau:
BEGIN
(* Initialization *) for V eV do
Chuaxet[v] := true; forv eVdo
if Chuaxet[v] then DFS(v);
END.
Ví dụ. Dùng thuật toán DFS duyệt đồ thị sau

Hình 1. Đồ thị G.
Thuật toán tìm kiếm theo chiều sâu trên đồ thị G được cho trong hình 1
được minh họa trong hình dưới đây. Các đỉnh đang xét được khoanh ừòn. Các
2
đỉnh đã duyệt xong được khoanh hình ô vuông. Thứ tự duyệt bằng tay ta có thể
tự quy định từ trên xuống dưới, từ trái qua phải hoặc theo sự tăng dần của chỉ
số của đỉnh để tránh nhầm lẫn (bỏ sót hay lặp lại đỉnh ữong quá trình duyệt). Ở
ví dụ này, ta tìm kiếm theo thứ tự tăng dàn chỉ số của các đỉnh. Thuật toán bắt
đầu tìm kiếm từ đỉnh V!, các
2
đỉnh kề với nó là v
2
,v
3
, v
4
và tiếp tục tìm kiếm đến v
2
, đến v
3
và đến v
5
.
Sau khi thăm đỉnh v
7
ta thấy không còn đỉnh nào kề với nó nữa, ta nói
v
7
đã duyệt xong, ta quay lại v
5

và tiếp tục tìm kiếm các đỉnh tiếp theo.
2
Hình lg
Hình li
Hình
11
Hình lm
Hình lk
Hình lp Hình lq
Khi tất cả các đỉnh đã được đánh dấu là duyệt xong, thuật toán kết
thúc.
1.2. Thuật toán tìm kiếm theo chiều rộng BFS (Breath First Search)
Tư tưởng: Thuật toán tìm kiếm theo chiều rộng trên đồ thị được xây
dựng dựa trên cơ sở hàng đợi QUEUE. Tức là đỉnh được thăm càng sớm sẽ
càng sớm trở thành đã duyệt xong (tức là càng sớm rời khỏi hàng đợi). Một
đỉnh sẽ ừở thành đã duyệt xong ngay sau khi ta xét xong tất cả các đỉnh kề
với nó. Thủ tục có thể mô tả như sau:
Procedure BFS(v);
(* Tìm kiểm theo chiều rộng bắt đầu từ đỉnh V*J
begin
QUEUE := 0;
2
QUEUE <= v; (* Kết nạp V vào QUEUE *)
Chuaxet[v ]:=false; while QUEUE +0do
begin
p <= QUEUE; (* Lẩy p từ QUEUE *)
Thăm_đỉnh(p); for u e Ke(p) do if
Chuaxet[u] then begin
QUEUE <=u; Chuaxet[u] :=false;
end;

end;
end;
Khi đó, tìm kiếm theo chiều rộng trên đồ thị được thực hiện nhờ thuật
toán sau:
BEGIN
(* Initialization *) for V eV do Chuaxet[v] := true; forv eVdo
if Chuaxet[V7 then BFS(v);
END.
2
Ví dụ. Dùng thuật toán BFS duyệt đồ thị sau:
Hình 2. Đồ thị G
Thuật toán tìm kiếm theo chiều rộng được cho trong hình 2 được minh họa
ttong các hình và bảng dưới đây. Tương tự như DFS, ở đây ta cũng quy định
duyệt theo thứ tự từ tăng dần của chỉ số của các cạnh. Thuật toán BFS bắt đàu
tìm kiếm từ đỉnh v
l
. Các đỉnh đang xét được khoanh tròn. Các đỉnh đã duyệt
xong được khoanh hình ô vuông .
2
Hình 2c
Hình 2b
V
o
v„
v
v
a
v
8
Hình

×