Tải bản đầy đủ (.pdf) (56 trang)

Tìm đường đi ngắn nhất bằng thuật toán dijkstra và xây dựng chương trình (2014)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.32 MB, 56 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2
KHOA CÔNG NGHỆ THÔNG TIN
---------------------------------

PHAN VĂN THẢO

TÌM ĐƯỜNG ĐI NGẮN NHẤT BẰNG
THUẬT TOÁN DIJKSTRA
VÀ XÂY DỰNG CHƯƠNG TRÌNH

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC
Chuyên ngành: Tin học

Người hướng dẫn khoa học
Th.S. Lưu Thị Bích Hương

Hà Nội - 2014


LỜI CẢM ƠN
Lời đầu tiên em xin chân thành cảm ơn sự hướng dẫn tận tình của cô
giáo Th.S Lưu Thị Bích Hương, khoa Công nghệ thông tin, trường Đại học sư
phạm Hà Nội 2.
Em cũng xin chân thành cảm ơn các thầy, cô giáo trong khoa Công
nghệ thông tin, cũng như các thầy, cô giáo trong trường đã giảng dạy và giúp
đỡ em trong 4 năm học vừa qua. Chính các thầy, cô giáo đã xây dựng cho
chúng em những kiến thức nền tảng và kiến thức chuyên môn để em có thể
hoàn thành khóa luận tốt nghiệp và chuẩn bị cho những công việc của mình
sau này.
Cuối cùng em xin bày tỏ lòng biết ơn tới gia đình và bạn bè đã giúp đỡ
động viên em rất nhiều trong suốt quá trình học tập để em có thể thực hiện tốt


khóa luận này.
Tuy đã có những cố gắng nhất định nhưng do thời gian và trình độ có
hạn nên chắc chắn khóa luận này còn nhiều thiếu sót và hạn chế. Kính mong
nhận được sự góp ý của thầy, cô giáo và các bạn.

Hà Nội, tháng 05 năm 2014
Sinh viên

Phan Văn Thảo


LỜI CAM ĐOAN
Tên em là: Phan Văn Thảo
Sinh viên lớp: K36 – Tin học, khoa Công nghệ thông tin, trường Đại
học sư phạm Hà Nội 2.
Em xin cam đoan:
1. Đề tài “Tìm đường đi ngắn nhất bằng thuật toán Dijkstra và xây
dựng chương trình” là sự nghiên cứu của riêng em, dưới sự hướng dẫn của
cô giáo Th.S Lưu Thị Bích Hương.
2. Khóa luận hoàn toàn không sao chép của tác giả nào khác.
Nếu sai em xin hoàn toàn chiu trách nhiệm.

Hà Nội, tháng 05 năm 2014
Người cam đoan

Phan Văn Thảo


MỤC LỤC
MỞ ĐẦU ....................................................................................................... 1

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT ............................................................... 4
1.1. Định nghĩa ......................................................................................... 4
1.1.1. Định nghĩa đồ thị ......................................................................... 4
1.1.2. Phân loại đồ thị ............................................................................ 5
1.1.3. Các thuật ngữ cơ bản.................................................................... 8
1.2. Đường đi, chu trình, đồ thị liên thông .............................................. 11
1.3. Ma trận kề, ma trận trọng số............................................................. 15
1.4. Một số dạng đồ thị đặc biệt .............................................................. 18
1.4.1. Đồ thị đầy đủ ............................................................................. 18
1.4.2. Đồ thị vòng ................................................................................ 18
1.4.3. Đồ thị bánh xe............................................................................ 19
1.4.4. Đồ thị lập phương ...................................................................... 19
1.4.5. Đồ thị phân đôi (đồ thị hai phe) ................................................. 20
1.5. Ứng dụng của đồ thị đặc biệt............................................................ 20
1.5.2. Các mạng cục bộ (LAN) ............................................................ 20
1.5.3. Xử lý song song ......................................................................... 21
CHƯƠNG 2: BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤT ................................ 24
2.1. Khái niệm ........................................................................................ 24
2.2. Đường đi ngắn nhất xuất phát từ một đỉnh ....................................... 26
2.3. Thuật toán Dijkstra .......................................................................... 27
2.3.1

Mô tả thuật toán ......................................................................... 27

2.3.2

Nội dung thuật toán.................................................................... 32

2.3.3


Lưu đồ thuật toán ....................................................................... 33

2.3.4

Độ phức tạp của thuật toán ......................................................... 34

CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH............................................ 35
3.1

Phát biểu bài toán ............................................................................. 35

3.2

Thiết kế chương trình ....................................................................... 36

3.2.1

Thiết kế cơ sở dữ liệu................................................................. 36


3.2.2

Thiết kế giao diện ...................................................................... 39

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .................................................... 46
TÀI LIỆU THAM KHẢO ............................................................................ 48


DANH MỤC HÌNH VẼ
Hình 1.1. Ví dụ đồ thị ..................................................................................... 4

Hình 1.2. Sơ đồ mạng máy tính ...................................................................... 5
Hình 1.3. Sơ đồ mạng máy tính với kênh đa thoại .......................................... 6
Hình 1.4. Sơ đồ mạng máy tính với kênh thông báo ....................................... 6
Hình 1.5. Mạng máy tính với các kênh thoại một chiều .................................. 7
Hình 1.6. Đồ thị vô hướng .............................................................................. 9
Hình 1.7. Đồ thị có hướng ............................................................................ 10
Hình 1.8. Đường đi trên đồ thị...................................................................... 11
Hình 1.9. Đồ thị liên thông G và đồ thị H gồm 3 thành phần liên thông H1, H2,
H3 ................................................................................................................. 13
Hình 1.10. Đồ thị liên thông mạnh G và đồ thị liên thông yếu H .................. 14
Hình 1.11. Đồ thị vô hướng G và đồ thị có hướng G1 ................................... 15
Hình 1.12. Đồ thị đầy đủ .............................................................................. 18
Hình 1.13. Đồ thị vòng ................................................................................. 18
Hình 1.14. Đồ thị bánh xe ............................................................................ 19
Hình 1.15. Đồ thị lập phương ....................................................................... 19
Hình 1.16. Đồ thị phân đôi ........................................................................... 20
Hình 1.17. Các cấu trúc mạng ...................................................................... 21
Hình 1.18. Mạng một chiều .......................................................................... 22
Hình 1.19. Mạng kiểu lưới ........................................................................... 23
Hình 1.20. Mạng kiểu siêu khối.................................................................... 23
Hình 2.1. Đồ thị vô hướng G ........................................................................ 29


Hình 2.2. Đồ thị có hướng H ........................................................................ 31
Hình 2.3. Lưu đồ thuật toán Dijkstra ............................................................ 33
Hình 3.1. Mối quan hệ giữa cơ sở dữ liệu, danh sách liên kết và ma trận trọng
số ................................................................................................................. 37
Hình 3.2. Form giao diện chính .................................................................... 39
Hình 3.3. Form giao diện với đồ thị vô hướng .............................................. 40
Hình 3.4. Form giao diện với đồ thị có hướng .............................................. 41

Hình 3.5. Form vùng hiển thị đồ thị.............................................................. 42
Hình 3.6. Form tính toán đường đi ............................................................... 43
Hình 3.7. Form chú thích và kết quả đường đi .............................................. 44
Hình 3.8. Form lưu dữ liệu ........................................................................... 45


DANH MỤC CÁC BẢNG BIỂU
Bảng 2.1. Bảng kết quả tính toán đồ thị vô hướng G .................................... 29
Bảng 2.2. Bảng kết quả tính toán đồ thị có hướng H .................................... 31


MỞ ĐẦU
1. Mục đích, lý do chọn đề tài
1.1. Lý do chọn đề tài
Trong những năm gần đây, các phương pháp tối ưu hoá ngày càng
được áp dụng sâu rộng và hiệu quả vào các ngành giao thông vận tải, mạng
viễn thông, kinh tế, kỹ thuật, công nghệ thông tin và các ngành khoa học
khác. Các phương pháp tối ưu là công cụ đắc lực giúp người làm quyết định
có những giải pháp tốt nhất về định lượng và định tính.
Một trong những lớp bài toán tối ưu đầu tiên được nghiên cứu là thuật
toán giải bài toán tìm đường đi ngắn nhất có trọng số xác định. Bài toán tìm
đường đi ngắn nhất là vấn đề quan trọng trong lý thuyết đồ thị, nó đã được
nghiên cứu từ lâu và có nhiều ứng dụng trong nhiều ngành khoa học nói
chung, khoa học máy tính và hệ thống thông tin nói riêng như giải thuật
Dijkstra đã được phát triển để tìm đường đi ngắn nhất và ngày nay đã được
nhiều nhà nghiên cứu nhằm cải tiến xây dựng giải thuật giải bài toán tìm
đường đi ngắn nhất với dữ liệu mờ dạng khoảng. Bài toán tìm đường đi ngắn
nhất cũng được phát triển rộng rãi và trở thành một chuyên ngành toán học từ
những năm 1950. Giải đáp những câu hỏi đặt ra mà tìm đường đi ngắn nhất
với các cạnh có trọng số xác định.

