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

Giáo trình toán rời rạc 2

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 (2.25 MB, 137 trang )


TRƯỜNG ðẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN
KHOA CÔNG NGHỆ THÔNG TIN







GIÁO TRÌNH
HỌC PHẦN TOÁN RỜI RẠC 2





Trình ñộ ñào tạo
Hệ ñào tạo

:
:
ðại học
Chính quy / lien thông




Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010


Trang
1

Mở ñầu
Lý thuyết ñồ thị là một lĩnh vực ñã có từ lâu và có nhiều ứng dụng hiện ñại. 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
nhà toán học lỗi lạc người Thụy Sỹ Lenhard Eurler. Chính ông là người ñã sử dụng ñồ thị
ñể giải bài toán nổi tiếng về các cái cầu ở thành phố Konigsberg.
ðồ thị ñược sử dụng ñể giải các bài toán trong nhiều lĩnh vực khác nhau. Chẳng
hạn, ñồ thị có thể sử dụng ñể xác ñịnh các mạch vòng trong vấn ñề giải tích mạch ñiện.
Chúng ta có thể phân biệt các hợp chất hóa học hữu cơ khác nhau với cùng công thức
phân tử nhưng khác nhau về cấu trúc phân tử nhờ ñồ thị. Chúng ta có thể xác ñịnh hai
máy tính trong mạng có thể trao ñổi thông tin ñược với nhau hay không nhờ mô hình ñồ
thị của mạng máy tính. ðồ thị có trọng số trên các cạnh có thể sử dụng ñể giải các bài
toán như: Tìm ñường ñi ngắn nhất giữa hai thành phố trong mạng giao thông. Chúng ta
cũng còn sử dụng ñồ thị ñể giải các bài toán về lập lịch, thời khóa biểu, và phân bố tần số
cho các trạm phát thanh và truyền hình.


Hưng Yên, tháng 7 năm 2010
Bộ môn Công nghệ phần mềm
Khoa Công nghệ thông tin
Trường ñại học sư phạm kỹ thuật Hưng Yên
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
2
Mục lục
Mở ñầu..................................................................................................................................0

Danh mục các hình vẽ ..........................................................................................................4
Bài 1 Các khái niệm cơ bản của Lý thuyết ñồ thị. ..........................................................6
1.1 ðịnh nghĩa cơ bản về ñồ thị........................................................................................6
1.2 ðường ñi. chu trình. ðồ thị liên thông........................................................................9
1.3. Phân loại ñồ thị ........................................................................................................12
1.3.1. ðồ thị vô hướng liên thông ...............................................................................12
1.3.2. ðồ thị có hướng liên thông ...............................................................................14
1.4. Một số loại ñồ thị ñặc biệt .......................................................................................15
Bài 2 Biểu diễn ñồ thị trên máy tính .............................................................................20
2.1. Một số phương pháp biểu diễn ñồ thị trên máy tính................................................20
2.2.1. Ma trận kề. Ma trận trọng số............................................................................20
2.2.2. Danh sách cạnh (cung)......................................................................................22
2.2.3. Danh sách kề .....................................................................................................23
Bài 3 ðồ thị Euler..........................................................................................................28
3.1. ðịnh nghĩa................................................................................................................28
3.2. Các ví dụ ..................................................................................................................29
3.3. ðịnh lý Euler và thuật toán Flor ..............................................................................29
Bài 4 ðồ thị Hamilton ...................................................................................................33
4.1 ðịnh nghĩa.................................................................................................................34
4.2. ðịnh lý và thuật toán liệt kê tất cả các chu trình Hamilton. ....................................35
Bài 5 Thảo luận cài ñặt ñồ thị, các thuật toán liệt kê chu trình Euler và Hamilton. Thảo
luận về bài tập lớn...............................................................................................................38
5.1. Cài ñặt biểu diễn ñồ thị trên máy tính......................................................................38
5.2. Cài ñặt thuật toán liệt kê chu trình Euler .................................................................38
5.3. Cài ñặt thuật toán liệt kê chu trình Hamilton...........................................................40
Bài 6 Thuật toán tìm kiếm trên ñồ thị và ứng dụng ......................................................41
6.1. Duyệt ñồ thị theo chiều rộng (BFS).........................................................................41
6.2. Duyệt ñồ thị theo chiều sâu (DFS) ..........................................................................44
Bài 7 Cây và cây khung.................................................................................................45
7.1. Cây và cây khung.....................................................................................................45

