Download as pdf or txt
Download as pdf or txt
You are on page 1of 64

TOÁN RỜI RẠC

CHƯƠNG 5.

ĐỒ THỊ

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


CHƯƠNG 5. ĐỒ THỊ
5.1. Một số định nghĩa và khái niệm
5.1.1. Đồ thị vô hướng
5.1.2. Đồ thị có hướng
5.1.3. Đồ thị có trọng số
5.2. Biểu diễn đồ thi trong máy tính điện tử
5.2.1. Biểu diễn bằng ma trận
5.2.2. Biểu diễn bằng danh sách
5.3. Đồ thi Euler và đồ thị Hamilton
5.3.1. Đồ thị Euler
5.3.2. Đồ thị Hamilton
5.4. Bài toán tìm cây khung cực tiểu
5.4.1. Cây và cây khung
5.4.2. Bài toán tìm cây khung cực tiểu

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


CHƯƠNG 5. ĐỒ THỊ
5.5. Bài toán tìm đường đi ngắn nhất
5.5.1. Bài toán
5.5.2. Thuật toán DIJKSTRA

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.1. Đồ thị vô hướng
5.1.2. Đồ thị có hướng
5.1.3. Đồ thị có trọng số

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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ị.
ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955
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ủa G);
+ 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 G có 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ủa G 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 }

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 n0 ∈ V đến đỉnh nk ∈ V là một dãy liên tiếp các
cạnh {n0 , n1 }, {n1 , n2 }, … , {nk−1 , nk }, trong đó n0 được gọi là đỉnh đầu và
nk được gọi là đỉnh cuối của đường đi p.
Ký hiệu: p: n0 → n1 → n2 → ⋯ → nk−1 → nk hay p(n0 , nk ).
+ 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.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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: p1 : n → k có độ dài 1
Từ a đến n có đường đi và từ n đến a cũng có đường đi:
p2 : a → b → f → m → h → k → n có độ dài 6
p3 : n → k → h → m → f → b → a có độ dài 6
Từ a đến n có nhiều đường đi:
p4 : a → f → m → k → n có độ dài 4 f
a m
p5 : a → b → h → k → n có độ dài 4
n
p6 : a → h → k → n có độ dài 3 h
b k
Trong đường đi có cạnh xuất hiện nhiều lần:
p7 : a → b → h → a → b → f → a → b → h có độ dài 8
+ Chu trình: p8 : b → f → a → b có độ dài 3
p9 : h → m → f → a → h có độ dài 4
p10 : k → h → b → f → m → k có độ dài 5

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 .
+ G là đồ 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 ′ ⊆ V hoặ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 của G.
+ Tức là: V = V1 ∪ V2 ∪ ⋯ ∪ Vn và E = E1 ∪ E2 ∪ ⋯ ∪ En
với G1 = V1 , E1 , G2 = (V2 , E2 ),…, Gn = (Vn , En ) 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 , En ) được gọi
là thành phần liên thông của G.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 , E1 ) 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 , E1 ) không có tính liên thông và G1 = (V1 , E1 ) có 3
thành phần liên thông. a f m
G1 h n
b k
G2 = (V2 , E2 ) với V2 = {b, h, m, k}
và E2 = { b, h , h, m , h, k , k, m } m

Rõ ràng G2 = (V2 , E2 ) là đồ thị liên thông. G2 b h


k

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 V tương ứng là 1 đỉnh của G);
+ 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)}

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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V

( n ) 
nV
 ( n)  E .
deg 

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 ;
T+ f = m ; T − f = a, b ; T + h = m, k ; T − h = a, b ;
T + m = ∅; T − m = f, h, k ; T + n = k ; T − n = ∅;
T + k = {m}; T − k = {h, n}.

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


deg + f = 1; deg − f = 2; deg + h = 2; deg − h = 2;
deg + m = 0; deg − m = 3; deg + n = 1; deg − n = 0;
deg + k = 1; deg − k =2

a f m
h n
b k

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 n0 ∈ V đến đỉnh nk ∈ V là một dãy liên tiếp các
cạnh (n0 , n1 ), (n1 , n2 ), … , (nk−1 , nk ), trong đó n0 được gọi là đỉnh đầu và
nk được gọi là đỉnh cuối của đường đi p.
Ký hiệu: p: n0 → n1 → n2 → ⋯ → nk−1 → nk hay p(n0 , nk ).
+ 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.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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ó:
+ p1 : 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
+ p2 : 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:
p3 : a → f → m có độ dài 2
p4 : a → h → m có độ dài 2 a f m
p5 : a → h → k → m có độ dài 3 h n
p6 : a → b → h → m có độ dài 3 b k
p7 : 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.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 .
+ G là đồ thị liên thông mạnh (hay ta nói G có 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.
+ G là đồ thị liên thông yếu (hay ta nói G có tính liên thông yếu) khi và chỉ
khi đồ thị vô hướng tương ứng với G là đồ thị liên thông.
(Đồ thị có hướng G như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 ′ ⊆ V hoặ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.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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ó:
+ G khô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 , E1 ) 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 , E1 ) không có tính liên thông mạnh, đồng thời không
có tính liên thông yếu. f
a m
G1
h n
b k
G2 = (V2 , E2 ) 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 , E2 ) là đồ thị liên thông mạnh. m
a