Thuật toán Dijkstra là một thuật toán rất phổ biến vì tính hiệu quả của
nó. Nó tìm ra đường đi ngắn nhất với chi phí nhỏ nhất. Vì thế nó có một ý
nghĩa to lớn trong thực tế.
Chính vì vậy, sau một thời gian tìm hiểu và học tập cùng với sự hướng
dẫn tận tình của cô giáo ThS. Lưu Thị Bích Hương em quyết định chọn đề tài:
“Tìm đường đi ngắn nhất bằng thuật toán Dijkstra và xây dựng chương
trình” làm khóa luận của mình.

1


1.2. Mục đích
Mục đích của khóa luận này là nghiên cứu thuật toán Dijkstra để tìm
đường đi ngắn nhất.
2. Nhiệm vụ
Khóa luận “Tìm đường đi ngắn nhất bằng thuật toán Dijkstra và xây
dựng chương trình” nghiên cứu với các nhiệm vụ chính sau:
- Tìm hiểu bài toán đường đi ngắn nhất.
- Tìm hiểu thuật toán Dijkstra áp dụng trong bài toán tìm đường đi ngắn
nhất từ một đỉnh đến tất cả các đỉnh.
- Xây dựng chương trình mô phỏng.
3. Phương pháp nghiên cứu
a. Phương pháp nghiên cứu lý luận
Nghiên cứu qua việc đọc sách, báo và các tài liệu liên quan nhằm xây
dựng cơ sở lý thuyết của khóa luận và các biện pháp cần thiết để giải quyết
các vấn đề của khóa luận.
b. Phương pháp chuyên gia
Tham khảo ý kiến của các chuyên gia để có thể thiết kế chương trình
phù hợp với yêu cầu thực tiễn. Nội dung xử lý nhanh đáp ứng được yêu cầu
ngày càng cao của người sử dụng.

c. Phương pháp thực nghiệm
Thông qua quan sát thực tế, yêu cầu của cơ sở, những lý luận được
nghiên cứu và kết quả đạt được qua những phương pháp trên.
4. Đối tượng, phạm vi nghiên cứu
- Đối tượng nghiên cứu của khóa luận là thuật toán Dijkstra

2


- Trên cơ sở thuật toán Dijkstra, khóa luận xây dựng chương trình tìm
đường đi ngắn nhất từ một đỉnh đến tất cả các đỉnh trên một đồ thị theo một
cách tuần tự.
5. Ý nghĩa khoa học và thực tiễn
Khóa luận “Tìm đường đi ngắn nhất bằng thuật toán Dijkstra và xây
dựng chương trình” giúp chúng ta hiểu thuật toán Dijkstra và bài toán tìm
đường đi ngắn nhất từ một đỉnh đến tất cả các đỉnh còn lại trong một đồ thị,
qua đó mô phỏng chương trình một cách cụ thể giúp chúng ta hiểu rõ hơn
thuật toán và có thể xây dựng những chương trình ứng dụng cụ thể từ thuật
toán Dijkstra.
6. Cấu trúc của khóa luận
Ngoài phần mở đầu và kết luận, khóa luận gồm có 3 chương:
Chương 1: Cơ sở lý thuyết
Chương 2: Bài toán đường đi ngắn nhất
Chương 3: Xây dựng chương trình

3


CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1. Định nghĩa

1.1.1. Định nghĩa đồ thị
 Đồ thị là một cấu trúc rời rạc gồm các đỉnh và các cạnh (vô hướng
hoặc có hướng) nối các đỉnh đó.
 Định nghĩa 1: Đồ thị G là một tập hợp gồm các đỉnh và các cạnh. Ta
thường ký hiệu: G = (V, E), trong đó:
+ V: Là tập các đỉnh
+ E: Là tập các cạnh
Ví dụ 1:
1
c

a

4

b
2
V ={1, 2, 3, 4}

d

e
3

E ={a, b, c, d, e}

