You are on page 1of 67

CHƯƠNG 5

ĐỒ THỊ
CHƯƠNG 5. ĐỒ THỊ
1. Một số định nghĩa và khái niệm
1. Đồ thị vô hướng
2. Đồ thị có hướng
3. Đồ thị có trọng số
2. Biểu diễn đồ thi trong máy tính điện tử
1. Biểu diễn bằng ma trận
2. Biểu diễn bằng danh sách
3. Đồ thi Euler và đồ thị Hamilton
1. Đồ thị Euler
2. Đồ thị Hamilton
4. Bài toán tìm cây khung cực tiểu
1. Cây và cây khung
2. Bài toán tìm cây khung cực tiểu
CHƯƠNG 5. ĐỒ THỊ
5. Bài toán tìm đường đi ngắn nhất
1. Bài toán
2. Thuật toán DIJKSTRA
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
1. Đồ thị vô hướng
2. Đồ thị có hướng
3. Đồ thị có trọng số
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
-Đồ thị là một công cụ rất hữu hiệu cho phép giải quyết các
bài toán trong nhiều lĩnh vực khác nhau.
-Những tư tưởng cơ bản của lý thuyết đồ thị được đề xuất vào
những năm đầu của thế kỷ 18 bởi Leonhard Euler (một nhà
toán học lỗi lạc người Thụy Sỹ).
-Đồ thị là một cấu trúc rời rạc gồm 2 thành phần chính là đỉnh và cạnh
(cung).
- Chúng ta sử dụng tập hợp để biểu diễn và xử lý đồ thị (trừu tượng).
-Tuy nhiên, để dễ hình dung đồ thị, chúng ta có thể biểu diễn đồ thị
bằng sơ đồ (trực quan).
D
- Ví dụ: 1 5 3
A E
C
4 B F
2
Đơn đồ thị Đa đồ thị
- Chúng ta chỉ làm việc với đơn đồ thị.
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.1. Đồ thị vô hướng
- Định nghĩa (bằng tập hợp): Một đồ thị vô hướng G được định nghĩa bằng
một bộ gồm 2 thành phần, ký hiệu G= (V, E), trong đó:
+ V là tập hợp các đỉnh (mỗi phần tử của V tương ứng là 1 đỉnh củaG);
+ E là tập hợp các cạnh vô hướng (mỗi phần tử của E tương ứng là 1 cạnh
của G) và E = {{m, n}|m, n ∈ V}.
- Chúng ta sử dụng ký hiệu phần tử của Vđể gán nhãn (đặt tên) cho đỉnh
tương ứng của G.
- Ví dụ: Với V= {m, n, k, …}ta nói Gcó các đỉnh m, n, k, …
- Mỗi cạnh vô hướng {m, n} thể hiện quan hệ giữa 2 đỉnh m, n củaG với
nhau.
- Lưu ý: {m, n} là cạnh vô hướng, do đó {m, n} = {n, m}.
- Ví dụ: Cho đồ thị vô hướng G= (V, E), trong đó:
+ V = {a,b, f,h, m, n, k}
+ E = { a, b , a, f , a, h , b, f , b, h , f,m , h, m , h, k , n, k , k, m }
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.1. Đồ thị vô hướng
- Khi biểu diễn đồ thị vô hướng bằng sơ đồ, có sự tương ứng:
+ n ∈ V tương ứng .n .n n n n

+ m, n tương ứng m. .n

- Ví dụ: Với đồ thị vô hướng G = (V, E) đã định nghĩa ở trên, trong đó:
+ V = {a, b, f,h, m, n, k}
+ E = { a, b , a, f , a, h , b, f , b, h , f,m , h, m , h, k , n, k , k, m }
ta có thể biểu diễn bằng sơ đồ như sau:

a f m
h n
b k
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.1. Đồ thị vô hướng
- Cho đồ thị vô hướng G= (V, E).
+ Tập hợp các đỉnh kề của đỉnh n ∈ V: T(n) = {m ∈ V|{n, m} ∈ E}.
+ Bậc của đỉnh n ∈ V: deg(n) = |T(n)|.
(đỉnh có bậc bằng 0 gọi là đỉnh cô lập, đỉnh có bậc bằng 1 gọi là đỉnh treo)

- Tính chất: Cho đồ thị vô hướng G = (V, E). Lúc đó deg(n) = 2 E.


nV

- Ví dụ: Với đồ thị vô hướng G= (V, E) đã định nghĩa ở trên, ta có:


+ T(a) = b, f, h ; T(b) = a, f, h ; T(f) = a, b, m ;
T(h) = a, b, m, k ; T(m) = {f,h, k}; T(n) = {k};T(k) = {h, n, m}.
+ deg(a) = 3; deg(b) = 3; deg(f) = 3; deg h = 4;
deg(m) = 3; deg(n) = 1; deg(k) = 3.
-Hệ quả: Trong một đồ thị vô hướng, số lượng đỉnh có bậc là số lẻ là một
số chẵn.
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.1. Đồ thị vô hướng
- Cho đồ thị vô hướng G= V, E .
+ Đường đi p từ đỉnh n 0 ∈ Vđến đỉnh n k ∈ Vlà một dãy liên tiếp các
cạnh {n0, n1}, {n1, n2}, …,{n k−1 , nk}, trong đó n 0 được gọi là đỉnh đầu và n k
được gọi là đỉnh cuối của đường đi p.
Ký hiệu: p: n 0 → n1→ n 2 → ⋯→ n k−1 → n k hay p(n 0 , n k ).
+ Chu trình là đường đi có đỉnh đầu và đỉnh cuối trùng nhau.
- Độ dài đường đi p có thể được tính bằng số lượng cạnh trong đường đi p.
- Lưu ý: Trong một đồ thị vô hướng
+ Nếu từ đỉnh này đến đỉnh kia có đường đi thì từ đỉnh kia đến đỉnh này
cũng có đường đi (do đó ta có thể nói đường đi giữa 2 đỉnh).
+ Từ đỉnh này đến đỉnh kia có thể: không có đường đi, hoặc có duy nhất 1
đường đi, hoặc có nhiều đường đi.
+ Trong một đường đi, mỗi cạnh có thể xuất hiện duy nhất một lần (gọi là
đường đi đơn) hoặc xuất hiện nhiều lần.
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM

5.1.1. Đồ thị vô hướng