7.1.1. Cây ....................................................................................................................45
7.1.2. Cây khung của ñồ thị ........................................................................................47
7.2. Bài toán cây khung nhỏ nhất....................................................................................47
7.3 Xây dựng tập các chu trình cơ bản của ñồ thị...........................................................49
7.4. Thuật toán Prim .......................................................................................................50
7.5 Thuật toán Kruskal....................................................................................................54
Bài 8 Thảo luận về cài ñặt thuật toán tìm cây khung nhỏ nhất trên ñồ thị....................57
8.1. Cài ñặt xây dựng tập các chu trình cơ bản của ñồ thị..............................................57
8.2. Cài ñặt thuật toán Prim ............................................................................................59
8.3. Cài ñặt thuật toán Kruskal .......................................................................................60
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
3
8.4. Một số thuật toán xây dựng cây khung(*) ...............................................................62
Bài 10 Bài toán tìm ñường ñi ngắn nhất .........................................................................65
10.1. Các khái niệm mở ñầu ...........................................................................................65
10.2. ðường ñi ngắn nhất xuất phát từ một ñỉnh. Thuật toán Ford-Bellman .................66
10.3. Trường hợp ma trận trọng số không âm. Thuật toán Dijkstra ...............................67
Bài 11 Bài toán tìm ñường ñi ngắn nhất (tiếp)................................................................69
11.1 ðường ñi trong ñồ thị không có chu trình ..............................................................69
11.2 ðường ñi ngắn nhất giữa tất cả các cặp ñỉnh..........................................................74
11.3 Cài ñặt thuật toán Dijkstra ......................................................................................75
Bài 12 Bài toán luồng cực ñại trong mạng......................................................................76
12.1. Mạng. Luồng trong mạng. Bài toán luồng cực ñại ................................................76
12.2. Lát cắt. ñường tăng luồng. ðịnh lý ford_fulkerson ...............................................77
12.3. Thuật toán tìm luồng cực ñại .................................................................................81
Bài 13 Lý thuyết ñồ thị và ứng dụng...............................................................................91
13.1. Các bài toán liên quan tới ñồ thị ............................................................................91

13.1.1 Các bài toán liên quan tới bậc của ñồ thị .........................................................91
13.1.2 Các bài toán liên quan ñến tính liên thông của ñồ thị......................................93
13.1.3 Các bài toán liên quan tới chu trình .................................................................94
13.1.4 Các bài toán có liên quan ñến ñường ñi và chu trình Hamilton......................96
13.1.5 Các bài toán liên quan ñến ñồ thị tô màu.......................................................100
13.1.6 Bài toán về cây...............................................................................................110
13.1.7 Bài toán về ghép cặp ......................................................................................111
13.1.8 ðồ thị Euler....................................................................................................112
13.1.9 Các bài toán có tính tổng hợp ........................................................................112
13.2 Sự liên hệ giữa các tập ñặc biệt trên ñồ thị với các bài toán trên bàn cờ..............115
13.3 Duyệt rộng trên mảng hai chiều............................................................................119
Bài 14 Một số ứng dụng trong ñồ thị ............................................................................126
14.1 Bài toán ñám cưới vùng quê ................................................................................126
14.2 Bài toán về hệ thống ñại diện chung.....................................................................127
14.3 Bài toán tối ưu rời rạc ...........................................................................................128
Bài toán phân nhóm sinh hoạt...................................................................................128
Bài toán lập lịch cho hội nghị ...................................................................................129
14.4 Một số bài toán liên quan ñến việc tổ chức mạng vận chuyển bưu chính............129
Mô hình ñịnh tuyến mạng ñường thư cấp 1..............................................................130
Bài toán lập kế hoạch vận chuyển bưu gửi ...............................................................130
Mô hình mạng ñường thư trong thành phố ...............................................................133
TÀI LIỆU THAM KHẢO ................................................................................................136

Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
4
Danh mục các hình vẽ
Hình 1.1 Sơ ñồ mạng máy tính.............................................................................................6

Hình 1.2 Sơ ñồ mạng máy tính với ña kênh thoại................................................................7
Hình 1.3 Sơ ñồ mạng máy tính với kênh thoại thông báo....................................................7
Hình 1.4 Mạng máy tính với kênh thoại một chiều..............................................................8
Hình 1.5 ðường ñi trên ñồ thị ..............................................................................................9
Hình 1.6 ðồ thị G và H. ....................................................................................................10
Hình 1.7 ðồ thị liên thông mạnh G và ñồ thị liên thông yếu H. ........................................12
Hình 1.8 ðồ thị vô hướng...................................................................................................13
Hình 1.9 ðồ thị có hướng...................................................................................................14
Hình 1.10 ðồ thị ñầy ñủ. ....................................................................................................15
Hình 1.11 ðồ thị vòng C
3
, C
4
, C
5
, C
6
. ...............................................................................16
Hình 1.12 ðồ thị bánh xe W
3
, W
4
, W
5
, W
6
. ......................................................................16
Hình 1.13 ðồ thị lập phương Q
1
, Q