G2 h
b k

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.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ủa G);
+ 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).

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


5.1. MỘT SỐ ĐỊNH NGHĨA VÀ KHÁI NIỆM
5.1.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 , c1 ), 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í c1 : 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 , c1 ) bằng sơ đồ: 4

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

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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, c2 ), 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í c2 : 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 , c2 ) bằng sơ đồ:
2

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

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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
5.2.2. Biểu diễn bằng danh sách

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 , n2 , … , nk ( 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 ni , nj ∉ E
aij = ቐ
1 nếu ni , nj ∈ E
+ Cho đồ thị có hướng G = V, E với V = n1 , n2 , … , nk ( 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 (ni , nj ) ∉ E
aij = ൝
1 nếu (ni , nj ) ∈ E

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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
- 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 ni ;
• 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 ni ;
• Tổng các phần tử của cột j bằng bán bậc vào của đỉnh nj .

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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
𝑓 1 1 0 0 1 0 0 a f m
ℎ 1 1 0 0 1 0 1 h n
𝑚 0 0 1 1 0 0 1 b k
𝑛 0 0 0 0 0 0 1
𝑘 0 0 0 1 1 1 0
A

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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
𝑓 0 0 0 0 1 0 0 a f m
ℎ 0 0 0 0 1 0 1 h n
𝑚 0 0 0 0 0 0 0 b k
𝑛 0 0 0 0 0 0 1
𝑘 0 0 0 0 1 0 0
B

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 , n2 , … , nk
( V = k). Lúc đó ma trận trọng số W = wij kxk biểu diễn G = V, E, c
được định nghĩa:
α nếu ni , nj ∉ E
wij = ቐ , với α thường được chọn là 0, +∞, −∞.
c(ni , nj ) nếu ni , nj ∈ E
+ Cho đồ thị có hướng có trọng số G = V, E, c với V = n1 , n2 , … , nk
( V = k). Lúc đó ma trận trọng số W = wij kxk biểu diễn G = V, E, c
được định nghĩa:
α nếu (ni , nj ) ∉ E
wij = ൝ , với α thường được chọn là 0, +∞, −∞.
c ni , nj nếu (ni , nj ) ∈ E

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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
𝑏 1 0 4 12 0 0 0 4
𝑓 3 4 0 0 8 0 0 8
3 f
ℎ 7 12 0 0 10 0 13 a m
7 10
𝑚 0 0 8 10 0 0 20 1
h
20 n
12
𝑛 0 0 0 0 0 0 16 b 13 k 16
𝑘 0 0 0 13 20 16 0
W1

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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).

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 f a 0 1 1 1 0 0 0
a h 𝑏 1 0 1 1 0 0 0
b f f 𝑓
a m 1 1 0 0 1 0 0
b h ℎ
h n 1 1 0 0 1 0 1
f m b k 𝑚 0 0 1 1 0 0 1
h m
𝑛 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
ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955
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 f 4 𝑎 𝑏 𝑓 ℎ 𝑚 𝑛 𝑘
a ∞ 1 4 5 ∞ ∞ ∞
a h 5 2 𝑏 ∞ ∞ 2 1 ∞ ∞ ∞
b f 2
8 𝑓 ∞ ∞ ∞ ∞ 8 ∞ ∞
b h 1 a
4 f m ℎ ∞ ∞ ∞ ∞ 10 ∞ 3
f m 8 5 10
2 n
1
h 𝑚 ∞ ∞ ∞ ∞ ∞ ∞ ∞
h m 10 b
1
k 20
3 𝑛 ∞ ∞ ∞ ∞ ∞ ∞ 20
h k 3
n k 20 𝑘 ∞ ∞ ∞ ∞ 2 ∞ ∞
k m 2
Ma trận trọng số W2

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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
kề:
+ Với mỗi đỉnh n ∈ V ta 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 ∈ V sẽ 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 G là đồ 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.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 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

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


5.3. ĐỒ THỊ EULER VÀ ĐỒ THỊ HAMILTON
5.3.1. Đồ thị Euler
5.3.2. Đồ thị Hamilton

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


5.3. ĐỒ THỊ EULER VÀ ĐỒ THỊ HAMILTON
5.3.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 G có chu trình Euler.
- G được gọi là đồ thị nửa Euler khi và chỉ khi G có đường đi Euler.
- Lưu ý: Rõ ràng nếu G là đồ thị Euler thì G cũng là đồ thị nửa Euler.
- Định lý 1 (Euler). Đồ thị vô hướng liên thông G là đồ 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 G là đồ thị nửa Euler khi và chỉ khi
G có 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 G là đồ thị Euler khi và chỉ
khi ∀n ∈ V, deg + n = deg − n (V là tập hợp đỉnh của G).

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 p1 : 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 p2 : 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 p1 : 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 p2 : 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.
ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955
5.3. ĐỒ THỊ EULER VÀ ĐỒ THỊ HAMILTON
5.3.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 G mà 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 G mà 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 G là đồ thị Hamilton thì G cũng là đồ thị nửa Hamilton.
- Định lý 3 (Dirak). Đồ thị vô hướng G có nhiều hơn 2 đỉnh và mỗi đỉnh có
n
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 G là đồ thị Hamilton nếu
+ n − n
∀n ∈ V, deg n ≥ và deg n ≥ (V là tập hợp đỉnh của G, V = n).
2 2

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 p1 : 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 p2 : 2 → 1 → 4 → 3
+ G3 không phải là đồ thị Hamilton, đồng thời không phải là đồ thị nửa
Hamilton.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 p1 : 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 p1 : 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

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


5.4. BÀI TOÁN TÌM CÂY KHUNG CỰC TIỂU
5.4.1. Cây và cây khung
5.4.2. Bài toán và phương pháp giải

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 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
b 6 a
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.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 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ơ đồ):
a f 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

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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, c1 ) đã
đị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 10 n h
b 12 k 16 1 h b 12
13 b 12
13 k 16 13 k 16