- Ví dụ: Với đồ thị vô hướng G= (V, E) đã định nghĩa ở trên, ta có:
+ Đường đi: p 1 : n → k có độ dài 1
Từ a đến n có đường đi và từ n đến a cũng có đường đi:
p 2 : a → b → f → m → h → k → n có độ dài 6
p 3 : n → k → h → m → f → b → a có độ dài 6
Từ a đến n có nhiều đường đi:
p 4 : a → f → m → k → n có độ dài 4 p 5 : a f m
a → b → h → k → n có độ dài 4 p 6 : a n
h
→ h →k → n có độ dài 3 b k
Trong đường đi có cạnh xuất hiện nhiều lần:
p 7 : a → b → h → a → b → f → a → b → h có độ dài 8
+ Chu trình: p 8 : b → f → a → b có độ dài 3
p 9 : h → m → f → a → h có độ dài 4
p 10 : k → h → b → f → m → k có độ dài 5
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.1. Đồ thị vô hướng
- Cho đồ thị vô hướng G= V, E .
+ Glà đồ thị liên thông (hay ta nói G có tính liên thông) khi và chỉ khi
giữa 2 đỉnh bất kỳ của G đều có đường đi.
+ Đồ thị vô hướng G′ = V′, E ′ được gọi là đồ thị con của G = V,E khi
và chỉ khi V′ ⊆ Vhoặc E ′ ⊆ E.
- Cho G = (V, E) là đồ thị vô hướng không có tính liên thông. Lúc đó ta có
thể phân rã G= (V, E) thành các đồ thị con liên thông của G sao cho các đồ
thị con này đôi một không có đỉnh chung. Mỗi đồ thị con liên thông của G
được gọi là thành phần liên thông của G.
+ Tức là: V = V1 ∪ V2 ∪ ⋯∪ Vn và E = E1 ∪ E2 ∪ ⋯∪ E n
với G1 = V1,E1 ,G2 = (V2, E2),…, Gn = (Vn, E n ) là n đồ thị con liên
thông của G sao cho Vi ∩ Vj= ∅ với i ≠ j (i, j = 1, n).
+ Mỗi đồ thị con G1 = V1,E1 ,G2 = (V2, E2),…, Gn = (Vn, E n ) được gọi
là thành phần liên thông của G.
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.1. Đồ thị vô hướng
- Ví dụ: Với đồ thị vô hướng G = (V, E) đã định nghĩa ở trên, trong đó:
+ V = {a, b, f,h, m, n, k}
+ E = { a, b , a, f , a, h , b, f , b, h , f,m , h, m , h, k , n, k , k, m }
Ta có:
+ G là đồ thị liên thông. G a f m
+ Một số đồ thị con của G= (V, E): h n
b k
G1 = (V1,E 1 ) với V1 = {a,b, f,h, m, n, k}
và E1 = { a, b , a, f , a, h , b, h , k, m }
Rõ ràng G1 = (V1, E 1 ) không có tính liên thông và G1 = (V1, E 1 ) có 3
thành phần liên thông. a f m
G1 h n

G 2 = (V 2,E 2) với V 2 = {b,h, m, k} b k

m
và E2 = { b, h , h, m , h, k , k, m }
Rõ ràng G2 = (V2, E 2 ) là đồ thị liên thông. G2 b h
k
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.1. Đồ thị vô hướng
- Một số dạng đồ thị vô hướng đặc biệt:
+ Đồ thị đầy đủ: Gđược gọi đồ thị đầy đủ khi và chỉ khi giữa 2 đỉnh bất
kỳ của Gđều có cạnh.
1 1 2 1 2
3
3 2 4 3 5 4

1 1 4 1 4
+ Đồ thị vòng: 5
2 3 2 3 2 3

2 1 4 2 3
+ Đồ thị bánh xe: 4
5 1 4
1 3 2 3 6 5
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.2. Đồ thị có hướng
- Định nghĩa (bằng tập hợp): Một đồ thị có hướng G được định nghĩa bằng
một bộ gồm 2 thành phần, ký hiệu G= (V, E), trong đó:
+ V là tập hợp các đỉnh (mỗi phần tử của Vtương ứng là 1 đỉnh củaG);
+ E là tập hợp các cạnh có hướng (mỗi phần tử của E tương ứng là 1 cạnh
của G) và E = {(m, n)|m, n ∈ V} ((m, n) là cạnh có hướng từ m đến n).
- Chúng ta sử dụng ký hiệu phần tử của V để gán nhãn (đặt tên) cho đỉnh
tương ứng của G.
- Ví dụ: Với V= {m, n, k, …}ta nói G có các đỉnh m, n, k, …
- Mỗi cạnh có hướng (m, n) thể hiện quan hệ giữa đỉnh m với n của G.
- Lưu ý: (m, n) là cạnh có hướng, do đó (m, n) ≠ (n, m).
- Ví dụ: Cho đồ thị có hướng G= (V, E), trong đó:
+ V = {a, b, f,h, m, n, k}
+ E = { a, b ,(a, f), (a, h), (b, f), (b, h), (f, m), (h, m), (h, k), (n, k), (k, m)}
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.2. Đồ thị có hướng
- Khi biểu diễn đồ thị có hướng bằng sơ đồ, có sự tương ứng:
+ n ∈ V tương ứng . n n . n n n
+ (m,n) tương ứng m. .n

- Ví dụ: Với đồ thị có hướng G= (V, E) đã định nghĩa ở trên, trong đó:
+ V = {a, b, f,h, m, n, k}
+ E = { a, b ,(a, f), (a, h), (b, f), (b, h), (f, m), (h, m), (h, k), (n, k), (k, m)}
ta có thể biểu diễn bằng sơ đồ như sau:

a f m
h n
b k
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.2. Đồ thị có hướng
- Cho đồ thị có hướng G= (V, E).
+ Tập hợp các đỉnh kề của đỉnh n ∈ V:
T + n = {m ∈ V|(n, m) ∈ E}
(T + n còn được gọi là tập hợp các đỉnh con của n)
T − n = {m ∈ V|(m, n) ∈ E}
(T − n còn được gọi là tập hợp các đỉnh cha của n)

+ Bán bậc ra của đỉnh n ∈ V: deg + n = |T + n |


Bán bậc vào của đỉnh n ∈ V:deg − n = | T− n |

- Tính chất: Cho đồ thị có hướng G= (V, E).


Lúc đó  deg +
(n) =  (n) = E .
deg −

nV nV
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.2. Đồ thị có hướng
- Ví dụ: Với đồ thị có hướng G= (V, E) đã định nghĩa ở trên, ta có:
+ T + a = b, f, h ; T − a = ∅; T + b = f, h ; T− b = a ;

+ deg + a = 3; deg − a = 0; deg + b = 2;deg − b = 1;