2
, Q
3
. ..........................................................................16
Hình 1.14 ðồ thị hai phía. ..................................................................................................17
Hình 1.15 ðồ thị K
4
là ñồ thị phẳng...................................................................................18
Hình 1.16 Các miền tương ứng với biểu diễn phẳng của ñồ thị.........................................18
Hình 2.1 ðồ thị vô hướng G và ðồ thị có hướng G
1
..........................................................21
Hình 3.1 Mô hình 7 cây cầu ở Konigsberg ........................................................................28
Hình 3.2 ðồ thị G
1
, G
2
, G
3
. ................................................................................................29
Hình 3.3 ðồ thị H
1
, H
2
, H
3
. ................................................................................................29
Hình 3.4 Minh hoạ cho chứng minh ðịnh lý 3.1................................................................31
Hình 4.1 Du lịch 20 thành phố ...........................................................................................33
Hình 4.2 ðồ thị Hamilton G

3
, nửa Hamilton G
2
, và G
1
. ...................................................34
Hình 4.3 ðồ thị ñấu loại D
5
, ñấu loại liên thông mạnh D
6
.................................................36
Hình 4.4 ðồ thị và cây liệt kê chu trình Hamilton của nó theo thuật toán quay lui...........37
Hình 5.1 ðồ thị và cây liệt kê chu trình Hamilton của nó theo thuật toán quay lui...........40
Hình 6.1 ðồ thị vô hướng...................................................................................................42
Hình 7.1 Cây và rừng .........................................................................................................45
Hình 7.2 ðồ thị và các cây khung của nó...........................................................................47
Hình 7.3 ðồ thị và cây khung nhỏ nhất..............................................................................53
Hình 8.1 Hệ chu trình ñộc lập cho ñồ thị vô hướng G .......................................................57
Hình 8.2 Hệ chu trình ñộc lập cho ñồ thị có hướng G
1
......................................................57
Hình 8.3 Minh họa từng bước thuật toán Prim tìm cây khung nhỏ nhất............................60
Hình 8.4 Minh họa từng bước thuật toán Kruskal tìm cây khung nhỏ nhất.......................61
Hình 11.1 ðồ thị không có chu trình..................................................................................69
Hình 11.2 ðồ thị minh hoạ PERT. .....................................................................................73
Hình 12.1 Mạng G và luồng f. ðồ thị có trọng số G
f
tương ứng. ......................................79
Hình 12.2 Mạng G và minh họa từng bước thuật toán Ford-Fullkerson............................86
Hình 12.3 Mạng G với luồng cực ñại và lát cắt hẹp nhất...................................................87

Hình 12.4 Ví dụ tồi tệ ñối với thuật toán Ford_Fulkerson. ................................................89
Hình 12.5 Tăng luồng dọc theo ñường tăng.......................................................................90
Hình 13.1 Kết quả thi ñấu của 5 ñội bóng chuyền A, B, C, B, E.......................................96
Hình 13.2 Sơ ñồ nhà của 8 học sinh...................................................................................97
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
5
Hình 13.3 10 thành phố ......................................................................................................98
Hình 13.4 bố trí lịch thi cho học sinh THPT với 7 môn thi trong 7 ngày ..........................99
Hình 13.5 Vị trí nhà ở và ñường nối giữa các nhà của 9 học sinh ...................................100
Hình 13.6 Bản ñồ có 6 miền.............................................................................................101
Hình 13.7 Lập lịch thi 7 môn............................................................................................104
Hình 13.8 Tô màu cho ñồ thị lịch thi................................................................................105
Hình 13.9 Phân chia kênh truyền hình .............................................................................107
Hình 13.10 Tô màu cho ñồ thị phân chia kênh truyền hình ............................................107
Hình 13.11 Thanh ghi chỉ số trong CPU ..........................................................................109
Hình 13.12 Tô màu cho ñô thị thanh ghi chỉ số ...............................................................110
Hình 13.13 Kết quả xếp hạng của các ñội........................................................................111
Hình 13.14 Tuyển chọn biên dịch viên ............................................................................114
Hình 13.15 Quy tắc ñi của quân mã .................................................................................116
Hình 13.16 Quy tắc ñi của quân mã trên bàn cờ 4 × 4 .....................................................116
Hình 13.17 Quy tắc ñi của quân tượng trên bàn cờ 4 × 4 ................................................117
Hình 13.18 Quy tắc ñi của quân xe trên bàn cờ 4 × 4 .....................................................117
Hình 13.19 Quy tắc ñi của quân hậu trên bàn cờ 4 × 4 ....................................................118
Hình 13.20 Hướng di chuyển của robot ...........................................................................120
Hình 14.1 Mạng tương ứng với bài toán ñám cưới vùng quê. .........................................127