T1 có c T1 = 53 T2 có c T2 = 56 T3 có c T3 = 59

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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
- 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.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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}

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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, c1 ) đã
định nghĩa trước đây (biểu diễn bằng sơ đồ): 4

3 8
a f 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, c1 ) 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, c1 ) cần tìm có F = ∅ và các
đỉnh V1 :
a f m
h n
b k

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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, c1 ) 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

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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, c1 ) tìm được có c(T)=48.

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

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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
5.5.2. Thuật toán DIJKSTRA

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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: n0 → n1 → n2 → ⋯ → nk−1 → nk với ni ∈ V, i = 0, 𝑘 như sau:
k 1
c( p)   c(ni , ni 1 ).
i 0
- Ví dụ: Cho đồ thị có hướng có trọng số G2 = (V2 , E2, c2 ) đã đị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
p1 : n → k → m có c(p1 ) = 22 1
h
2 n
1
p2 : a → f → m có c p2 = 12 b 3 k 20

p3 : a → h → m có c p3 = 15
p4 : a → h → k → m có c(p4 ) = 10
p5 : a → b → h → m có c(p5 ) = 12
p6 : a → b → h → k → m có c(p6 ) = 7

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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
- 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 n0 ∈ 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.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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 n0 đến đỉnh n. Hàm d(n) được định nghĩa như sau:
d n0 = 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
n0 đế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 n0 đến đỉnh n.
ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955
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 n0 ∈ V.
+ Ra: Đường đi p từ n0 đến mỗi đỉnh còn lại của V (nếu có) sao cho c(p) cực tiểu.
{1 V ∗ = V\{n0 }; d n0 = 0;
for each n ∈ V ∗ do {2 d(n)=c(n0 ,n); t n = n0 ; 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ừ n0 đến", n ;
else printf p n0 , n , c(p) ;
1}

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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, c2 ) đã đị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.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


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:
Kết quả: Bước Đỉnh V*
được
+ p1 : a → b có c(p1 ) = 1 chọn

+ p2 : a → b → h có c p2 = 2 1 b1, a f4, a h5, a m∞, a n∞, a k∞, a


+ p3 : a → b → f có c p3 = 3 2 b1, a f3, b h2, b m∞, a n∞, a k∞, a
+ p4 : a → b → h → k có c(p4 ) = 5 3 h2, b f3, b m12, h n∞, a k5, h
+ p5 : a → b → h → k → m có c p5 = 7 4 f3 b m11, f n∞, a k5, h
,
+ Không có đường đi từ a đến n. 5 k m n
5, h 7, k ∞, a
6 m7, k n∞, a
7 n∞, a

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955


ĐỒ 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 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ậ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 G và 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ó.
ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955
ĐỒ THỊ
Bài tập:
2. Cho đồ thị vô hướng có trọng số G = (V, E, c), trong đó:
+ V = {a, b, h, m, l, k}
+ E = { a, b , a, m , a, h , b, m , b, h , l, m , h, m , h, k , l, k , k, m }
+ hàm chi phí c: E → R đươc định nghĩa như sau:
c a, b = 2, c a, m = 15, c a, h = 2, c b, m = 1, c b, h = 1, c l, m = 5,
c h, m = 6, c h, k = 10, c l, k = 16, c k, m = 7.
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ậc của mỗi đỉnh trong G.
c. Cho ví dụ 4 đường đi (kèm theo chi phí), 2 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ụ 3 cây khung của G và 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ó.
ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955
ĐỒ THỊ
Bài tập:
3. 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ía của đường đi.
ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955
ĐỒ THỊ
Bài tập:
4. 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; 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 m đế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ía của đường đi.

ThS.Trần Đình Sơn – Email: tdson@vku.udn.vn– Mobile: 0903591955

You might also like