a f m
h n
b k
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.2. Đồ thị có hướng
- Cho đồ thị có hướng G = V, E .
+ Đường đi p từ đỉnh n 0 ∈ Vđến đỉnh n k ∈ Vlà một dãy liên tiếp các
cạnh (n 0 , n 1 ), (n 1 , n 2 ), …,(n k−1 , n k ), trong đó n 0 được gọi là đỉnh đầu và
n k được gọi là đỉnh cuối của đường đi p.
Ký hiệu: p: n 0 → n1→ n 2 → ⋯→ n k−1 → n k hay p(n 0 , n k ).
+ Chu trình là đường đi có đỉnh đầu và đỉnh cuối trùng nhau.
- Độ dài đường đi p có thể được tính bằng số lượng cạnh trong đường đi p.
- Lưu ý: Trong một đồ thị có hướng
+ Từ đỉnh này đến đỉnh kia có đường đi, nhưng từ đỉnh kia đến đỉnh này
có thể không có đường đi (đường đi một chiều).
+ Từ đỉnh này đến đỉnh kia có thể: không có đường đi, hoặc có duy nhất 1
đường đi, hoặc có nhiều đường đi.
+ Trong một đường đi, mỗi cạnh có thể xuất hiện duy nhất một lần (gọi là
đường đi đơn) hoặc xuất hiện nhiều lần.
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.2. Đồ thị có hướng
- Ví dụ: Với đồ thị có hướng G= (V, E) đã định nghĩa ở trên, ta có:
+ p 1 : a → b → f → m có độ dài 3 (nhưng từ m đến a không có đường đi)
+ Từ m đến các đỉnh khác không có đường đi
+ p 2 : n → k → m có độ dài 2 (đường đi duy nhất từ n đến m)
+ Từ a đến m có nhiều đường đi:
p 3 : a → f → m có độ dài 2
a f m
p 4 : a → h → m có độ dài 2 n
h
p 5 : a → h → k → m có độ dài 3 b k
p 6 : a → b → h → m có độ dài 3
p 7 : a → b → h → k → m có độ dài 4
+ G không có đường đi mà trong đó có cạnh xuất hiện nhiều lần.
+ G không có chu trình.
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.2. Đồ thị có hướng
- Cho đồ thị có hướng G= V, E .
+ Glà đồ thị liên thông mạnh (hay ta nói Gcó tính liên thông mạnh) khi và
chỉ khi giữa 2 đỉnh bất kỳ của Gđều có đường đi từ đỉnh này đến đỉnh kia,
hoặc có đường đi từ đỉnh kia đến đỉnh này.
+ Glà đồ thị liên thông yếu (hay ta nói Gcó tính liên thông yếu) khi và chỉ
khi đồ thị vô hướng tương ứng với Glà đồ thị liên thông.
(Đồ thị có hướng Gnhưng ta bỏ hướng của tất cả các cạnh, ta sẽ được đồ
thị vô hướng tương ứng với G)
+ Đồ thị có hướng G′ = V′ ,E′ được gọi là đồ thị con của G = V,E khi
và chỉ khi V′ ⊆ Vhoặc E ′ ⊆ E.
- Lưu ý: Rõ ràng nếu G là đồ thị liên thông mạnh thì G cũng là đồ thị liên
thông yếu.
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.2. Đồ thị có hướng
- Ví dụ: Với đồ thị có hướng G= (V, E) đã định nghĩa ở trên, ta có:
+ Gkhông phải là đồ thị liên thông mạnh, nhưng là đồ thị liên thông yếu.
+ Một số đồ thị con của G= (V, E):
G1 = (V1, E 1 ) với V1= {a, b, f,h, m, n, k}
và E1 = {a, b , a, f , a, h , b, h , k, m , (n, k)}
Rõ ràng G1 = (V1, E 1 ) không có tính liên thông mạnh, đồng thời không
f m
có tính liên thông yếu. G1 a
h n
b k
G2 = (V2,E 2 ) với V2 = {a, b, h, m, k}
và E2 = { a, b ,(b, h), (h, m), (h, k), (k, m)}
Rõ ràng G2 = (V2, E 2 ) là đồ thị liên thông mạnh.
a m

G2 h
b k
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
3. Đồ thị có trọng số
-Đồ thị có trọng số được định nghĩa cho cả đồ thị vô hướng và đồ thị có
hướng.
-Định nghĩa (bằng tập hợp): Một đồ thị có trọng số G(đồ thị vô hướng
hoặc đồ thị có hướng) được định nghĩa bằng một bộ gồm 3 thành phần, ký
hiệu G= (V, E, c), trong đó:
+ V là tập hợp các đỉnh (mỗi phần tử của V tương ứng là 1 đỉnh củaG);
+ E là tập hợp các cạnh (mỗi phần tử của E tương ứng là 1 cạnh của G);
+ hàm chi phí (hàm giá) c: E → R (mỗi cạnh được gán với một giá trị số,
gọi là trọng số của cạnh).
-Với mỗi {m, n} ∈ E (G là đồ thị vô hướng) hay với mỗi (m, n) ∈ E (G là đồ
thị có hướng), ta ký hiệu c(m, n) là trọng số của cạnh {m, n} hay (m, n).
-Lưu ý: Hàm chi phí (hàm giá) c: E → R được định nghĩa phụ thuộc vào
từng bài toán cụ thể mà ta dùng đồ thị để biểu diễn bài toán đó (tùy theo
mục tiêu giải quyết, đặc trưng thông tin của bài toán).
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
3. Đồ thị có trọng số
-Lưu ý: Trong sơ đồ biểu diễn đồ thị có trọng số, trọng số c(m, n) được
ghi bên cạnh đường nối 2 đỉnh m, n.

- Ví dụ: Cho đồ thị vô hướng có trọng số G1 = (V1, E1, c 1 ), trong đó:


+ V1= {a,b, f,h, m, n, k}
+ E1 = { a, b , a, f , a, h , b, f , b, h , f,m , h, m , h, k , n, k , k, m }
+ hàm chi phí c 1: E1 → R đươc định nghĩa như sau:
c1 a, b = 1, c1 a, f = 3, c1 a, h = 7, c1 b, f = 4, c1 b, h = 12,
c1 f,m = 8, c1 h, m = 10, c1 h, k = 13, c1 n, k = 16, c1 k, m = 20.
Biểu diễn G1 = (V1, E1, c 1 ) bằng sơ đồ: 4

3 f 8
a m
7 10
1 h 20 n
12
b 13 k 16
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.3. Đồ thị có trọng số
- Ví dụ: Cho đồ thị có hướng có trọng số G2 = (V2, E2, c 2 ), trong đó:
+V2 = {a, b, f,h, m, n, k}
+E2 = a, b , a, f , a, h , b, f , b, h , f,m , h, m , h, k , n, k , k,m
+hàm chi phí c 2 : E2 → R đươc định nghĩa như sau:
c2 a, b = 1, c2 a, f = 4, c2 a, h = 5, c2 b, f = 2, c2 b, h = 1,
c2 f,m = 8, c2 h, m = 10, c2 h, k = 3, c2 n, k = 20, c2 k,m = 2.
Biểu diễn G2 = (V2, E2, c 2 ) bằng sơ đồ: 2

4 8
a f m
5 10
1
h
2 n
1
b 3 k 20
5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
Bài tập:
Tìm mối liên hệ giữa số đỉnh, số cạnh, tổng số bậc của:

1 1 2 1 2
1. Đồ thị đầy đủ: 3
3 2 4 3 5 4

1 1 4 1 4
2. Đồ thị vòng: 5
2 3 2 3 2 3