Giáo trình

TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
6
Bài 1 Các khái niệm cơ bản của Lý thuyết ñồ thị.
1.1 ðịnh nghĩa cơ bản về ñồ 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 ná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, xem hình 1.1.

Hình 1.1 Sơ ñồ mạng máy tính.
Nhận thấy rằng trong mạng ở hình 1.1, giữa hai máy bất kỳ chỉ có nhiều nhất là một kênh
thoại nối chúng, kênh thoại naỳ 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 cho trong hình 1 ñược gọi là ñơn ñồ thị vô
hướng. Ta ñi ñến ñịnh nghĩa sau
ðịnh nghĩa 1.1
ðơn ñồ thị vô hướng G = (V,E) bao gồm V là tập các ñỉ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.
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àu bởi nhiều kênh thoại. Mạng với ña kênh thoại
giữa các máy ñược cho trong hình 1.2.
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
7


Hình 1.2 Sơ ñồ mạng máy tính với ña kênh thoại.
ðịnh nghĩa 1.2
ða ñồ thị vô hướng G= (V, E) bao gồm V là tập các ñỉ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. Hai cạnh e
1
và 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.

Hình 1.3 Sơ ñồ mạng máy tính với kênh thoại thông báo.
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ó thể có hai (hoặc 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 náy nào ñó với chính nó
(chẳng hạn vời mục ñính thông báo). Mạng như vậy ñược cho trong hình 3. Khi ñó ñ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àychú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 1.3
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
8
Giả ñồ thị vô hướng G = (V, E) bao gồm V là tập các ñỉnh và E là tập 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ạnh. Cạnh e ñược
gọi là khuyên nếu nó có dạng e = (u, u).


Hình 1.4 Mạng máy tính với kênh thoại một chiề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.4 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.
ðịnh nghĩa 1.4
ðơ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 1.5
ða ñồ 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. Hai cung e
1
, 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 khi nhắc ñến
chúng.
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
9
1.2 ðường ñi. chu trình. ðồ thị liên thông
ðịnh nghĩa 1.6
ðườ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
0
, x
1
,…, x
n-1
, x
n
trong ñó u = x
0
, v = x
n
, (x
i
, x
i+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 dãy các cạnh:
(x
0
, x
1
), (x
1
, x
2
), …, (x
n-1

, x
n
)
ðỉ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ụ 1.1 Trên ñồ thị vô hướng cho trong Hình 1.5: a, d, c, f, e là ñường ñi ñơn ñộ dài 4.
Còn d, e, c, a không là ñường ñi, do (c,e) 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ó 2 lần.

Hình 1.5 ðường ñi trên ñồ thị
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ư trong trường hợp ñồ thị vô hướng, chỉ khác là ta có chú ý ñến hướng trên
các cung.
ðịnh nghĩa 1.7
ðườ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
0
, x
1
,…, x
n-1
, x
n

trong ñó u = x
0
, v = x
n

, (xi, x
i+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 dãy các cung:
(x
0
, x
1
), (x
1
, x
2
), …, (x
n-1
, x
n
)
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
10
ðỉ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ụ 1.2 Trên ñồ thị có hướng cho trong Hình 1.5: a, d, c, f, e là ñường ñi ñơn ñộ dài 4.
Còn d, e, c, a không là ñường ñi, do (c,e) 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ó 2 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 thông tin ñược với nhau hoặc là 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 không ñường ñi giữa mọi cặp ñỉnh của ñồ thị.
ðịnh nghĩa 1.8
ðồ 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ụ 1.3 Trong Hình 1.6: ðồ thị G là liên thông, còn ñồ thị H là không liên thông.

Hình 1.6 ðồ thị G và H.
ðịnh nghĩa 1.9
Ta gọi ñồ thị con của ñồ thị G = (V, E) là ñồ thị H = (W, F), trong ñó W

V và F

E.
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
11
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ụ 1.4. ðồ thị H trong hình 2 gồm 3 thành phần liên thông 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ó sẽ ả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.
ðịnh nghĩa 1.10
ðỉ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ụ 1.5 Trong ñồ thị G ở hình2, ñỉ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 1.11
ðồ 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 1.12
ðồ 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à 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 ví dụn dưới ñây.
Ví dụ 1.6 Trong Hình 1.7 ñồ thị G là liên thông mạnh, còn H là liên thông yếu nhưng
không là liên thông mạnh.
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010


Trang
12

Hình 1.7 ðồ thị liên thông mạnh G và ñồ 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 ñồ thị có hướng liên thông 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ý 1.1
ðồ 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 một ñồ 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 cạnh của ñồ
thị là ñã ñược ñịnh hướng thì kết thúc thủ tục. Ngược lại, chọn e 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ó ñịnh 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. Phân loại ñồ thị
1.3.1. ðồ thị vô hướng liên thông
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.
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010


Trang
13
ðịnh nghĩa 1.13
Hai ñỉnh u và v của ñồ thị vô 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ị ta nói cạnh này là liên thuộc với hai ñỉnh u và v, hoặc
cũng nói là 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).
ðể có thể biết có vao nhiêu cạnh liên thuộc với một ñỉnh, ta ñưa vào ñịnh nghĩa sau
ðịnh nghĩa 1.14
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ó và sẽ ký hiệu là
deg(v).

Hình 1.8 ðồ thị vô hướng.
Ví dụ 1.7 Xét ñồ thị cho trong hình 1.9, 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.2 Giả sử G = (V, E) là ñồ thị vô hướng với m cạnh. Khi ñó tổng bậc của tất cả
các ñỉnh bằng hai lần số cung.
Chứng minh. Rõ ràng 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.
Ví dụ 1.8 ðồ thị với n ñỉnh có bậc là 6 có bao nhiêu cạnh?
Giải: Theo ñịnh lý 1.2 ta có 2m = 6n. Từ ñó suy ra tổng các cạnh của ñồ thị là 3n.
Hệ quả 1.3 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.
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang

14
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ó
∑∑
∈∈
+=
OvUv
vvm )deg()deg(2

Do deg(v) là chẵn với v là ñỉnh trong U nên tổng thứ nhất ở trên là số chẵn. Từ ñó
suy ra tổng thứ hai (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.
Ta xét các thuật ngữ tương tự cho ñồ thị vô hướng.
1.3.2. ðồ thị có hướng liên thông
ðịnh nghĩa 1.15
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à vào ñỉnh
v. ðỉnh u(v) sẽ ñược gị là ñỉnh ñầu (cuối) của cung (u,v).
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à
bán bậc vào của một ñỉnh.
ðịnh nghĩa 1.16
Ta gọi bán bậc ra (bán bậc vào) của ñỉnh v trong ñồ thị có hướng là số cung của ñồ thị ñi
ra khỏi nó (ñi vào nó) và ký hiệu là deg
+
(v) (deg
-
(v))

Hình 1.9 ðồ thị có hướng.

Ví dụ 1.9 Xét ñồ thị cho trong hình 1.10. 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.
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
15
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ó:

ðịnh lý 1.3. Giả sử G = (V, E) là ñồ thị có hướng. Khi ñó
2m =
deg ( ) deg ( )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.4. Một số loại ñồ thị ñặc biệt
Trong mục này ta xét một số ñơn ñồ thị vô hướng dạng ñặc biệt xuất hiện trong
nhiều vấn ñề ứng dụng thực tế.
ðồ thị ñầy ñủ.
ðồ thị ñầy ñủ n ñỉnh, ký hiệu bởi K
n
, là ñơn ñồ thị vô hướng

mà giữa hai ñỉnh bất
kỳ của nó luôn có cạnh nối.
Các ñồ thị K
3
, K
4
, K
5
cho trong hình dưới ñây.

Hình 1.10 ðồ thị ñầy ñủ.

ðồ thị ñầy ñủ K
n
có tất cả n(n-1)/2 cạnh, nó là ñơn ñồ thị có nhiều cạnh nhất.
ðồ thị vòng.
ðồ thị vòng C
n
, n≥3. gồm n ñỉnh v
1
, v
2
,. . . .v
n
và các cạnh (v
1
,v
2
), (v
2
,v
3
) . . . (v
n-1
,v
n
),
(v
n
,v
1
).

ðồ thị vòng C
3
, C
4
, C
5
, C
6
cho trong hình 2.2
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
16

Hình 1.11 ðồ thị vòng C
3
, C
4
, C
5
, C
6
.
ðồ thị bánh xe.
ðồ thị W
n
thu ñược từ C
n
bằng cách bổ sung vào một ñỉnh mới nối với tất cả các

ñỉnh của C
n
(xem hình 2.3).

Hình 1.12 ðồ thị bánh xe W
3
, W
4
, W
5
, W
6
.
ðồ thị lập phương.
ðồ thị lập phương n ñỉnh Q
n
là ñồ thị với các ñỉnh biểu diễn 2
n
xâu nhị phân ñộ dài
n. Hai ñỉnh của nó gọi là kề nhau nếu như hai xâu nhị phân tương ứng chỉ khác nhau 1 bit.
Hình 1.13 cho thấy Q
n
với n=1,2,3.

Hình 1.13 ðồ thị lập phương Q
1
, Q
2
, Q
3

.

ðồ thị hai phía.
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
17
ðơn ñồ thị G = (V, E) ñược gọi là hai phía nếu như tập ñỉnh V của nó có thể phân
hoạch thành hai tập X và Y sao cho mỗi cạnh của ñồ thị chỉ nối một ñỉnh nào ñó trong X
với một ñỉnh nào ñó trong Y. Khi ñó ta sẽ sử dụng ký hiệu G = (X∪Y, E) ñể chỉ ñồ thị hai
phía với tập ñỉnh X∪Y.
ðịnh lý sau ñây cho phép nhận biết một ñơn ñồ thị có phải là hai phía hay không.
ðịnh lý 1.4 ðơn ñồ thị là ñồ thị hai phía khi và chỉ khi nó không chứa chu trình ñộ dài lẻ.
ðể kiểm tra xem một ñồ thị liên thông có phải là hai phía hay không có thể áp
dụng thủ tục sau. Cho v là một ñỉnh bất kỳ của ñồ thị. ðặt X={v}, còn Y là tập các ñỉnh
kề của v. Khi ñó các ñỉnh kề của các ñỉnh trong Y phải thuộc vào X. Ký hiệu tập các ñỉnh
như vậy là T. Vì thế nếu phát hiện T ∩ Y ≠ ∅ thì ñồ thị không phải là hai phía, kết thúc.
ngược lại, ñặt X = X ∪ T. Tiếp tục xét như vậy ñối với T’ là tập các ñỉnh kề của T,. ..
ðồ thị hai phía G=(X ∪ Y, E) với |X|= m, |Y| = n ñược gọi là ñồ thị hai phía ñầy
ñủ và ký hiệu là K
2,3,
K
3,3,
K
3,4
ñược cho trong hình 2.5.

Hình 1.14 ðồ thị hai phía.
ðồ thị phẳng.

ðồ thị ñược gọi là ñồ thị phẳng nếu ta có thể vẽ nó trên mặt phẳng sao cho các
cạnh của nó không cắt nhau ngoài ở ñỉnh. Cách vẽ như vậy sẽ ñược gọi là biểu diễn phẳng
của ñồ thị.
Ví dụ ñồ thị K
4
là phẳng, vì có thể vẽ nó trên mặt phẳng sao cho các cạnh của nó không
cắt nhau ngoài ở ñỉnh (xem hình 2.6).
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
18

Hình 1.15 ðồ thị K
4
là ñồ thị phẳng.
Một ñiều ñáng lưu ý nếu ñồ thị là phẳng thì luôn có thể vẽ nó trên mặt phẳng với
các cạnh nối là các ñoạn thẳng không cắt nhau ngoài ở ñỉnh (ví dụ xem cách vẽ K
4
trong
hình 2.6).
ðể nhận biết xem một ñồ thị có phải là ñồ thị phẳng có thể sử dụng ñịnh lý
Kuratovski, mà ñể phát biểu nó ta cần một số khái niệm sau: Ta gọi một phép chia cạnh
(u,v) của ñồ thị là việc loại bỏ cạnh này khỏi ñồ thị và thêm vào ñồ thị một ñỉnh mới w
cùng với hai cạnh (u,w), (w, u) . Hai ñồ thị G(V,E) và H=(W,F) ñược gọi là ñồng cấu nếu
chúng có thể thu ñược từ cùng một ñồ thị nào ñó nhờ phép chia cạnh.
ðịnh lý 1.5 (Kuratovski). ðồ thị là phẳng khi và chỉ khi nó không chứa ñồ thị con ñồng
cấu với K
3,3
hoặc K

5
.
Trong trường hợp riêng, ñồ thị K
3,3
hoặc K
5
không phải là ñồ thị phẳng. Bài toán về
tính phẳng của ñồ thị K
3,3
là bài toán ñố nổi tiếng về ba căn hộ và ba hệ thống cung cấp
năng lượng cho chúng: Cần xây dựng hệ thống ñường cung cấp năng lượng với mỗi một
căn hộ nói trên sao cho chúng không cắt nhau.
ðồ thị phẳng còn tìm ñược những ứng dụng quan trọng trong công nghệ chế tạo
mạch in.
Biểu diễn phẳng của ñồ thị sẽ chia mặt phẳng ra thành các miền, trong ñó có thể có
cả miền không bị chặng. Ví dụ, biểu diễn phẳng của ñồ thị cho trong Hình 1.16 chia mặt
phẳng ra thành 6 miền R
1,
R
2,
. . . .R
6
.

Hình 1.16 Các miền tương ứng với biểu diễn phẳng của ñồ thị.
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
19

Euler ñã chứng minh ñược rằng các cách biểu diễn phẳng khác nhau của một ñồ thị
ñều chia mặt phẳng ra thành cùng một số miền. ðể chứng minh ñiều ñó, Euler ñã tìm
ñược mối liên hệ giữa số miền, số ñỉnh của ñồ thị và số cạnh của ñồ thị phẳng sau ñây.
ðịnh lý 1.6 (Công thức Euler). Giả sử G là ñồ thị phẳng liên thông với n ñỉnh, m cạnh.
Gọi r là số miền của mặt phẳng bị chia bởi biểu diễn phẳng của G. Khi ñó
r = m-n + 2
Có thể chứng minh ñịnh lý bằng qui nạp. Xét Ví dụ minh hoạ cho áp dụng công
thức Euler.
Ví dụ 1.10 Cho G là ñồ thị phẳng liên thông với 20 ñỉnh, mỗi ñỉnh ñều có bậc là 3. Hỏi
mặt phẳng bị chia làm bao nhiêu phần bởi biểu diễn phẳng của ñồ thị G?
Giải. Do mỗi ñỉnh của ñồ thị ñều có bậc là 3, nên tổng bậc của các ñỉnh là 3x20=60. Từ
ñó suy ra số cạnh của ñồ thị m=60/20=30. Vì vậy, theo công thức Euler, số miền cần tìm

r = 30-20+2=12.

Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
20
Bài 2 Biểu diễn ñồ thị trên máy tính
2.1. Một số phương pháp biểu diễn ñồ thị trên máy tính
ðể lưu trữ ñồ thị và thực hiện các thuật toán khác nhau với ñồ thị trên máy tính cần
phải tìm những cấu trúc dữ liệu thích hợp ñể mô tả ñồ thị. Việc chọn cấu trúc dữ liệu nào
ñể biểu diễn ñồ thị có tác ñộng rất lớn ñến hiệu quả của thuật toán. Vì vậy, việc chọn lựa
cấu trúc dữ liệu ñể biểu diễn ñồ thị phụ thuộc vào từng tình huống cụ thể (bài toán và
thuật toán cụ thể). Trong mục này chúng ta sẽ xét một số phương pháp cơ bản ñược sử
dụng ñể biểu diễn ñồ thị trên máy tính, ñồng thời cũng phân tích một cách ngắn gọn
những ưu ñiểm cũng như những nhược ñiểm của chúng.
2.2.1. 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= {e
1
,
e
2
, . . . ,e
m
}

. Ta gọi ma trận kề của ñồ thị G là ma trận.
A=( a
i,j
: i, j = 1, 2, . . . ,n)
Với các phần tử ñược xác ñịnh theo qui tắc sau ñây:
a
i,j
= 1 , nếu có cạnh từ i sang j hay (i, j) ∈ E, i, j =1, 2,. . ., n.
a
i, j
= 0, trong trường hợp còn lại tức là không có cạnh(i, j)
Ví dụ 2.1 Ma trận trận kề của ñồ thị vô hướng G cho trong Hình 2.1 là:
1 2 3 4 5 6
1 0 1 1 0 1 0
2 1 0 1 0 1 0
3 1 1 0 1 0 0
4 0 0 1 0 1 1
5 1 1 0 1 0 1
6 0 0 0 1 1 0
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010


Trang
21

Hình 2.1 ðồ thị vô hướng G và ðồ thị có hướng G
1
.
Các tính chất của ma trận kề:
1) Rõ ràng 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], i,j =1,2,. . .,n. Ngược lại, mỗi (0,1)-ma trận ñối xứng cấp n sẽ tương ứng,
chính xác ñến cách ñánh số ñỉnh (còn nói là: chính xác ñến ñẳng cấu), với một ñơn ñồ thị
vô hướng n ñỉnh.
2) 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).
3) nếu ký hiệu a
ịj
p
, i,j=1, 2,. . . ,n là phần tử của ma trận A
p
=A.A. . .A p thừa số. Khi ñó
a
ịj
p
, i,j=1, 2,. . . ,n cho ta số ñường ñi khác nhau từ ñỉnh i ñến ñỉnh j qua p-1 ñỉnh trung
gian.
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ụ 2.2 ðồ thị có hướng G
1
cho trong Hình 2.1 có ma trận kề là ma trận sau:
1 2 3 4 5 6
1 0 1 1 0 0 0