Hình 1.1. Ví dụ đồ thị
Trong đời sống, chúng ta thường gặp những sơ đồ, như sơ đồ tổ chức
bộ máy, sơ đồ giao thông, sơ đồ hướng dẫn thứ tự đọc các chương trong một
cuốn sách, ..., gồm những điểm biểu thị các đối tượng được xem xét (người,

tổ chức, địa danh, chương mục sách, ...) và nối một số điểm với nhau bằng
những đoạn thẳng (hoặc cong) hay những mũi tên, tượng trưng cho một quan
hệ nào đó giữa các đối tượng. Đó là những thí dụ về đồ thị.

4


1.1.2. Phân loại đồ thị
Đồ thị là một cấu trúc rời rạc bao gồm các đỉnh và các cạnh nối các
đỉnh này. Chúng ta phân biệt các loại đồ thị khác nhau bởi kiểu và số lượng
cạnh nối hai đỉnh nào đó của đồ thị. Để có thể hình dung được tại sao lại cần
đến các loại đồ thị khác nhau, chúng ta sẽ nêu ví dụ sử dụng chúng để mô tả
một mạng máy tính. Giả sử ta có một mạng gồm các máy tính và các kênh
điện thoại (gọi tắt là kênh thoại) nối các máy tính này. Chúng ta có thể biểu
diễn các vị trí đặt máy tính bởi các điểm và các kênh thoại nối chúng bởi các
đoạn nối.
Hà Tây

Đồng Nai

Hà Nội

Quảng Ngãi

An Giang

Huế

Bình Định


TPHCM

Phú Yên

Khánh Hòa

Hình 1.2. Sơ đồ mạng máy tính
Nhận thấy rằng trong mạng hình 1.2, giữa hai máy tính bất kỳ chỉ cho
phép nhiều nhất là một kênh thoại nối chúng, kênh thoại này cho phép liên lạc
cả hai chiều và không có máy tính nào lại được nối với chính nó. Sơ đồ mạng
máy tính cho trong hình 1.2 được gọi là đơn đồ thị vô hướng, vậy ta đi đến
định nghĩa sau:
Định nghĩa 2. Đơn đồ thị vô hướng G = (V, E) bao gồm V là tập đỉnh
và E là tập các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là
các cạnh.

5


Trong trường hợp giữa hai máy tính nào đó thường xuyên phải truyền
tải nhiều thông tin người ta phải nối hai máy này bởi nhiều kênh thoại. Mạng
với đa kênh thoại giữa các máy tính được cho trong hình 1.3.

Hà Tây

Đồng Nai

Huế

An Giang


Bình Định

Hà Nội
HCM

Quảng Ngãi

Phú Yên

Khánh Hòa

Hình 1.3. Sơ đồ mạng máy tính với kênh đa thoại
Định nghĩa 3. Đa đồ thị vô hướng G = (V, E) bao gồm V là tập các
đỉnh, và E là họ các cặp không có thứ tự gồm hai phần tử khác nhau của V
gọi là các cạnh. Hai cạnh e1 va e2 được gọi là cạnh lặp nếu chúng cùng tương
ứng với một cặp đỉnh.
Hà Tây

Đồng Nai

An Giang

Bình Định

Hà Nội

Quảng Ngãi

Huế


Phú Yên

Khánh Hòa

Hình 1.4. Sơ đồ mạng máy tính với kênh thông báo

6


Rõ ràng mỗi đơn đồ thị đều là đa đồ thị, nhưng không phải đa đồ thị
nào cũng là đơn đồ thị, vì trong đa đồ thị có hai hay nhiều hơn cạnh nối một
cặp đỉnh nào đó.
Trong mạng máy tính có thể có những kênh thoại nối một máy tính nào
đó với chính nó (chẳng hạn với mục đích thông báo). Mạng như vậy được cho
trong hình 1.4. Như vậy đa đồ thị không thể mô tả được mạng như vậy, bởi vì
có những khuyên (cạnh nối một đỉnh với chính nó). Trong trường hợp này
chúng ta cần sử dụng đến khái niệm giả đồ thị vô hướng, được định nghĩa như
sau:
Định nghĩa 4. Giả đồ thị vô hướng G = (V, E) bao gồm V là tập các
đỉnh, và E là họ các cặp không có thứ tự gồm hai phần tử (không nhất thiết
phải khác nhau) của V gọi là các cạnh. Cạnh e được gọi là khuyên nếu có
dạng e = (u, u).
Các kênh thoại trong mạng máy tính có thể chỉ cho phép truyền tin theo
một chiều. Chẳng hạn trong hình 1.5 máy chủ ở Hà Nội chỉ có thể nhận tin từ
các máy ở địa phương, có một số máy chỉ có thể gửi tin đi, còn các kênh thoại
cho phép truyền tin theo cả hai chiều được thay thế bởi hai cạnh có hướng
ngược chiều nhau.
Hà Tây