2 1 4 2 3
3. Đồ thị bánh xe: 4
5 1 4
1 3 2 3 6 5
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
1. Biểu diễn bằng ma trận
2. Biểu diễn bằng danh sách
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
5.2.1. Biểu diễn bằng ma trận
- Biểu diễn đồ thị G(đồ thị vô hướng hoặc đồ thị có hướng) bằng ma trận
kề:
+ Cho đồ thị vô hướng G = V,E với V = n1, n 2 , …,n k ( V = k).
Lúc đó ma trận kề A = aij kxk biểu diễn G= V,E được định nghĩa:
0 nếu n i , nj ∉ E
aij =
1 nếu n i ,n j ∈ E
+ Cho đồ thị có hướng G = V,E với V = n1, n 2 ,…,n k ( V = k).
Lúc đó ma trận kề A = aij kxk biểu diễn G= V,E được định nghĩa:
0 nếu (n i , n j ) ∉ E
a ij =
1 nếu (ni ,nj ) ∈ E
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
1. Biểu diễn bằng ma trận
- Lưu ý:
+ Ma trận kề biểu diễn đồ thị vô hướng là ma trận đối xứng,
còn ma trận kề biểu diễn đồ thị có hướng không phải là ma
trận đối xứng.
+ Trong ma trận kề biểu diễn đồ thị vô hướng:
• Tổng các phần tử của hàng i bằng bậc của đỉnh n i ;
• Tổng các phần tử của cột j bằng bậc của đỉnh nj.
+ Trong ma trận kề biểu diễn đồ thị có hướng:
• Tổng các phần tử của hàng i bằng bán bậc ra của đỉnh n i ;
• Tổng các phần tử của cột j bằng bán bậc vào của đỉnh nj.
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
5.2.1. Biểu diễn bằng ma trận
- Ví dụ: Cho đồ thị vô hướng G= (V, E), trong đó:
+ V = {a, b, f,h, m, n, k}
+ E = { a, b , a, f , a, h , b, f , b, h , f,m , h, m , h, k , n, k , k, m }
Ma trận kề A biểu diễn G= (V,E):

𝑎 𝑏 𝑓 ℎ
a 0 1 1 1 0 0 0
1 0 1 1 0 0 0 a f m
1 1 0 0 1 0 0 h n
ℎ 1 1 0 0 1 0 1 b k
0 0 1 1 0 0 1
0 0 0 0 0 0 1
0 0 0 1 1 1 0
A
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
5.2.1. Biểu diễn bằng ma trận
- Ví dụ: Cho đồ thị có hướng G= (V, E), trong đó:
+ V = {a, b, f,h, m, n, k}
+ E = { a, b ,(a, f), (a, h), (b, f), (b, h), (f, m), (h, m), (h, k), (n, k), (k, m)}
Ma trận kề B biểu diễn G= (V, E):

𝑎 𝑏 ℎ
a 0 1 1 1 0 0 0
0 0 1 1 0 0 0 f m
0 0 0 0 1 0 0 a n
h
ℎ 0 0 0 0 1 0 1 k
0 0 0 0 0 0 0 b
0 0 0 0 0 0 1
0 0 0 0 1 0 0
B
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
5.2.1. Biểu diễn bằng ma trận
- Biểu diễn đồ thị có trọng số G(đồ thị vô hướng hoặc đồ thị cóhướng)
bằng ma trận trọng số:
+ Cho đồ thị vô hướng có trọng số G = V,E,c với V = n1, n 2 , …,n k
( V = k). Lúc đó ma trận trọng sốW = w ij kxk biểu diễn G = V, E,c
được định nghĩa:
α nếu ni , nj ∉ E ni ,
wij = , với α thường được chọn là 0, +∞,−∞.
n
c(n i , n j ) nếu j ∈ E
+ Cho đồ thị có hướng có trọng số G = V,E,c với V = n 1, n 2 , …,n k
( V = k). Lúc đó ma trận trọng sốW = w ij kxk biểu diễn G = V, E,c
được định nghĩa:
α nếu (n i , n j ) ∉ E
w ij = , với α thường được chọn là 0, +∞,−∞.
c n i ,n j nếu (ni ,nj ) ∈ E
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
5.2.1. Biểu diễn bằng ma trận
- Ví dụ: Cho đồ thị vô hướng có trọng số G1 = V1, E1,c1 được định nghĩa
ở trên.
Ma trận trọng số W1 biểu diễn G1 = V1,E1, c1 :

𝑏 𝑓 ℎ 𝑘
a 0 1 3 7 0 0 0 4
1 0 4 12 0 0 0
3 f 8
3 4 0 0 8 0 0 a m
7 10
ℎ 7 12 0 0 10 0 13 1 h 20 n
12
0 0 8 10 0 0 20 b 13 k 16
0 0 0 0 0 0 16
0 0 0 13 20 16 0
W1
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
5.2.1. Biểu diễn bằng ma trận
- Ví dụ: Cho đồ thị có hướng có trọng số G2 = V2, E2,c2 được định nghĩa
ở trên.
Ma trận trọng số W2 biểu diễn G2 = V2,E2, c2 :
𝑎 𝑏 𝑓 ℎ 𝑚 𝑛 𝑘
a ∞ 1 4 5 ∞ ∞ ∞
∞ ∞ 2 1 ∞ ∞ ∞ 2
∞ ∞ ∞ ∞ 8 ∞ ∞
4 8
∞ ∞ ∞ ∞ 10 ∞ 3 a f m
5 10
∞ ∞ ∞ ∞ ∞ ∞ ∞ 1 2 n
h
ℎ ∞ ∞ ∞ ∞ ∞ ∞ 20 b
1
3 k 20
∞ ∞ ∞ ∞ 2 ∞ ∞
W2
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
5.2.2. Biểu diễn bằng danh sách
- Biểu diễn đồ thị G(đồ thị vô hướng hoặc đồ thị có hướng) bằng
danh sách cạnh (cung):
+ Nếu G là đồ thị không có trọng số: lưu trữ danh sách tất cả
các cạnh, trong đó mỗi cạnh tương ứng là một bộ gồm 2
thành phần (2 đỉnh);
+ Nếu G là đồ thị có trọng số: lưu trữ danh sách tất cả các
cạnh, trong đó mỗi cạnh tương ứng là một bộ gồm 3 thành
phần (2 đỉnh và trọng số của cạnh).
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
5.2.2. Biểu diễn bằng danh sách
- Ví dụ: Cho đồ thị vô hướng G= (V, E), trong đó:
+ V = {a,b, f,h, m, n, k}
+ E = { a, b , a, f , a, h , b, f , b, h , f,m , h, m , h, k , n, k , k, m }
Biểu diễn G= (V, E) bằng danh sách cạnh:
a b
a b f h mn k
a f a 0 1 1 1 0 0 0
a h
1 0 1 1 0 0 0
b f f
b h
a m 1 1 0 0 1 0 0
f m h n 1 1 0 0 1 0 1
h m
b k 0 0 1 1 0 0 1
ℎ 0 0 0 0 0 0 1
h k
0 0 0 1 1 1 0
n k
k m
Ma trận kề A
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
5.2.2. Biểu diễn bằng danh sách
- Ví dụ: Cho đồ thị có hướng có trọng số G2 = V2, E2,c2 được định nghĩa
ở trên.
Biểu diễn G2 = V2, E2,c2 bằng danh sách cạnh:
a b 1 a b f h m n k
a f 4 a ∞ 1 4 5 ∞ ∞ ∞
a. h 5 2 ∞ ∞ ∞ ∞
∞ 2 1
b. f 2 ∞ 8 ∞ ∞
4 8 ∞ ∞ ∞
b h 1 a f m
5 10 ∞ ∞ ∞ ∞ 10 ∞ 3
f m 8 2 n
1
h ∞ ∞ ∞ ∞ ∞ ∞ ∞
h m 10 b
1
k 20
3 ℎ ∞ ∞ ∞ ∞ ∞ ∞ 20
h k 3 ∞ ∞ ∞ ∞ 2 ∞ ∞
n k 20
k m 2
Ma trận trọng số W2
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
2. Biểu diễn bằng danh sách
-Biểu diễn đồ thị G(đồ thị vô hướng hoặc đồ thị có hướng) bằng danh sách
kề:
+ Với mỗi đỉnh n ∈ Vta lưu trữ danh sách các đỉnh kề của n:
• Nếu G = (V, E) là đồ thị vô hướng: lưu trữ T(n) = {m ∈ V|{n, m} ∈ E}
• Nếu G = (V, E) là đồ thị có hướng: lưu trữ T + n = {m ∈ V|(n, m) ∈ E}
+ Thông thường ta sử dụng cấu trúc danh sách liên kết để biểu diễn (có thể
biểu diễn bằng cấu trúc mảng).
+ Trong danh sách liên kết: mỗi đỉnh n ∈ Vsẽ là đỉnh đầu của mỗi danh
sách và các đỉnh tiếp theo của danh sách là các đỉnh kề của n.
+ Nếu Glà đồ thị có trọng số thì mỗi phần tử trong danh sách có thêm
trường để lưu trữ trọng số của cạnh.
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
2. Biểu diễn bằng danh sách
- Ví dụ: Cho đồ thị vô hướng G= (V, E), trong đó:
+ V = {a,b, f,h, m, n, k}
+ E = { a, b , a, f , a, h , b, f , b, h , f,m , h, m , h, k , n, k , k, m }
Biểu diễn G= (V, E) bằng danh sách kề (sử dụng danh sách liên kết):
a. b f h