2 0 0 0 0 0 0
3 0 1 0 1 0 0
4 0 0 0 0 0 0
5 0 0 0 1 0 1
6 0 0 0 0 1 0
Lưu ý rằng ma trận kề của ñồ thị có hướng không phải là ma trận ñối xứng.
Chú ý: Trên ñây chúng ta chỉ xét ñơ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 hai ñỉnh i, j.
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
22
Trong rất nhiều vấn ñề ứng dụng 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ì mà 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ố δ , tuỳ 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 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 n

2
ñơn vị bộ nhớ ñể lưu trữ ma trận
kề của nó.
2.2.2. Danh sách cạnh (cung)
Trong trường hợp ñồ thị thưa (ñồ thị có số cạnh m thoả mãn bất dẳng thức: m <
6n) người ta thường dùng cách biểu diễn ñồ thị dưới dạng danh sách cạnh.
Trong cách biểu diễn ñồ thị bởi danh sách cạnh (cung) chúng ta sẽ lưu trữ danh
sách tất cả các cạnh (cung) của ñồ thị vô hướng (có hướng). Một cạnh (cung) e = (x,y) của
ñồ thị sẽ tương ứng với hai biến Dau[e], Cuoi[e]. như vậy, ñể lưu trữ ñồ thị ta cần sử dụng
2m ñơn vị bộ nhớ. Nhược ñiểm của cách biểu diễn này là ñể xác ñịnh những ñỉnh nào của
ñồ thị là kề với một ñỉnh cho trước chúng ta phải làm cỡ m phép so sánh (khi duyệt qua
danh sách tất cả các cạnh của ñồ thị).
Chú ý: Trong trường hợp ñồ thị có trọng số ta cần thêm m ñơn vị bộ nhớ ñể lưu trữ trọng
số của các cạnh.
Ví dụ 2.3 Danh sách cạnh (cung) của ñồ thị G (G
1
) cho trong Hình 2.1 là:
Dau Cuoi Dau Cuoi
1 2 1 2
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
23
1 3 1 3
1 5 3 2
2 3 3 4
2 5 5 4
3 4 5 6
4 5 6 5