Đồng Nai

Hà Nội

Huế

An Giang

TPHCM
Khánh Hòa

Phú Yên

Hình 1.5. Mạng máy tính với các kênh thoại một chiều
Ta đi đến định nghĩa sau:

7

Bình Định


Định nghĩa 5. Đơn đồ thị có hướng G = (V, E) bao gồm V là tập các
đỉnh, và E là tập các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là
các cung.
Nếu trong mạng có thể có đa kênh thoại một chiều, ta sẽ phải sử dụng
đến khái niệm đa đồ thị có hướng:
Định nghĩa 6. Đa đồ thị có hướng G =(V, E) bao gồm V là tập các
đỉnh, và E là họ các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là
các cung. Hai cung e1 và e2 tương ứng với cùng một cặp đỉnh được gọi là
cung lặp.

Trong các phần tiếp theo chủ yếu chúng ta sẽ làm việc với đơn đồ thị
vô hướng và đơn đồ thị có hướng. Vì vậy, để cho ngắn gọn, ta sẽ bỏ qua tính
từ đơn mỗi khi nhắc đến chúng.
1.1.3. Các thuật ngữ cơ bản
Trong mục này chúng ta sẽ trình bày một số thuật ngữ cơ bản của lý
thuyết đồ thị. Trước tiên, ta xét các thuật ngữ mô tả các đỉnh và cạnh của đồ
thị vô hướng.
 Kề và liên thuộc
Định nghĩa 7. Hai đỉnh u và v của đồ thị có hướng G được gọi là kề
nhau nếu (u,v) là cạnh của đồ thị G. Nếu e = (u, v) là cạnh của đồ thị thì ta
nói cạnh này là cạnh liên thuộc với hai đỉnh u và v, hoặc cũng nói là cạnh e
nối đỉnh u và đỉnh v, đồng thời các đỉnh u và v sẽ được gọi là các đỉnh đầu
của cạnh (u, v).
 Bậc của đỉnh
Để có thể biết có bao nhiêu cạnh liên thuộc với một đỉnh, ta đưa vào
định nghĩa sau:
Định nghĩa 8. Ta gọi bậc của đỉnh v trong đồ thị vô hướng là số cạnh
liên thuộc với nó ta sẽ kí hiệu là deg(v).

8


b

a

c

f


d

e

g

Hình 1.6. Đồ thị vô hướng
Ví dụ 2: Xét đồ thị cho trong hình 1.6, ta có
deg(a) = 1, deg(b) = 4 , deg(c) = 4 , deg(f) = 3, deg(d) = 1 , deg(e) = 3 ,
deg(g) = 0.
Đỉnh bậc 0 gọi là đỉnh cô lập, đỉnh bậc 1 được gọi là đỉnh treo. Trong
ví dụ trên đỉnh g là đỉnh cô lập, a và d là các đỉnh treo. Bậc của đỉnh có tính
chất sau :
Định lý 1. Giả sử G = (V, E) là đồ thị vô hướng với m cạnh. Khi đó

2m 

 deg( v )
vV

Chứng minh. Rõ ràng trong mỗi cạnh e = (u, v) được tính một lần
trong deg(u) và một lần trong deg(v). Từ đó suy ra tổng tất cả các bậc của
các đỉnh bằng hai lần số cạnh.
Hệ quả. Trong đồ thị vô hướng, số đỉnh bậc lẻ (nghĩa là có bậc là số lẻ)
là một số chẵn.
Chứng minh:
Thực vậy, gọi O và U tương ứng là tập đỉnh bậc lẻ và tập đỉnh bậc chẵn
của đồ thị, ta có:

2m   deg(v)   deg(v)   deg(v)

vV

vO

9

vU


Do deg(v) là chẵn với v là đỉnh trong U nên tổng thứ hai trong vế phải
ở trên là số chẵn. Từ đó suy ra tổng thứ nhất (chính là tổng bậc của các đỉnh
bậc lẻ) cũng phải là số chẵn, do tất cả các số hạng của nó là số lẻ, nên tổng
này phải gồm một số chẵn các số hạng. Vì vậy, số đỉnh bậc lẻ phải là số chẵn.
 Kề trong đồ thị có hướng