b. a f h

f a b m f
a m
h a b m k h n
b k
m. f h k

n. k

k h m n
5.2. BIỂU DIỄN ĐỒ THỊ TRONG MÁY TÍNH ĐIỆN TỬ
5.2.2. Biểu diễn bằng danh sách
- Ví dụ: Cho đồ thị có hướng có trọng số G2 = V2, E2, c2 được định nghĩa
ở trên.
Biểu diễn G2 = V2,E2, c2 bằng danh sách kề (sử dụng danh sách liên
kết):
a b 1 f 4 h 5
2
b f 2 h 1
4 8
f m 8 a f m
5 10
h m 10 k 3 1
h
2 n
1
b 3 k 20
m

n k 20

k m 2
5.3. ĐỒ THỊ EULER VÀ ĐỒ THỊ HAMILTON
1. Đồ thị Euler
2. Đồ thị Hamilton
5.3. ĐỒ THỊ EULER VÀ ĐỒ THỊ HAMILTON
1. Đồ thị Euler
- Cho đồ thị G(đồ thị vô hướng hoặc đồ thị có hướng).
- Đường đi đơn gồm tất cả các cạnh của G(mỗi cạnh xuất hiện duy nhất
một lần) được gọi là đường đi Euler.
- Chu trình đơn gồm tất cả các cạnh của G(mỗi cạnh xuất hiện duy nhất
một lần) được gọi là chu trình Euler.
- Gđược gọi là đồ thị Euler khi và chỉ khi Gcó chu trình Euler.
- Gđược gọi là đồ thị nửa Euler khi và chỉ khi Gcó đường đi Euler.
- Lưu ý: Rõ ràng nếu Glà đồ thị Euler thì Gcũng là đồ thị nửa Euler.
-Định lý 1 (Euler). Đồ thị vô hướng liên thông Glà đồ thị Euler khi và chỉ
khi mọi đỉnh của Gđều có bậc là số chẵn.
- Định lý 2. Đồ thị vô hướng liên thông Glà đồ thị nửa Euler khi và chỉ khi
Gcó nhiều nhất 2 đỉnh có bậc là số lẻ.
-Định lý 3. Đồ thị có hướng liên thông mạnh Glà đồ thị Euler khi và chỉ
khi ∀n ∈ V,deg + n = deg − n (V là tập hợp đỉnh của G).
5.3. ĐỒ THỊ EULER VÀ ĐỒ THỊ HAMILTON
5.3.1. Đồ thị Euler
- Ví dụ: Cho các đồ thị vô hướng G1, G2, G3 được biểu diễn bằng sơ đồ:
G1 1 4 G2 1 2 G3 1 4
5 3 5
2 3 5 4 2 3
+ G1 là đồ thị Euler vì có chu trình Euler p 1 : 1 → 5 → 3 → 2 → 5 → 4 → 1
+ G2 không phải là đồ thị Euler, nhưng là đồ thị nửa Euler vì có đường đi
Euler p 2 : 1 → 5 → 4 → 3 → 2 → 4 → 1 →2
+ G3 không phải là đồ thị Euler, đồng thời không phải là đồ thị nửa Euler.
- Ví dụ: Cho các đồ thị có hướng G1, G2, G3 được biểu diễn bằng sơ đồ:
G1 a f G2 a f G3 a f
m
b h b h b h
+ G1 là đồ thị Euler vì có chu trình Euler p 1 : a → f → m → h → b → a
+ G2 không phải là đồ thị Euler, nhưng là đồ thị nửa Euler vì có đường đi
Euler p 2 : a → f → h → a → b → h
+ G3 không phải là đồ thị Euler, đồng thời không phải là đồ thị nửa Euler.
5.3. ĐỒ THỊ EULER VÀ ĐỒ THỊ HAMILTON
1. Đồ thị Hamilton
- Cho đồ thị G(đồ thị vô hướng hoặc đồ thị có hướng).
- Đường đi qua tất cả các đỉnh của Gmà mỗi đỉnh xuất hiện duy nhất một
lần được gọi là đường đi Hamilton.
- Chu trình qua tất cả các đỉnh của Gmà mỗi đỉnh xuất hiện duy nhất một
lần được gọi là chu trình Hamilton.
- G được gọi là đồ thị Hamilton khi và chỉ khi G có chu trình Hamilton.
- G được gọi là đồ thị nửa Hamilton khi và chỉ khi G có đường đi Hamilton.
- Lưu ý: Nếu Glà đồ thị Hamilton thì Gcũng là đồ thị nửa Hamilton.
- Định lý 3 (Dirak).n Đồ thị vô hướng Gcó nhiều hơn 2 đỉnh và mỗi đỉnh có
bậc không nhỏ hơn là đồ thị Hamilton (n là số lượng đỉnh của G).
2
- Định lý 4. Đồ thị có hướng liên thông mạnh Glà đồ thị Hamiltonnếu
n
và deg − n ≥ n (V là tập hợp đỉnh của G, V = n).
∀n ∈ V,deg n+ ≥
2 2
5.3. ĐỒ THỊ EULER VÀ ĐỒ THỊ HAMILTON
5.3.1. Đồ thị Hamilton
- Ví dụ: Cho các đồ thị vô hướng G1, G2, G3 được biểu diễn bằng sơđồ:
G1 1 4 G2 1 2 G3 1 4

2 3 3 4 2 3

+ G1 là đồ thị Hamilton vì có chu trình Hamilton p 1 : 1 → 2 → 3 → 4 →1


+ G2 không phải là đồ thị Hamilton, nhưng là đồ thị nửa Hamilton vì có
đường đi Hamilton p 2 : 2 → 1 → 4 → 3
+ G3 không phải là đồ thị Hamilton, đồng thời không phải là đồ thị nửa
Hamilton.
5.3. ĐỒ THỊ EULER VÀ ĐỒ THỊ HAMILTON
5.3.1. Đồ thị Hamilton
- Ví dụ: Cho các đồ thị có hướng G1, G2, G3 được biểu diễn bằng sơ đồ:
G1 1 G2 1 G3 1