4 6
5 6
Danh sách cạnh của G Danh sánh cung của G
1

2.2.3. Danh sách kề
Trong rất nhiều vấn ñề ứng dụng của lý thuyết ñồ thị, cách biểu diễn ñồ thị dưới
dạng danh sách kề là cách biểu diễn thích hợp nhất ñược sử dụng.
Trong cách biểu diễn này, với mỗi ñỉnh v của ñồ thị chúng ta lưu trữ danh sách các ñỉnh
kề với nó, mà ta sẽ ký hiệu là
Ke(v)= { u ∈ V: (v,u)∈ E }
Khi ñó vòng lặp thực hiện với mỗi một phần tử trong danh sách này theo thứ tự các
phần tử ñược sắp xếp trong nó sẽ ñược viết như sau:
for u ∈ Ke(v) do. . .
Chẳng hạn, trên PASCAL có thể mô tả danh sách này như sau (Gọi là cấu trúc Forward
Star):
Const
Giáo trình
TOÁN RỜI RẠC 2 Bộ môn Công nghệ phần mềm - 2010

Trang
24
m=1000; {m-so canh}
n= 100; {n-so dinh}
var
Ke: array[1..m] of integer;
Tro: array[1..n+1] of integer;
Trong ñó Tro[i] ghi nhận vị trí bắt ñầu của danh sách kề của ñỉnh i, i=1, 2,. . .,n,
Tro[n+1]=2m+1.
Khi ñó dòng lệnh qui ước

for u

Ke(v) do
begin . . . end.
Có thể thay thế bởi cấu trúc lệnh cụ thể trên PASCAL như sau
For i:=Tro[v] to Tro[v+1]-1 do
Begin
U:=Ke[i];
. . . .
End;
Trong rất nhiều thuật toán làm việc với ñồ thị chúng ta thường xuyên phải thực
hiện các thao tác: Thêm hoặc bớt một số cạnh. Trong trường hợp này cấu trúc dữ liệu
dùng ở trên là không thuận tiện. Khi ñó nên chuyển sang sử dụng danh sách kề liên kết
(Linked Adjancency List) như mô tả trong chương trình nhập danh sách kề của ñồ thị từ
bàn phím và ñưa danh sách ñó ra màn hình sau ñây:
Program AdjList;
Const
maxV=100;
Type
link=^node;

×