You are on page 1of 88

ĐẠI HỌC QUỐC GIA TP.

HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT


Mã môn học: IT003
Buổi 11-12

Số tiết lý thuyết: 45
Số tiết thực hành: 30
Số tiết tự học: 90

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
1
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
CẤU TRÚC ĐỒ THỊ
7.1 Các khái niệm trên đồ thị
- Định nghĩa
- Các loại đồ thị
- Đường đi, chu trình, liên thông
7.2 Biểu diễn đồ thị trên máy tính
7.3 Các thuật toán
a) BFS
b) DFS
c) Tìm đỉnh
d) Thêm đỉnh
e) Xóa đỉnh
7.4 Một số ứng dụng của tìm kiếm trên đồ thị :
- Bài toán đường đi - Bài toán liên thông
- Bài toán tô màu - Bài toán bao đóng
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
2
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
❑ĐỊNH NGHĨA
➢ Một đồ thị vô hướng G = (V, 𝐸):
– Tập các đỉnh 𝑉;
– Tập các cạnh/ cung 𝐸;
– Mỗi cạnh 𝑒 ∈ 𝐸 liên kết với một cặp
đỉnh {𝑖, 𝑗} ∈ V 2 , không phân biệt thứ tự.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
3
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
❑ĐỊNH NGHĨA
➢ Một đồ thị có hướng G = (V, 𝑈):
– Tập các đỉnh 𝑉;
– Tập các cạnh/ cung U;
– Mỗi cạnh u ∈ U liên kết với một cặp
đỉnh {𝑖, 𝑗} ∈ V 2 , có thứ tự.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
4
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
Ứng dụng

❖Mạng máy tính Computer

❖Mạch điện tử Resistor/Inductor/…

❖Bản đồ

City
5
7.1 Các khái niệm trên đồ thị
❑ĐỈNH KỀ
➢ Trên đồ thị vô hướng, xét cạnh 𝑒 liên kết với cặp đỉnh (𝑖, 𝑗):