2 2 2 3
3 3

4 5
4 5 4 5 6

+ G1 là đồ thị Hamilton vì có chu trình Hamilton p 1 : 4 → 2 → 1 → 3 →


5 →4
+ G2 không phải là đồ thị Hamilton, nhưng là đồ thị nửa Hamilton vì có
đường đi Hamilton p 1 : 4 → 1 → 5 → 2 →3
+ G3 không phải là đồ thị Hamilton, đồng thời không phải là đồ thị nửa
Hamilton
ĐỒ THỊ

Bài tập:
1. Cho đồ thị vô hướng có trọng số G= (V, E, c), trong đó:
+ V = {n, h, m, l, k}
+ E = { k,n , k, m , k, h , k, l , n, m , l, n , h, m , h, l , l, m , n, h }
+ hàm chi phí c: E → R đươc định nghĩa như sau:
c( k, n) = 1, c(k, m) = 2, c(k, h) = 5, c(k, l)= 10, c (n, m)= 3, c(l, n)= 20, c( h,
m) = 6, c(h, l) = 12, c (l, m) = 15, c (n, h)=8.
a. Biểu diễn Gbằng sơ đồ, ma trận kề, ma trận trọng số, danh sách cạnh, danh sách
kề sử dụng danh sách liên kết đơn.
b. Tìm tập hợp các đỉnh kề, bậc của mỗi đỉnh trong G.
c.Cho ví dụ 5 đường đi (kèm theo chi phí), 3 chu trình trong G; cho ví dụ 2 đồ thị
con của G (biểu diễn bằng sơ đồ); G là đồ thị gì: đồ thị Euler, đồ thị nửa Euler, đồ thị
Hamilton, đồ thị nửa Hamilton; cho biết tính liên thông của G.
ĐỒ THỊ

Bài tập:
2. Cho đồ thị có hướng có trọng số G= (V, E, c), trongđó:
+ V = {a, b, m, n, l, k}
+ E = { (a, b) , (m, a), (m, l), (n, a) , (n, b), (l, a), (l, n), (k, l),(k, n), (k, b)}
+ hàm chi phí c: E → R đươc định nghĩa như sau:
c ( a, b)= 2, c (m, a) = 1, c (m, l) = 1, c (n, a) = 10, c (n, b) = 2, c (l, a) = 1,
c ( l, n) = 2, c (k, l) = 2, c (k, n) = 5, c (k, b) = 10.
a. Biểu diễn G bằng sơ đồ, ma trận kề, ma trận trọng số, danh sách cạnh, danh sách
kề sử dụng danh sách liên kết đơn.
b. Tìm tập hợp các đỉnh kề, bán bậc ra, bán bậc vào của mỗi đỉnh trong G.
c.Cho ví dụ 4 đường đi (kèm theo chi phí) trong G; cho ví dụ 2 đồ thị con của G
(biểu diễn bằng sơ đồ); cho biết tính liên thông của G; Gcó phải là đồ thị nửa Euler
hay đồ thị nửa Hamilton hay không; trong G có chu trình không?
5.4. BÀI TOÁN TÌM CÂY KHUNG CỰC TIỂU

1. Cây và cây khung


2. Bài toán và phương pháp giải
5.4. BÀI TOÁN TÌM CÂY KHUNG CỰC TIỂU
1. Cây và cây khung
- Cho đồ thị vô hướng liên thông G. G được gọi là cây khi và chỉ khi G
không có chu trình.
- Ví dụ: Các đồ thị vô hướng liên thông G1, G2, G3, G4 được sau là cây
a 10 12 13 16 8 a f k b
15 7
9 11 14
6 a
b n h b h m
G1 G2 2 3 4 5 G3 G4
l k m 1 n m n h
- Nhiều cây tạo thành rừng. Như vậy một đồ thị vô hướng nói chung không
có chu trình được gọi là rừng (ví dụ G1, G2, G3, G4 ở trên tạo thành rừng).
- Cho đồ thị vô hướng G có V là tập hợp đỉnh và V = n. Lúc đó các mệnh
đề sau là tương đương với nhau:
+ G là cây.
+ G liên thông và có n − 1 cạnh.
+ G không có chu trình và có n − 1 cạnh.
5.4. BÀI TOÁN TÌM CÂY KHUNG CỰC TIỂU
1. Cây và cây khung
- Cho đồ thị vô hướng liên thông G = (V, E). Lúc đó cây T = (V, F) sao
cho E ⊃ F được gọi là cây khung của G(cây T = (V, F) là đồ thị con của
G= (V, E)).
- Lưu ý: Một đồ thị vô hướng liên thông đã cho có thể có nhiều cây khung.
-Ví dụ: Cho đồ thị vô hướng liên thông G= (V, E) đã định nghĩa trước đây
(biểu diễn bằng sơ đồ): f a m
h n
b k
Một số cây khung của G:

a f m f f
a f m a m a m
h n n n
h n h h
b k b k b k b k

T1 T2 T3 T4
5.4. BÀI TOÁN TÌM CÂY KHUNG CỰC TIỂU
5.4.1. Cây và cây khung
- Cho đồ thị vô hướng liên thông có trọng số G= (V, E,c) và T = (V, F, c)
là cây khung của G. Ta định nghĩa giá của cây khung T = (V, F, c) như sau:
c(T) = c(m, n).
{m,n}F

- Ví dụ: Cho đồ thị vô hướng liên thông có trọng số G1 = (V1, E1, c 1 ) đã


định nghĩa trước đây (biểu diễn bằng sơ đồ): 4

a 3 f 8
m
7 10 n
1 h 20
Một số cây khung của G: b 12
13 k 16

a 3 f 8
m 4 3 f 8
m
f a
n a m 7
n
1 h n h
b 12 k 16 1 h 10 12
13 b 12
13 k 16 b 13 k 16

T1 có c T1 = 53 T2 có c T2 = 56 T3 có c T3 = 59
5.4. BÀI TOÁN TÌM CÂY KHUNG CỰC TIỂU
2. Bài toán tìm cây khung cực tiểu
-Như vậy, với mỗi đồ thị vô hướng liên thông có trọng số Gđã cho có thể
có nhiều cây khung và mỗi cây khung có thể có giá khác nhau.
-Vấn đề đặt ra: Trong số tất cả cây khung của đồ thị vô hướng liên thông
có trọng số G đã cho, hãy tìm cây khung có giá cực tiểu?
- Bài toán tìm cây khung cực tiểu: Cho đồ thị vô hướng liên thông có
trọng số G = (V, E, c) với V = n. Hãy tìm cây khung T = (V, F, c) của
G = (V, E,c) sao cho c(T) cực tiểu.
- Có một số thuật toán cho phép giải quyết bài toán này.
- Thuật toán KRUSKAL:
+ Xuất phát: T = (V, F, c) chưa có cạnh nào, tức là F = ∅ .
+ Chọn lần lượt các cạnh có trọng số trong E theo thứ tự tăng dần của
trọng số để bổ sung vào F cho đến khi F = n − 1 thì dừng.
+ Cạnh được chọn chỉ được bổ sung vào F khi cạnh đó không làm cho
T = (V, F, c) có chu trình.
5.4. BÀI TOÁN TÌM CÂY KHUNG CỰC TIỂU
5.4.2. Bài toán tìm cây khung cực tiểu
- Thuật toán KRUSKAL:
+ Vào: Đồ thị vô hướng liên thông có trọng số G = (V, E,c) với V = n.
+ Ra: Cây khung T = (V, F, c) của G = (V, E,c) sao cho c(T) cực tiểu.

