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à
Trang 1TRƯỜ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
Trang 2LỜ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
Trang 3LỜ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
Trang 4MỤ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
Trang 53.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
Trang 6DANH 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
Trang 7Hì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
Trang 8DANH 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
Trang 9có 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
Trang 10- 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
Trang 113
- 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
Trang 12Trong đờ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ị
Trang 135
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
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
Hà Nội
Trang 146
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
Đị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 e 1 va e 2 được gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp đỉnh
Quảng Ngãi
Trang 157
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
Ta đi đến định nghĩa sau:
Hình 1.5 Mạng máy tính với các kênh thoại một chiều
Bình Định TPHCM
Hà Nội
Trang 168
Đị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 e 1 và e 2 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)
Trang 179
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 đó
V v
v
2
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ẻ)
v V
v
v v
Trang 1810
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))
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ó:
Trang 19E v
v) ( ) | |
degRấ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 x o , x 1 , , x n-1 , x n
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
Trang 2012
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: x o , x 1 , , x n-1 , x n
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ị?
Trang 2113
Đị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
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à H 1 , H 2 ,
H 3
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
Trang 2214
Đị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
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
Trang 2315
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
Trang 2416
Ví dụ 10: Ma trận kề của đồ thị vô hướng G cho trong hình 1.11 là:
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:
Trang 2517
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ó
Trang 2618
1.4 Một số dạng đồ thị đặc biệt
1.4.1 Đồ thị đầy đủ
Đồ thị đầy đủ n đỉnh, ký hiệu là Kn, là đơn đồ thị mà hai đỉnh phân biệt
bất kỳ của nó luôn liền kề Như vậy, Kn có
2
)1( n n
v1
C6
Hình 1.13 Đồ thị vòng
Trang 2719
1.4.3 Đồ thị bánh xe
Từ đồ thị vòng Cn, thêm vào đỉnh vn+1 và các cạnh (vn+1, v1), (vn+1, v2), , (vn+1, vn), ta nhận được đơn đồ thị gọi là đồ thị bánh xe, ký hiệu là Wn Như vậy, đồ thị Wn có n+1 đỉnh, 2n cạnh, một đỉnh bậc n và n đỉnh bậc 3
Ví dụ 12: Đồ thị bánh xe W3, W4, W5, W6
1.4.4 Đồ thị lập phương
Đơn đồ thị 2n đỉnh, tương ứng với 2n xâu nhị phân độ dài n và hai đỉnh
kề nhau khi và chỉ khi 2 xâu nhị phân tương ứng với hai đỉnh này chỉ khác nhau đúng một bit được gọi là đồ thị lập phương, ký hiệu là Qn Như vậy, mỗi đỉnh của Qn có bậc là n và số cạnh của Qn là n.2n-1 (từ công thức 2|E| =
v7 v1
Q1
Q2
Q3
Hình 1.15 Đồ thị lập phương
Trang 2820
1.4.5 Đồ thị phân đôi (đồ thị hai phe)
Đơn đồ thị G = (V, E) sao cho V = V1 V2, V1 V2 = , V1 ,
V2 và mỗi cạnh của G được nối một đỉnh trong V1 và một đỉnh trong V2
được gọi là đồ thị phân đôi
Nếu đồ thị phân đôi G = (V1 V2, E) sao cho với mọi v1 V1, v2 V2, (v1, v2) E thì G được gọi là đồ thị phân đôi đầy đủ Nếu |V1| = m, |V2| = n thì đồ thị phân đôi đầy đủ G ký hiệu là Km,n Như vậy Km,n có m.n cạnh, các đỉnh của V1 có bậc n và các đỉnh của V2 có bậc m
Mạng cục bộ cũng có thể có cấu trúc vòng tròn, trong đó mỗi thiết bị nối với đúng hai thiết bị khác Mạng cục bộ kiểu này có thể biểu diễn bằng một đồ thị vòng Cn Thông báo gửi từ thiết bị này tới thiết bị khác được truyền đi theo vòng tròn cho tới khi đến nơi nhận