• Cạnh 𝑒 kề với đỉnh 𝑖, 𝑗 (hay đỉnh 𝑖, 𝑗 kề với cạnh 𝑒); có thể viết tắt
𝑒 = (𝑖, 𝑗).
• Đỉnh 𝑖, 𝑗 được gọi là 2 đỉnh kề nhau (hay đỉnh 𝑖/ j kề với đỉnh 𝑗/ i

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
6
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị

❑ĐỈNH KỀ
➢ Trên đồ thị có hướng, xét cạnh 𝑢 liên kết với cặp đỉnh (𝑖, 𝑗):

• Cạnh u kề với đỉnh 𝑖 và đỉnh 𝑗 (hay đỉnh 𝑖 và đỉnh 𝑗 kề với cạnh


𝑢); có thể viết tắt 𝑢 = (𝑖, 𝑗). Cạnh 𝑢 đi ra khỏi đỉnh 𝑖 và đi vào
đỉnh 𝑗
• Đỉnh 𝑗 được gọi là đỉnh kề của đỉnh 𝑖

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
7
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
ĐỈNH TREO, ĐỈNH CÔ LẬP, KHUYÊN

Đỉnh treo

Đỉnh độc lập

Khuyên

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
8
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị

❑CÁC LOẠI ĐỒ THỊ


➢Đồ thị RỖNG: tập cạnh là tập rỗng
➢Đồ thị ĐƠN: không có khuyên và cạnh song song
➢Đồ thị ĐỦ: đồ thị vô hướng, đơn, giữa hai đỉnh bất kỳ
đều có đúng một cạnh.
A B
• Đồ thị đủ 𝑁 đỉnh ký hiệu là 𝐾𝑁 .
• 𝐾𝑁 có 𝑁(𝑁 − 1)/2 cạnh.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
9
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
➢ Đồ thị 𝐺 = (𝑋, 𝐸) là đồ thị LƯỠNG PHÂN nếu tập 𝑋
được chia thành hai tập 𝑋1 và 𝑋2 thỏa:
– 𝑋1 và 𝑋2 phân hoạch;
– Cạnh chỉ nối giữa 𝑋1 và 𝑋2 .

➢ Đồ thị LƯỠNG PHÂN ĐỦ: là đồ thị lưỡng phân đơn, vô


hướng thỏa với ∀ 𝑖, 𝑗 : 𝑖 ∈ 𝑋1 và 𝑗 ∈ 𝑋2 có đúng một cạnh
𝑖 và 𝑗.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
10
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
• Ví dụ :
– K3, K4 là đồ thị đầy đủ

K3 K4
K4

– K2,3 và K3,3 là đồ thị lưỡng phân đầy đủ

K3, 3
K2, 3

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
11
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
❑BẬC CỦA ĐỈNH
➢ Xét đồ thị vô hướng 𝐺
– Bậc của đỉnh 𝑥 trong đồ thị 𝐺 là số các
cạnh kề với đỉnh 𝑥, mỗi khuyên được
tính hai lần
– Ký hiệu: 𝑑𝐺(𝑥) (hay 𝑑(𝑥)) nếu đang
xét một đồ thị nào đó.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
12
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
❑ BẬC CỦA ĐỈNH
➢ Đỉnh CÔ LẬP là đỉnh có bậc bằng 0.
➢ Đỉnh TREO là đỉnh có bậc bằng 1.

A B

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
13
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
❑ BẬC CỦA ĐỒ THỊ
➢ Xét đồ thị có hướng 𝐺
– Nửa bậc ngoài của đỉnh 𝑥 là số các cạnh
đi ra khỏi đỉnh 𝑥, ký hiệu d+ (𝑥).
– Nửa bậc trong của đỉnh x là số các cạnh
đi vào đỉnh 𝑥, ký hiệu d− (𝑥).
– Bậc của đỉnh 𝑥: d x = d+ 𝑥 + d− (𝑥)

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
14
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
❑MỐI LIÊN HỆ BẬC – SỐ CẠNH
➢ Định lý:
– Xét đồ thị có hướng 𝐺 = (𝑋, 𝑈). Ta có:
σ𝑥∈𝑋 d+ (𝑥) = σ𝑥∈𝑋 d− (𝑥) và σ𝑥∈𝑋 d 𝑥 = 2|𝑈|

– Xét đồ thị vô hướng 𝐺 = (𝑋, 𝐸). Ta có:


σ𝑥∈𝑋 d 𝑥 = 2|𝐸|

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
15
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
❑ĐẲNG CẤU ĐỒ THỊ
➢ Hai đồ thị vô hướng 𝐺1 = (𝑋1 , 𝑈1 ) và 𝐺2 = 𝑋2 , 𝑈2 được
gọi là đẳng cấu với nhau nếu :
– Có cùng số đỉnh.
– Có cùng số đỉnh bậc 𝑘, mọi 𝑘 nguyên dương ≥ 0.
– Cùng số cạnh.
– Cùng số thành phần.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
16
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
❑ ĐỒ THỊ CON: Nếu trong đồ thị ta bỏ đi một số đỉnh nào đó và
các cạnh chứa đỉnh đó thì phần còn lại của đồ thị được gọi là đồ thị
con của đồ thị đã cho.
➢ Xét hai đồ thị 𝐺 = (𝑋, 𝑈) và 𝐺1 = (𝑋1 , 𝑈1 ).
▪ 𝐺1 được gọi là đồ thị con của G, ký hiệu 𝐺1 ∈ 𝐺 nếu:
✓ 𝑋1 ∈ 𝑋; 𝑈1 ∈ 𝑈
✓ 𝑢 = (𝑖, 𝑗) ∈ 𝑈 của 𝐺, nếu 𝑢 ∈ 𝑈1 thì 𝑖, 𝑗 ∈ 𝑋1
1 u1 2
1 u1 2
u5
u2 u4
u2 u3
u3 G1
G 3 4
4
u6
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
17
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
❑ĐỒ THỊ BỘ PHẬN: Nếu trong đồ thị ta bỏ đi một số cạnh 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ị đã cho.
• Đồ thị con 𝐺1 = (𝑋1 , 𝑈1 ) của đồ thị 𝐺 = (𝑋, 𝑈) được gọi
là đồ thị bộ phận của 𝐺 nếu X = 𝑋1 .
1 u1 2
1 u1 2
u5
u2 u4
u4
G G1 u2
u3
4 u3
3 4
3
u6
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
18
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
❑DÂY CHUYỀN: một dãy liên tiếp các cạnh, sao cho mỗi
một cạnh có một đỉnh chung với cạnh tiếp theo.
➢Đồ thị con 𝐶 = (𝑉, 𝐸) của 𝐺 = (𝑋, 𝑈) là một dây chuyền
với:
• 𝑉 = 𝑥1 , 𝑥2 , … , 𝑥𝑀
• 𝐸 = 𝑢1 , 𝑢2 , … , 𝑢𝑀−1 với 𝑢1 = 𝑥1 𝑥2 , 𝑢2 = 𝑥2 𝑥3 ,…, 𝑢M−1 =
𝑥M−1 𝑥𝑀 ; liên kết 𝑥𝑖 𝑥𝑖+1 không phân biệt thứ tự
➢Khi đó, 𝑥1 và 𝑥𝑀 được nối với nhau bằng dây chuyền 𝐶.
Với 𝑥1 là đỉnh đầu và 𝑥𝑀 là đỉnh cuối của 𝐶.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
19
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
➢ Số cạnh của 𝐶 được gọi là độ dài của 𝐶.
➢ Khi các cạnh hoàn toàn xác định bởi cặp đỉnh kề, dây
chuyền có thể viết gọn (𝑥1 , 𝑥2 , … , 𝑥𝑀 )
➢ Dây chuyền SƠ CẤP: dây chuyền không có đỉnh lặp lại.

❑CHU TRÌNH: là một dây chuyền có đỉnh đầu và


đỉnh cuối trùng nhau.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
20
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
❑THÀNH PHẦN LIÊN THÔNG

➢Một thành phần liên thông của một đồ thị vô hướng là một
đồ thị con trong đó:

– Giữa bất kì hai đỉnh nào đều có đường đi đến nhau;

– Không thể nhận thêm bất kì một đỉnh nào mà vẫn duy trì tính
chất trên.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
21
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
➢ G gồm 2 thành phần liên thông, 𝐻 là đồ thị liên thông

H
G
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
22
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
➢ Thuật toán xác định các thành phần liên thông

Input: đồ thị 𝐺 = (𝑋, 𝐸), tập 𝑋 gồm 𝑁 đỉnh 1,2, … , 𝑁


Output: các đỉnh của 𝐺 được gán nhãn là số hiệu của thành phần liên thông
tương ứng
1. Khởi tạo biến 𝑙𝑎𝑏𝑒𝑙 = 0 và gắn nhãn 0 cho tất cả các đỉnh
2. Duyệt qua tất cả các đỉnh 𝑖 ∈ 𝑋
Nếu nhãn của 𝑖 là 0
1. 𝑙𝑎𝑏𝑒𝑙 = 𝑙𝑎𝑏𝑒𝑙 + 1
2. Gán nhãn cho tất cả các đỉnh cùng thuộc thành phần liên thông với 𝑖 là
𝑙𝑎𝑏𝑒𝑙

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
23
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.1 Các khái niệm trên đồ thị
➢ Thuật toán gán nhãn các đỉnh cùng thuộc thành phần liên
thông với đỉnh 𝑖 – Visit(𝑖, 𝑙𝑎𝑏𝑒𝑙)

Input: đồ thị 𝐺 = (𝑋, 𝐸), đỉnh 𝑖, nhãn 𝑙𝑎𝑏𝑒𝑙


Output: các đỉnh cùng thuộc thành phần liên thông với i được gắn nhãn 𝑙𝑎𝑏𝑒𝑙
1. Gắn nhãn 𝑙𝑎𝑏𝑒𝑙 cho đỉnh 𝑖
2. Duyệt qua tất cả các đỉnh 𝑗 ∈ 𝑋 và có cạnh nối với 𝑖
Nếu nhãn của 𝑗 là 0
Visit( j , 𝑙𝑎𝑏𝑒𝑙)

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
24
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.2 BIỂU DIỄN ĐỒ THỊ
❑Ma trận KỀ:
– Xét đồ thị 𝐺 = 𝑋, 𝑈
• Tập 𝑋 gồm 𝑁 đỉnh và được sắp thứ tự 𝑋 = 𝑥1 , 𝑥2 , … , 𝑥𝑁 ,
• Tập 𝑈 gồm 𝑀 cạnh và được sắp thứ tự 𝑈 = 𝑢1 , 𝑢2 , … , 𝑢𝑀 .
– Ma trận kề của đồ thị 𝐺, ký hiệu 𝐵(𝐺), là một ma trận
nhị phân cấp 𝑁x𝑁: 𝐵 = 𝐵𝑖𝑗 , trong đó:
• 𝐵𝑖𝑗 = 1 nếu có cạnh nối 𝑥𝑖 tới 𝑥𝑗 ,
• 𝐵𝑖𝑗 = 0 trong trường hợp ngược lại.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
25
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.2 BIỂU DIỄN ĐỒ THỊ
Ví dụ: Ma trận KỀ B của đồ thị G:

1 <- đỉnh 1

<- đỉnh 2

4 <- đỉnh 3
2

<- đỉnh 4
3

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
26
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.2 BIỂU DIỄN ĐỒ THỊ
❑Ma trận Kề của đồ thị vô hướng:
➢Xét đồ thị 𝐺 = (𝑋, 𝑈) vô hướng, giả sử tập 𝑋 gồm 𝑁
đỉnh và được sắp thứ tự 𝑋 = 𝑥1 , 𝑥2 , … , 𝑥𝑁 , tập 𝑈 gồm
𝑀 cạnh và được sắp thứ tự 𝑈 = 𝑢1 , 𝑢2 , … , 𝑢𝑀 .
➢Ma trận của 𝐺, ký hiệu 𝐴(𝐺), là ma trận nhị phân 𝑁x𝑀:
𝐴 = (𝐴𝑖𝑗 ) với 𝐴𝑖𝑗 được định nghĩa:
• 𝐴𝑖𝑗 = 1 nếu đỉnh 𝑥𝑖 kề với cạnh 𝑥𝑗 ,
• 𝐴𝑖𝑗 = 0 nếu ngược lại.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
27
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.2 BIỂU DIỄN ĐỒ THỊ

➢Ma trận Kề của đồ thị vô hướng

4
2

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
28
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.2 BIỂU DIỄN ĐỒ THỊ

❑MA TRẬN TRỌNG SỐ


1
0 e1 e3 e4
e1 e4
e2 0 e5 0

e2 B=
e3 e5 0 e6
e3 4
2
e4 0 e6 0

e6
e5
3
G

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
29
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
CÀI ĐẶT BẰNG NGÔN NGỮ C++
#define MaxV 20 // số đỉnh cực đại của đồ thị

int A[MaxV][MaxV]; //Ma trận kề

int ChuaXet[MaxV]; // sử dụng xét thành phần liên thông

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
30
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.3 CÁC THUẬT TOÁN
a) Duyệt theo chiều sâu (Deep-First Search-DFS)
– Cho 𝐺 = 𝑉, 𝐸 : 𝑣, 𝑢  𝑉, 𝑢 là đỉnh kề của 𝑣.
– Ban đầu gán nhãn cho tất cả các đỉnh của đồ thị là 0.
– Một đỉnh đã được duyệt thì gán lại là 1.
• Ví dụ: đỉnh 𝑢 trong tập 𝑉 kề với đỉnh 𝑣 mà nhãn là 0. Duyệt
qua đỉnh 𝑢 và gán nhãn 𝑢 là 1.
– Tiếp tục quá trình duyệt đến khi tất cả các đỉnh đồ thị có
nhãn là 1.
– Sử dụng ngăn xếp để lưu trữ các đỉnh đã duyệt.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
31
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.3 CÁC THUẬT TOÁN
void DFS (int v)
{
//Gán nhãn v đã duyệt;
for (u = 1; u <= n; u++)
if (u tồn tại trong danh sách kề V)
if (u có nhãn là 0)
{
Xử lý đỉnh u; //Gán nhãn 1
DFS (u);
}
}

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
32
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU CHIỀU SÂU - DFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
33
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU CHIỀU SÂU - DFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
34
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU CHIỀU SÂU - DFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
35
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU CHIỀU SÂU - DFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
36
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU CHIỀU SÂU - DFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
37
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU CHIỀU SÂU - DFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
38
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU CHIỀU SÂU - DFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
39
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU CHIỀU SÂU - DFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
40
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU CHIỀU SÂU - DFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
41
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.3 CÁC THUẬT TOÁN
b) Duyệt theo chiều rộng (BFS)
//đánh dấu chưa duyệt tất cả các đỉnh
for (v = 1; v<= n; v++)
mark[v-1] = unvisited;
//n là số đỉnh của đồ thị
//duyệt theo chiều rộng từ đỉnh đánh số 1
for (v = 1; v<=n; v++)
if (mark[v-1] == unvisited) BFS(v);

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
42
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.3 CÁC THUẬT TOÁN
b) Duyệt theo chiều rộng (BFS)
₋ Sử dụng hàng đợi để lưu trữ thông tin trung gian thu được
trong quá trình tìm kiếm:
₋ Chèn đỉnh gốc vào hàng đợi (đang hướng tới)
₋ Lấy ra đỉnh đầu tiên trong hàng đợi và quan sát nó
• Nếu đỉnh này chính là đỉnh đích, dừng quá trình tìm kiếm và trả về
kết quả.
• Nếu không phải thì chèn tất cả các đỉnh kề với đỉnh vừa thăm
nhưng chưa được quan sát trước đó vào hàng đợi.
₋ Nếu hàng đợi là rỗng, thì tất cả các đỉnh có thể đến được đều
đã được quan sát – dừng việc tìm kiếm và trả về "không thấy".
₋ Nếu hàng đợi không rỗng thì quay về bước 2.
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
43
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.3 CÁC THUẬT TOÁN
void BFS(vertex v) // v ∈ [1..n]
{ QUEUE of vertex Q;
vertex x,y;
mark[v-1] = visited;
ENQUEUE(v,Q);
while !(EMPTY_QUEUE(Q))
{ x = FRONT(Q);
DEQUEUE(Q);
for (mỗi đỉnh y kề với x)
if (mark[y-1] == unvisited) { mark[y-1] = visited; //duyệt y
ENQUEUE(y,Q); }
}
}
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
44
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU RỘNG - BFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
45
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU RỘNG - BFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
46
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU RỘNG - BFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
47
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU RỘNG - BFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
48
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU RỘNG - BFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
49
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU RỘNG - BFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
50
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU RỘNG - BFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
51
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU RỘNG - BFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
52
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU RỘNG - BFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
53
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
DUYỆT THEO CHIỀU RỘNG - BFS

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
54
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.3 CÁC THUẬT TOÁN
c) Tìm:
– Đỉnh kề đầu tiên của đỉnh v: FIRST(v)
– Đỉnh nằm sau đỉnh có chỉ số i và kề với v: NEXT(v,i)
– Đỉnh có chỉ số i: VERTEX(i)
– Nhãn của đỉnh
– Nhãn của cạnh

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
55
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.3 CÁC THUẬT TOÁN
FIRST(v) : trả về chỉ số của đỉnh đầu tiên kề với v. Nếu không có đỉnh
nào kề với v thì null được trả về.
Giá trị null được chọn tuỳ theo cấu trúc dữ liệu cài đặt đồ thị.