Định nghĩa 9. Nếu e = (u, v) là cung của đồ thị có hướng G thì ta nói
hai đỉnh u và v là kề nhau, và nói cung (u, v) nối đỉnh u với đỉnh v hoặc cũng
nói cung này là đi ra khỏi đỉnh u và đi vào đỉnh v. Đỉnh u(v) sẽ được gọi là
đỉnh đầu (cuối) của cung (u, v).
 Bán bậc vào và bán bậc ra của đỉnh
Tương tự như khái niệm bậc, đối với đồ thị có hướng ta có khái niệm
bán bậc ra (vào) của một đỉnh.
Định nghĩa 10: Ta gọi bán bậc ra (vào) của đỉnh trong đồ thị có
hướng là số cung của đồ thị ra khỏi nó (đi vào nó) và ký hiệu là
deg+(v)(deg(v)).
a

b

c


d

e

Hình 1.7. Đồ thị có hướng G
Ví dụ 3. Xét đồ thị cho trong hình 1.7. Ta có
deg-(a) = 1, deg-(b) = 2, deg-(c) = 2, deg-(d) = 2, deg-(e) = 2
deg+(a) = 3, deg+(b) = 1 deg+(c) = 1, deg+(d) = 2, deg+(e) = 2
Do mỗi cung (u, v) sẽ được tính một lần trong bán bậc vào của đỉnh v
và một lần trong bán bậc ra của đỉnh u nên ta có:

10


Định lý 2. Giả sử G = (V, E) là đồ thị có hướng, khi đó:

 deg





(v)   deg (v) | E |

vV

vV

Rất nhiều tính chất của đồ thị có hướng không phụ thuộc vào hướng
trên các cung của nó. Vì vậy, trong nhiều trường hợp sẽ thuận tiện hơn nếu ta

bỏ qua hướng trên các cung của đồ thị. Đồ thị vô hướng thu được bằng cách
bỏ qua hướng trên các cung được gọi là đồ thị vô hướng tương ứng với đồ thị
có hướng đã cho.
1.2. Đường đi, chu trình, đồ thị liên thông
Định nghĩa 11: Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là
số nguyên dương, trên đồ thị vô hướng G = (V, E) là dãy xo, x1 , ..., xn-1 , xn
Trong đó u = x0 , v = xn , ( xi , xi+1 )  E , i = 0, 1, 2 , ..., n-1.
Đường đi nói trên còn có thể biểu diễn dưới dạng các cạnh: (x0 , x1 ),
( x1 , x2), ..., ( xn-1 , xn ).
Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi.
Đường đi có đỉnh đầu trùng với đỉnh cuối (tức là u = v) được gọi là chu trình.
Đường đi hay chu trình được gọi là đơn nếu như không có cạnh nào bị lặp
lại.
Ví dụ 4. Trên đồ thị vô hướng cho trong hình 1.8 ta có a, d, c, f, e là
đường đi đơn độ dài 4. Còn d, e, c, a không là đường đi do (e, c) không phải
là cạnh của đồ thị. Dãy b, c, f, e, b là chu trình độ dài 4. Đường đi a, b, e, d, a,
b có độ dài là 5 không phải là đường đi đơn, do cạnh (a, b) có mặt trong nó
hai lần.a

b

c

a

b

c

d


e

f

d

e

f

Hình 1.8. Đường đi trên đồ thị

11


Khái niệm đường đi và chu trình trên đồ thị có hướng được định nghĩa
hoàn toàn tương tự như trường hợp đồ thị vô hướng, chỉ khác là ta chú ý đến
hướng trên các cung.
Định nghĩa 12. Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là
số nguyên dương, trên đồ thị có hướng G = (V, A) là dãy: xo, x1, ..., xn-1, xn
trong đó u = x0 , v = xn , (xi , xi+1)  A , i = 0, 1, 2 , ..., n-1.
Đường đi nói trên còn có thể biểu diễn dưới dạng các cung: (x0 , x1),
(x1, x2), ..., (xn-1, xn).
Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi.
Đường đi có đỉnh đầu trùng với đỉnh cuối (tức là u = v) được gọi là chu trình.
Đường đi hay chu trình được gọi là đơn nếu như không có cung nào bị lặp
lại.
Ví dụ 5: Trên đồ thị có hướng cho trong hình 1.8 ta có a, d, c, f, e là
đường đi đơn độ dài 4. Còn d, e, c, a không là đường đi do (e, c) không phải