{1 F = ∅; E∗ = E;
while (|F| < n − 1)
{2 chọn {m, n} ∈E∗ sao cho c(m, n) cực tiểu;
E∗ = E∗\{{m,n}};
if (T = ( V,{F∪ { m, n}},c) không có chu trình)
F = F ∪ { m, n} ; / / b ổ sung {m, n} vào F
2}
Printf (T = ( V,F, c), c(T));
1}
5.4. BÀI TOÁN TÌM CÂY KHUNG CỰC TIỂU
5.4.2. Bài toán tìm cây khung cực tiểu
- Ví dụ: Cho đồ thị vô hướng liên thông có trọng số G1 = (V1, E1, c 1 ) đã
định nghĩa trước đây (biểu diễn bằng sơ đồ): 4

3 f 8
a m
7 10
1 h 20 n
12
b 13 k 16

* Mô tả quá trình tìm cây khung cực tiểu T = (V1, F, c 1 ) của G1 theo thuật
toán KRUSKAL:
+ V1 = 7.
+ Xuất phát: cây khung cực tiểu T = (V1, F, c 1 ) cần tìm có F = ∅ và các
đỉnh V1:
a f m
h n
b k
5.4. BÀI TOÁN TÌM CÂY KHUNG CỰC TIỂU
5.4.2. Bài toán tìm cây khung cực tiểu
* Mô tả quá trình tìm cây khung cực tiểu T = (V1, F, c 1 ) của G1 theo thuật
toán KRUSKAL:
Bước Cạnh được E* F |F|
chọn

1 a, b 1, a, f 3, a, h 7, b, f 4, b, h 12, 0
f, m 8, h, m 10, h, k 13, n, k 16, k, m 20

2 a, b 1 a, f 3, a, h 7, b, f 4, b, h 12, f, m 8, a,b 1 1
h, m 10, h, k 13, n, k 16, k, m 20

3 a, f 3 a, h 7, b, f 4, b, h 12, f,m 8, h, m 10, a,b 1, a, f 3 2


h, k 13, n, k 16, k, m 20
4 b, f 4 a, h 7, b, h 12, f, m 8, h, m 10, h, k 13, n, k 16, k, m 20 a,b 1, a, f 3 2
5 a, h 7 b, h 12, f, m 8, h, m 10, h, k 13, n, k 16, k, m 20 a,b 1, a, f 3, a,h 7 3
6 f, m 8 b, h 12, h, m 10, h, k 13, n, k 16, k, m 20 a,b 1, a, f 3, a,h 7, f,m 8 4
7 h, m 10 b, h 12, h, k 13, n, k 16, k, m 20 a,b 1, a, f 3, a,h 7, f,m 8 4
8 b, h 12 h, k 13, n, k 16, k, m 20 a,b 1, a, f 3, a,h 7, f,m 8 4
9 h, k 13 n, k 16, k, m 20 a,b 1, a, f 3, a,h 7, f,m 8, h,k 13 5
10 n, k 16 k, m 20 a,b 1, a, f 3, a,h 7, f,m 8, h,k 13, n, k 16 6
5.4. BÀI TOÁN TÌM CÂY KHUNG CỰC TIỂU
5.4.2. Bài toán tìm cây khung cực tiểu
Kết quả: Cây khung cực tiểu T = (V1, F, c 1 ) tìm được có c(T)=48.

3 8
f m
a
7
1 n
h
b 13 k 16
5.5. BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT

1. Bài toán tìm đường đi ngắn nhất


2. Thuật toán DIJKSTRA
5.5. BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
5.5.1. Bài toán tìm đường đi ngắn nhất
- Cho đồ thị có hướng có trọng số G= (V, E, c). Ta định nghĩa chi phí của
đường đi p: n 0 → n1→ n 2 → ⋯→
k−1
n k−1 → n k với n i ∈ V, i = 0, 𝑘 như sau:
c( p) =  c(ni , ni+1 ).
i=0
- Ví dụ: Cho đồ thị có hướng có trọng số G2 = (V2, E2, c 2 ) đã định nghĩa
trước đây (biểu diễn bằng sơ đồ): 2

4 8
f m
Một số đường đi trong G2 và chi phí của đường đi: a
5 10
p 1 : n → k → m có c(p 1 ) = 22 1
h
2 n
1
p2 : a → f → m có c = 12 b 3 k 20

p 3 : a → h → m có c p 3 = 15
p 4 : a → h → k → m có c(p 4 ) = 10
p 5 : a → b → h → m có c(p 5 ) = 12
p 6 : a → b → h → k → m có c(p 6 ) = 7
5.5. BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
1. Bài toán tìm đường đi ngắn nhất
-Như vậy, trong một đồ thị có hướng có trọng số Gđã cho, từ đỉnh này
đến đỉnh khác có thể có nhiều đường đi và mỗi đường đi có thể có chi phí
khác nhau.
- Vấn đề đặt ra: Trong số tất cả các đường đi từ đỉnh này đến đỉnh kia trong
một đồ thị có hướng có trọng số Gđã cho, hãy tìm đường đi có chi phí cực
tiểu (đường đi ngắn nhất)?

- Bài toán tìm đường đi ngắn nhất:


Cho đồ thị có hướng có trọng số G= (V, E, c). Hãy tìm đường đi ngắn
nhất từ đỉnh n 0 ∈ Vđến mỗi đỉnh còn lại trong G.

- Có một số thuật toán cho phép giải quyết bài toán này.
5.5. BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
5.5.2. Thuật toán DIJKSTRA
- Ý tưởng:
+ Sử dụng hàm d(n) là chi phí cực tiểu của đường đi trong số các đường
đi đã biết từ đỉnh n 0 đến đỉnh n. Hàm d(n) được định nghĩa như sau:
d( n 0 ) = 0