int FIRST(int v) //trả ra chỉ số [1..n] của đỉnh đầu tiên kề với v ∈ 1..n
{
int i;
for (i=1; i<=n; i++)
if (a[v-1,i-1] == 1)
return (i); //trả ra chỉ số đỉnh của đồ thị
return (NULL);
}

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
56
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.3 CÁC THUẬT TOÁN
NEXT(v,i) :trả về chỉ số của đỉnh nằm sau đỉnh có chỉ số i và kề với v.
Nếu không có đỉnh nào kề với v theo sau đỉnh có chỉ số i thì null được trả
về.

int NEXT(int v, int i) //trả ra đỉnh [1..n] sau đỉnh i mà kề với v; i, v ∈ 1..n
{
int j;
for (j=i+1; j<=n; j++)
if (a[v-1,j-1] == 1)
return (j) ;
return (NULL);
}

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
57
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.3 CÁC THUẬT TOÁN
VERTEX(i) : trả về đỉnh có chỉ số i. Có thể xem là một hàm để định vị
đỉnh thứ i để thức hiện một thao tác nào đó trên đỉnh này.

Vòng lặp trên các đỉnh kề với v có thể cài đặt như sau :
i=FIRST(v);
while (i !=NULL)
{ w = VERTEX(i); //thao tác trên w
i =NEXT(v,i);
}

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
58
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.3 CÁC THUẬT TOÁN
d) Thêm:
- Một đỉnh vào đồ thị
- Một cạnh vào đồ thị

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
59
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.3 CÁC THUẬT TOÁN
e) Xóa:
- Một đỉnh
- Một cạnh

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
60
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.4 Một số ứng dụng
1. Bài toán tìm đường đi ngắn nhất từ một đỉnh của đồ thị
void Dijkstra()
{ S =[1]; //S chỉ chứa một đỉnh nguồn
for(i=2; i<=n; i++)
{ P[i-1] =1; //khởi tạo giá trị cho P
D[i-1] =C[0,i-1]; //khởi đầu các giá trị cho D }
for (i=1; i<n; i++)
{ Lấy đỉnh w trong V-S sao cho D[w-1] nhỏ nhất;
Thêm w vào S;
for (mỗi đỉnh u thuộc V-S)
if (D[w-1] + C[w-1,u-1] < D[u-1])
{ D[u-1] =D[w-1] + C[w-1,u-1];
P[u-1] =w; } } }
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
61
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.4 Một số ứng dụng
2. Tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh hàm Floyd
void Floyd()
{ int i,j,k;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
{ A[i-1,j-1] = C[i-1,j-1];
P[i-1,j-1]=0; }
for (i=1; i<=n; i++) A[i-1,i-1]=0;
for (k=1; k<=n; k++)
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
if (A[i-1,k-1] + A[k-1,j-1] < A[i-1,j-1)
{ A[i-1,j-1] = A[i-1,k-1] + A[k-1,j-1];
P[i-1,j-1] = k; }
}
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
62
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.4 Một số ứng dụng
3. Bài toán tìm bao đóng chuyển tiếp
void Warshall()
{ int i,j,k;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
A[i-1,j-1] = C[i-1,j-1];
for (k=1; k<=n; k++)
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
if (A[i-1,j-1] == 0)
A[i-1,j-1] =A[i-1,k-1] && A[k-1,j-1];
}
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
63
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.4 Một số ứng dụng
4. Bài toán tìm cây bao trùm tối thiểu
void Prim(graph G, set_of_edges *T)
{ set_of_vertices U; //tập hợp các đỉnh
vertex u,v; //u,v là các đỉnh
T = ∅;
U = [1];
while (U !=V) do // V là tập hợp các đỉnh của G
{ // gọi (u,v) là cạnh ngắn nhất sao cho u ∈ U và v ∈ V-U;
U = U ∪ [v];
T = T ∪ [(u,v)];
}
}
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
64
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.4 Một số ứng dụng

5. Bài toán cây bao trùm tối thiểu còn có thể được giải
bằng giải thuật Kruskal như sau:
Tìm cây bao trùm cho đồ thị hình :

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
65
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.4 Một số ứng dụng
Các cạnh của đồ thị được xếp theo thứ tự tăng dần là.
(1,3)=1, (4,6)=2, (2,5)=3, (3,6)=4, (1,4)=(2,3)=(3,4)=5,
(1,2)=(3,5)= (5,6)=6.
➢ Bước khởi đầu T= ∅
➢ Lần lặp 1: T={(1,3)}
➢ Lần lặp 2: T={(1,3),(4,6)}
➢ Lần lặp 3: T={(1,3),(4,6),(2,5)}
➢ Lần lặp 4: T={(1,3),(4,6),(2,5),(3,6)}
➢ Lần lặp 5: Cạnh (1,4) không được đưa vào T vì nó sẽ tạo ra chu
trình 1,3,6,4,1.
Kế tiếp cạnh (2,3) được xét và được đưa vào T.
T={(1,3),(4,6),(2,5),(3,6),(2,3)}

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
66
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.4 Một số ứng dụng
➢ T={(1,3),(4,6),(2,5),(3,6),(2,3)}
➢ Không còn cạnh nào có thể được đưa thêm vào T mà không tạo
ra chu trình. Vậy ta có cây bao trùm tối thiểu cũng giống như
trong hình:

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
67
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7.4 Một số ứng dụng
6. Bài toán tô màu
i := 1;
while <tồn tại đỉnh chưa được tô màu>
{ while <tồn tại đỉnh có thể tô màu Ci>
{ Chọn đỉnh Pm có bậc cao nhất // có thể tô màu Ci
Tô màu Ci cho đỉnh Pm
Đặt bậc của đỉnh Pm = 0
Với mỗi đỉnh Lk có cung nối với đỉnh Pm
Bậc(Lk) = Bậc(Lk) – 1
Cấm tô màu Ci cho đỉnh Lk
}
i = i + 1; // Chọn màu tô kế tiếp
}

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
68
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
BÀI TẬP
1. Tìm hiểu và cài đặt hàm biểu diễn đồ thị bằng danh sách
liên kết.
2. Viết hàm cài đặt xác định số thành phần liên thông của đồ
thị và cho biết đồ thị có liên thông
3. Viết hàm cho biết đồ thị có chu trình không ? Nếu có liệt
kê các chu trình của đồ thị?
4. Kiểm tra đồ thị có hướng, vô hướng.
5. Đếm số bậc của một đỉnh.
6. DFS, BFS.
7. Tìm đường đi từ đỉnh vi đến vj.
8. Kiểm tra tính liên thông, đếm số thành phần liên thông.
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
69
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
Ký hiệu

Gọi Open : tập các đỉnh có thể xét ở bước kế tiếp, các đỉnh đã
được “sinh ra” nhưng chưa được chọn/duyệt, đỉnh chờ duyệt
Close : tập các đỉnh đã xét/đi qua (cần lưu lại để mỗi đỉnh chỉ
được đi qua một lần duy nhất)
s : đỉnh xuất phát
g : đỉnh đích
p : đỉnh đang xét, đỉnh hiện hành
(p) : tập các đỉnh kề của p
q  (p) : một đỉnh kề của p

70
70
Ví dụ: Tìm đường đi từ U đến I dùng DFS
Thứ tự sinh ra các đỉnh con là theo thứ tự trong danh sách
đỉnh của input : W K I U M Q

71
71
Tìm đường đi từ U đến I dùng DFS

72
72
Ví dụ: Duyệt qua hết các đỉnh dùng DFS

73
73
Ví dụ: Tìm đường đi từ A đến B
Thứ tự sinh ra các đỉnh con là theo thứ tự bảng chữ cái

74
74
DFS

- Nếu p thuộc Close thì bỏ qua hay vẫn xét?


- Nếu q thuộc Open thì thế nào? Tiếp tục thêm vào hay không?
- Xuất đường đi bằng cách nào?
- Độ phức tạp?
12/26/2023 75
75
BFS
- Nếu p thuộc Close mà vẫn xét và
nếu q thuộc Open mà vẫn tiếp tục
thêm q vào Open thì thế nào?
- Xuất đường đi bằng cách nào?
- Độ phức tạp?

*** Bảng này chưa minh họa đúng theo


giải thuật ở slide trước, chỉ dùng để thảo
luận trên lớp

12/26/2023 76
76
Bài tập

Tìm đường đi từ s đến x theo chiến lược DFS/BFS

77
77
Thuật toán Dijkstra

❖ Giới thiệu:
▪ Thuật toán tìm đường đi ngắn nhất từ một đỉnh xuất phát đến tất
cả các đỉnh còn lại trong đồ thị có hướng, có trọng số không âm
▪ Được công bố lần đầu vào năm 1959
▪ Được đặt tên theo tên của nhà toán học và nhà vật lý người Hà
Lan Edsger W. Dijkstra

78
78
Edsger Wybe Dijkstra
• Nhà toán học, nhà vật (/ˈdaɪkstrə/ DYKE-strə) • Có các đóng góp
lý, nhà khoa học máy (11/5/1930 – 6/8/2002)
mang tính chất
tính người Hà Lan nền tảng trong lĩnh
vực ngôn ngữ lập
• Làm việc tại Trung trình
tâm toán học, Viện
nghiên cứu quốc gia • Thuật toán Dijkstra,
về toán học và khoa hệ điều hành THE và
học máy tính tại cấu trúc
Amsterdam semaphore…

• Giữ chức vị giáo sư tại


Đại học Kỹ thuật “Computer Science is no
Eindhoven, Hà Lan. more about computers than
astronomy is about
• Nghỉ hưu năm telescopes”
2000

79
Thuật toán Dijkstra

❖Bài toán 1:
• Input: Đồ thị có hướng G=(V,E,w), w(i,j) ≥ 0  (i,j)E, đỉnh
nguồn s, đỉnh đích g
• Output: đường đi ngắn nhất từ đỉnh s đến đỉnh g và độ dài
của đường đi

80
80
Thuật toán Dijkstra
❖ Ý tưởng chính:
▪ Hàm d(u) dùng để lưu trữ độ dài đường đi (khoảng cách) ngắn nhất
từ đỉnh nguồn s đến đỉnh u
𝑑 𝑢 = min 𝑑 𝑣 + 𝑤 𝑣, 𝑢 , 𝑣 ∈ 𝑋 𝑢
𝑋 𝑢 là tập tất cả các đỉnh có cạnh đi tới đỉnh u
▪ Đặt khoảng cách từ đỉnh nguồn s đến chính nó là 0 và đến tất cả các
đỉnh khác là vô cùng
▪ Tiến hành lặp cho đến khi tất cả các đỉnh đã được xác định khoảng
cách ngắn nhất từ s hoặc không còn đỉnh nào có thể đạt tới từ s
▪ Mỗi lần lặp, chọn đỉnh p chưa đi qua có giá trị d(p) nhỏ nhất, cập
nhật khoảng cách của các đỉnh kề thông qua đỉnh được chọn p
81
81
Ký hiệu

Gọi Open : tập các đỉnh có thể xét ở bước kế tiếp, các đỉnh có
thể được xem xét lại, đỉnh chờ duyệt
Close : tập các đỉnh đã xét/đã duyệt, không xem xét lại
s : đỉnh xuất phát
g : đỉnh đích
p : đỉnh đang xét, đỉnh hiện hành
(p) : tập các đỉnh kề của p
q  (p) : một đỉnh kề của p

82
82
Dijkstra
❖ Giải thuật tham khảo:
Mỗi đỉnh p tương ứng với 1 số d(p): khoảng cách đi từ đỉnh ban đầu tới p
Bước 1: Khởi tạo
Open := {s};
Close :={};
d(s) :=0;
Bước 2: While (Open ≠ {})
2.1 Chọn p thuộc Open có d(p) nhỏ nhất
2.2 Nếu p là trạng thái kết thúc thì xuất đường đi, thoát
2.3 Nếu p đã duyệt rồi thì bỏ qua, trở lại đầu vòng lặp
2.4 Chuyển p qua Close, và mở các đỉnh kế tiếp q sau p (kề với p)
d(q) = d(p) + cost(p,q) ;
Thêm q vào Open
Bước 3: Không có kết quả.
83
83
Tìm kiếm Dijkstra
Bước 2: While (Open ≠{})

2.4 Chuyển p qua Close, và mở các đỉnh kế tiếp q sau p


2.4.1 Nếu q đã có trong Open
nếu d(q)> d(p)+cost(p,q)
d(q) = d(p) + cost(p,q);
parent(q)=p ;
2.4.2 Nếu q chưa có trong Open và Close
d(q) = d(p) +cost(p,q);
parent(q)=p;
Thêm q vào Open

84
84
Ví dụ: Tìm đường đi ngắn nhất từ A đến J

85
85
Ví dụ: Tìm đường đi ngắn nhất từ A đến J dùng Dijkstra

86
86
Bài tập : Tìm đường đi ngắn nhất từ 1 đến 6

87
87
Bài tập: Tìm đường đi ngắn nhất từ A đến B

88
88

You might also like