là cung của đồ thị. Dãy b, c, f, e, b là chu trình độ dài 4. Đường đi a, b, e, d, a,
b có độ dài là 5 không phải là đường đi đơn, do cung (a, b) có mặt trong nó
hai lần.
Xét một mạng máy tính. Một câu hỏi đặt ra là hai máy tính bất kỳ trong
mạng này có thể trao đổi được thông tin với nhau hoặc trực tiếp qua kênh nối
chúng hoặc thông qua một hoặc vài máy tính trung gian trong mạng? Nếu sử
dụng đồ thị để biểu diễn mạng máy tính này (trong đó các đỉnh của đồ thị
tương ứng với các máy tính, còn các cạnh tương ứng với các kênh nối) câu
hỏi đó được phát biểu trong ngôn ngữ đồ thị như sau: Tồn tại hay chăng
đường đi giữa mọi cặp đỉnh của đồ thị?

12


Định nghĩa 13. Đồ thị vô hướng G = (V, E) được gọi là liên thông nếu
luôn tìm được đường đi giữa hai đỉnh bất kỳ của nó.
Như vậy hai máy tính bất kỳ trong mạng có thể trao đổi thông tin được
với nhau khi và chỉ khi đồ thị tương ứng với mạng này là đồ thị liên thông.
Ví dụ 6: Trong hình 1.9 đồ thị G là liên thông, đồ thị H là không liên
thông.
a

b
H1

c

f

g


H3

H2
d

e

H

G

Hình 1.9. Đồ thị liên thông G và đồ thị H gồm 3 thành phần liên thông H1, H2, H3

Định nghĩa 14. Ta gọi đồ thị con của đồ thị G = (V, E) là đồ thị H
=(W, F), trong đó: W  V và F  E
Trong trường hợp đồ thị là không liên thông, nó sẽ rã ra thành một số
đồ thị con liên thông đôi một không có đỉnh chung. Những đồ thị con liên
thông như vậy ta sẽ gọi là các thành phần liên thông của đồ thị.
Ví dụ 7. Đồ thị H trong hình 1.9 gồm 3 thành phần liên thông là H1, H2,
H3.
Trong mạng máy tính có thể có những máy (những kênh nối) mà sự
hỏng hóc của nó có thể ảnh hưởng đến việc trao đổi thông tin trong mạng.
Các khái niệm tương ứng với tình huống này được đưa ra trong định nghĩa
sau.

13


Định nghĩa 15. Đỉnh v được gọi là đỉnh rẽ nhánh nếu việc loại bỏ v

cùng với các cạnh liên thuộc với nó khỏi đồ thị làm tăng số thành phần liên
thông của đồ thị. Cạnh e được gọi là cầu nếu việc loại bỏ nó khỏi đồ thị làm
tăng số thành phần liên thông của đồ thị .
Ví dụ 8: Trong đồ thị G ở hình 1.9 đỉnh d và e là đỉnh rẽ nhánh, còn
các cạnh (d, g) và (e, f) là cầu.
Đối với đồ thị có hướng có hai khái niệm liên thông phụ thuộc vào việc
ta có xét đến hướng trên các cung hay không.
Định nghĩa 16. Đồ thị có hướng G = (V, A) được gọi là liên thông
mạnh nếu luôn tìm được đường đi giữa hai đỉnh bất kỳ của nó.
Định nghĩa 17. Đồ thị có hướng G = (V, A) được gọi là liên thông yếu
nếu đồ thị vô hướng tương ứng với nó là đồ thị vô hướng liên thông.
Rõ ràng nếu đồ thị là liên thông mạnh thì nó cũng là liên thông yếu,
nhưng điều ngược lại là không luôn đúng, như chỉ ra trong thí dụ dưới đây.
Ví dụ 9. Trong hình 1.10 đồ thị G là liên thông mạnh, còn H là liên
thông yếu.
a

a

b

b
e

e
c

c

d


d

H
G
Hình 1.10. Đồ thị liên thông mạnh G, đồ thị liên thông yếu H
Một câu hỏi đặt ra là khi nào có thể định hướng các cạnh của một đồ
thị vô hướng liên thông để có thể thu được một đồ thị có hướng liên thông

14