d( m) = d( n) + c(n, m) với m ∈ T + (n)
+ Sử dụng hàm t(n) là đỉnh thuộc T − (n) sẽ nằm trong đường đi từ đỉnh
n 0 đến đỉnh n (t(n) được dùng để xây dựng đường đi kết quả).
+ Chọn lần lượt các đỉnh n (trong số các đỉnh chưa xét) theo thứ tự tăng
dần của d(n) để xét.
+ Trong quá trình tìm kiếm, tại mỗi thời điểm, với mỗi đỉnh n ∈ V ta ghi
nhận hai thông tin tạm thời d( n) và t(n) (sẽ trở thành thông tin chính thức
khi kết thúc quá trình tìm kiếm). Hai thông tin này được cập nhật lại sau khi
có đỉnh được xét, đồng thời phát hiện có đường đi mới “ngắn hơn” các
đường đi đã biết từ đỉnh n 0 đến đỉnh n.
5.5. BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
5.5.2. Thuật toán DIJKSTRA
- Thuật toán DIJKSTRA:
+ Vào: Đồ thị có hướng có trọng số G = (V, E,c) (trọng số không âm, trong đó
c m, n = ∞ nếu (m, n) ∉ E) và đỉnh xuất phát n 0 ∈ V.
+ Ra: Đường đi p từ n 0 đến mỗi đỉnh còn lại của V (nếu có) sao cho c(p) cựctiểu.
{1 V∗ = V\{n0};d n 0 = 0;
for each n ∈ V∗ do{2 d(n)=c(n0,n); t n = n 0 ; 2}
while V∗ ≠ ∅
{3 chọn n ∈ V∗ sao cho d n cực tiểu;
V∗ = V∗\{n};
for each m ∈ V∗ do
if d m > d n + c(n, m) //d(m) là thông tin cũ
{4 d(m)=d(n)+c(n,m); t m =n; 4} //cập nhật lại d(m), t m
3}
for each n ∈ V\{n0} do
if (d(n) = ∞) printf "Không có đường đi từ n 0 đến", n ;
else printf p n 0 , n , c(p) ;
1}
5.5. BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
5.5.2. Thuật toán DIJKSTRA
- Ví dụ: Cho đồ thị có hướng có trọng số G2 = (V2, E2, c 2 ) đã định nghĩa
trước đây (biểu diễn bằng sơ đồ): 2

4 8
a f m
5 10
1
h
2 n
1
b 3 k 20

Hãy tìm đường đi ngắn nhất từ đỉnh a ∈ V đến mỗi đỉnh còn lại trong G.
5.5. BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT

5.5.2. Thuật toán DIJKSTRA


* Mô tả quá trình tìm đường đi ngắn nhất từ đỉnh a ∈ V đến mỗi đỉnh còn
lại trong G: Bước Đỉnh V*
Kết quả: được
chọn
+ p 1 : a → b có c(p 1 ) = 1 1 b1, a f4, a h5, a m∞, a n∞, a k∞, a
+ p 2 : a → b → h có c (p 2 ) = 2 2 b1, a f3, b h2, b m∞, a n∞, a k∞, a
+ p 3 : a → b → f có c (p 3 ) = 3
3 h2, b f3, b m12, h n∞, a k5, h
+ p 4 : a → b → h → k có c(p 4 ) = 5
4 f3, b m11, f n∞, a k5, h
+ p 5 : a → b → h → k → m c ó c (p 5 ) = 7
5 k5, h m7 , k n∞, a
+ Không có đường đi từ a đến n.
6 m7, k n∞, a
7 n∞, a
5.5. BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
ĐỒ THỊ
Bài tập:
1. Cho đồ thị vô hướng có trọng số G= (V, E, c), trong đó:
+ V = {n, h, m, l, k}
+ E = { (k, n) , (k, m) ,(k, h), (k, l) ,(n, m), (l, n), (h, m), (h, l), (l, m), (n, h) }
+ hàm chi phí c: E → R đươc định nghĩa như sau:
c( k, n) = 1, c(k, m) = 2, c(k, h) = 5, c(k, l)= 10, c (n, m)= 3, c(l, n)= 20, c( h,
m) = 6, c(h, l) = 12, c (l, m) = 15, c (n, h)=8.
a. Biểu diễn Gbằng sơ đồ, ma trận kề, ma trận trọng số, danh sách cạnh, danh sách
kề sử dụng danh sách liên kết đơn.
b. Tìm tập hợp các đỉnh kề, bậc của mỗi đỉnh trong G.
c.Cho ví dụ 5 đường đi (kèm theo chi phí), 3 chu trình trong G; cho ví dụ 2 đồ thị
con của G (biểu diễn bằng sơ đồ); G là đồ thị gì: đồ thị Euler, đồ thị nửa Euler, đồ thị
Hamilton, đồ thị nửa Hamilton; cho biết tính liên thông của G.
d. Cho ví dụ 4 cây khung của Gvà giá của những cây khung này.
e. Hãy mô tả quá trình tìm cây khung cực tiểu của G theo thuật toán KRUSKALvà
biểu diễn cây khung cực tiểu tìm được bằng sơ đồ kèm theo giá của nó.
ĐỒ THỊ
Bài tập:
2. Cho đồ thị có hướng có trọng số G= (V, E, c), trongđó:
+ V = {a, b, m, n, l, k}
+ E = { (a, b) , (m, a), (m, l), (n, a) , (n, b), (l, a), (l, n), (k, l),(k, n), (k, b)}
+ hàm chi phí c: E → R đươc định nghĩa như sau:
c ( a, b)= 2, c (m, a) = 1, c (m, l) = 1, c (n, a) = 10, c (n, b) = 2, c (l, a) = 1,
c ( l, n) = 2, c (k, l) = 2, c (k, n) = 5, c (k, b) = 10.
a. Biểu diễn G bằng sơ đồ, ma trận kề, ma trận trọng số, danh sách cạnh, danh sách
kề sử dụng danh sách liên kết đơn.
b. Tìm tập hợp các đỉnh kề, bán bậc ra, bán bậc vào của mỗi đỉnh trong G.
c. Cho ví dụ 4 đường đi (kèm theo chi phí) trong G; cho ví dụ 2 đồ thị con của G
(biểu diễn bằng sơ đồ); cho biết tính liên thông của G; G có phải là đồ thị nửa Euler
hay đồ thị nửa Hamilton hay không; trong G có chu trình không?
d. Hãy mô tả quá trình tìm đường đi ngắn nhất từ đỉnh k đến mỗi đỉnh còn lại
trong G theo thuật toán DIJKSTRA và biểu diễn các đường đi tìm được (nếu có)
kèm theo chi phí của đường đi.
ĐỒ THỊ
Bài tập:
3. Cho đồ thị có hướng có trọng số G= (V, E, c), trongđó:
+ V = {m, n, l, h, k, b, a}
+ E = { (m, a), m, n), (m, l), (m, h), (m, k), (h, l), (h, b), (k, n), (k, h), (k, b), (b, l) , (b, a)}
+ hàm chi phí c: E → R đươc định nghĩa như sau:
c( m, a) = 15, c(m, n) = 5, c(m, l) = 10, c(m, h) = 1, c(m, k) = 1, c(h, l) = 5,
c( h, b) = 2, c( k, n) = 1, c (k, h) = 2, c (k, b) = 1, c (b, l) = 2, c (b, a) = 3.
a. Biểu diễn G bằng sơ đồ, ma trận kề, ma trận trọng số, danh sách cạnh, danh sách
kề sử dụng danh sách liên kết đơn.
b. Tìm tập hợp các đỉnh kề, bán bậc ra, bán bậc vào của mỗi đỉnh trong G.
c.Cho ví dụ 3 đường đi (kèm theo chi phí) trong G; cho ví dụ 2 đồ thị con của G
(biểu diễn bằng sơ đồ); cho biết tính liên thông của G; Gc ó phải là đồ thị nửa Euler
hay đồ thị nửa Hamilton hay không; trong G có chu trình không?
d. Hãy mô tả quá trình tìm đường đi ngắn nhất từ đỉnh m đến mỗi đỉnh còn lại trong
Gtheo thuật toán DIJKSTRA và biểu diễn các đường đi tìm được (nếu có) kèm theo
chi phí của đường đi.

You might also like