mạnh? Ta sẽ gọi đồ thị như vậy là đồ thị định hướng được. Định lý dưới đây
cho ta tiêu chuẩn nhận biết một đồ thị có là định hướng được hay không.
Định lý 3. Đồ thị vô hướng liên thông là định hướng được khi và chỉ
khi mỗi cạnh của nó nằm trên ít nhất một chu trình.
Chứng minh:
Điều kiện cần: Giả sử (u, v) là một cạnh của đồ thị ,từ sự tồn tại đường
đi có hướng từ u đến v và ngược lại suy ra (u, v) phải nằm trên ít nhất một chu
trình.
Điều kiện đủ: Thủ tục sau đây cho phép định hướng các cạnh của đồ thị
để thu được đồ thị có hướng liên thông mạnh. Giả sử C là một chu trình nào
đó trong đồ thị. Định hướng các cạnh trên chu trình này theo một hướng đi
vòng theo nó. Nếu tất các cạnh của đồ thị là đã được định hướng thì kết thúc
thủ tục. Ngược lại, chu trình C là một cạnh chưa định hướng có chung đỉnh
với ít nhất một trong số các cạnh đã định hướng. Theo giả thiết tìm được chu
trình C chứa cạnh e. Định hướng các cạnh chưa được định hướng của C’ theo
một hướng dọc theo chu trình này (không định hướng lại các cạnh đã có
hướng). Thủ tục trên sẽ được lặp lại cho đến khi tất cả các cạnh của đồ thị
được định hướng. Khi đó ta thu được đồ thị có hướng liên thông mạnh.

1.3. Ma trận kề, ma trận trọng số
Xét đơn đồ thị vô hướng G = (V, E), với tập đỉnh V = {1, 2, …, n}, tập
cạnh E = {e1, e2, …, em}. Ta gọi ma trận kề của đồ thị G là ma trận:
A = {aij : i,j = 1, 2, …, n}
Với các phần tử được xác định theo quy tắc sau đây:
Ai,j = 0, nếu (i, j)  E và aij = 1 nếu (i, j)  E, i, j = 1, 2, …, n.

15


Ví dụ 10: Ma trận kề của đồ thị vô hướng G cho trong hình 1.11 là:

4

3

2

6

1

5

1
4

5

2


3

6
G1

G

Hình 1.11. Đồ thị vô hướng G và đồ thị có hướng G1
 Các tính chất của ma trận kề:
- Ma trận kề của đồ thị vô hướng là ma trận đối xứng, tức là:
a[i,j] = a[j,i] với i, j = 1, 2, …, n.
- Tổng các phần tử trên dòng i (cột j) của ma trận kề chính bằng bậc của
đỉnh i (đỉnh j).
Ma trận kề của đồ thị có hướng được định nghĩa một cách hoàn toàn
tương tự.
Ví dụ 11: Đồ thị có hướng G1 cho trong hình 1.11 có ma trận kề là ma
trận sau:

16


Lưu ý: ma trận kề của đồ thị có hướng không phải là ma trận đối xứng.
 Chú ý: Chúng ta chỉ xét trên đơn đồ thị. Ma trận kề của đa đồ thị có thể
xây dựng hoàn toàn tương tự, chỉ khác là thay vì ghi 1 vào vị trí a[i, j] nếu (i,j)
là cạnh của đồ thị, chúng ta sẽ ghi k là số cạnh nối 2 đỉnh i và j.
Trong rất nhiều vấn đề của lý thuyết đồ thị, mỗi cạnh e = (u,v) của đồ
thị được gán với một con số c(e) (còn viết là c(u,v)) gọi là trọng số của cạnh
e. Đồ thị trong trường hợp như vậy được gọi là đồ thị có trọng số. Trong
trường hợp đồ thị có trọng số, thay vì ma trận kề, để biểu diễn đồ thị ta sử

dụng ma trận trọng số:
C = c[i, j], i, j = 1, 2,…, n
Với c[i, j] = c(i, j), nếu (i, j)  E và c[i, j] = θ, nếu (i, j)  E
Trong đó số θ, tùy từng trường hợp cụ thể, có thể được đặt bằng một
trong các giá trị sau: 0, +∞, -∞.
Ưu điểm lớn nhất của phương pháp biểu diễn đồ thị bằng ma trận kề
(hoặc ma trận trọng số) là để trả lời câu hỏi: hai đỉnh u, v có kề nhau trên đồ
thị hay không, chúng ta chỉ phải thực hiện một số phép so sánh. Nhược điểm
lớn nhất của phương pháp này là không phụ thuộc vào số cạnh của đồ thị, ta
luôn phải sử dụng n2 đơn vị bộ nhớ để lưu trữ ma trận kề của nó.

17


×