Nếu e =u, v là cạnh của đồ thị 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à cạnh e 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 đ
Trang 1Ch-ơng 6
các khái niệm cơ bản của lý thuyết đồ thị
biểu diễn đồ thị trên máy tính
6.1 Các khái niệm cơ bản của lý thuyết đồ thị
Lý thuyết đồ thị là một lĩnh vực đã đ-ợc nghiên cứu từ lâu và có nhiều ứng dụng hiện đại 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 hai hợp chất hoá học có cùng công thức phân tử nh-ng có cấu trúc khác nhau nhờ đồ thị Chúng
ta cũng có thể xác định xem 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ị với các trọng số đ-ợc gán cho các cạnh của nó có thể dùng để giải các bài toán nh- bài toán tìm đ-ờng đi ngắn nhất giữa hai thành phố trong một 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 khoá biểu và phân chia kênh cho các đài truyền hình
6.1.1 Định nghĩa đồ 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
đó 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 các cặp đỉnh của đồ thị
Nhiều bài toán thuộc những lĩnh vực rất khác nhau có thể giải đ-ợc bằng mô hình đồ thị Chẳng hạn, ng-ời ta có thể dùng đồ thị để biểu diễn kết quả của cuộc thi đấu thể thao Chúng ta cũng sẽ chỉ ra rằng có thể dùng đồ thị để giải các bài toán nh- bài toán tính số tổ hợp khác nhau của các chuyến bay giữa hai thành phố trong một mạng hàng không, hay để giải bài toán ng-ời du lịch, hoặc bài toán tìm số màu cần thiết để tô các vùng khác nhau của một bản
đồ,
Định nghĩa 6.1 Đơn đồ thị vô h-ớng G = (V, E) bao gồm một tập không
rỗng V là tập các đỉnh, và một tập 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
Trang 2Ví dụ 6.1 Giả sử một mạng máy tính gồm các máy tính và các đ-ờng điện
thoại Ta có thể biểu diễn vị trí của mỗi máy tính bằng một điểm và mỗi đ-ờng
điện thoại bằng một cung nh- trong hình 6.1
Định nghĩa 6.2 Đa đồ thị vô h-ớng G = (V, E) bao gồm V là tập các đỉnh, 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 và 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
Ví dụ 6.2 Với mạng máy tính ở ví dụ 6.1, 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 đ-ợc minh hoạ bởi hình 6.2
Hà Nội
Trang 3Định nghĩa 6.3 Giả đồ thị vô h-ớng G = (V, E) bao gồm V là tập các đỉnh, 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)
Ví dụ 6.3 Một mạng máy tính có đ-ờng điện thoại từ một máy tính đến chính
nó Đó là mạng trên hình 6.3 Trong tr-ờng hợp này ta có giả đồ thị vô h-ớng nh- hình 6.3
Hình 6.3
Định nghĩa 6.4 Đơn đồ thị có h-ớng G = (V, E) bao gồm V là tập các đỉnh, 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
Ví dụ 6.4 Các đ-ờng điện thoại trong một mạng máy tính có thể chỉ hoạt
động theo một chiều Chẳng hạn trên hình 6.4 máy chủ ở TP HCM có thể chỉ nhận dữ liệu từ các máy khác mà không thể gửi dữ liệu đi Các đ-ờng điện thoại 2 chiều đ-ợc biểu diễn bằng một cặp cạch có chiều ng-ợc nhau Khi đó
ta có một đơn đồ thị có h-ớng
Hình 6.4
Định nghĩa 6.5 Đa đồ thị có h-ớng G = (V, E) bao gồm V là tập các đỉnh, 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, e2 t-ơng ứng với cùng một cặp đỉnh đ-ợc gọi là cung lặp
Hà Nội
Trang 46.1.2 Các thuật ngữ cơ bản
Định nghĩa 6.6 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ị 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à cạnh e 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)
Định nghĩa 6.7 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ó, riêng khuyên tại một đỉnh đ-ợc tính hai lần cho bậc của nó Bậc
của đỉnh kí hiệu là deg(v)
Ví dụ 6.5 Bậc của các đỉnh trong các đồ thị G và H trên Hình 6.5 là bao nhiêu
Giải: Trong G, deg(a) = 1, deg(b) = deg(e) = deg(c) = 4, deg(f) =3, deg(g) = 0
Trong H, deg(a) = 1, deg(b) = 6, deg(e) = deg(f) = 5, deg(c) = 3
Đỉnh bậc 0 gọi là đỉnh cô lập Đỉnh bậc 1 đ-ợc gọi là đỉnh treo
Định lý 6.1 Giả sử G =(V, E) là đồ thị vô h-ớng với m cạnh Khi đó
2m=
V v
V )
deg(
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 2 lần
số cạnh
Ví dụ 6.6 Có bao nhiêu cạnh trong đồ thị vô h-ớng có n đỉnh, mỗi đỉnh có
bậc bằng 6
Giải: Vì tổng tất cả các bậc của đồ thị là 6.n, nên theo định lý 1 suy ra
2.m = 6.n hay m = 3.n Vậy số cạnh của đồ thị là 3.n
Trang 5) deg(
) deg(
) deg(
2
V v V
v V
v
v v
v m
Vì deg(v) là chẵn với v V1 nên suy ra là chẵn Do 2m là một số chẵn, vì vậy là chẵn, do deg(v) là lẻ với v V2 nên số đỉnh bậc lẻ là một số chẵn
Định nghĩa 6.8 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 sẽ đ-ợc gọi là đỉnh đầu,
đỉnh v sẽ đ-ợc gọi là đỉnh cuối của cung (u, v) Đỉnh đầu và đỉnh cuối của khuyên là trùng nhau
Vì các cạnh của đồ thị có h-ớng là các cặp có thứ tự, nên định nghĩa bậc của đỉnh cần phải phản ánh đ-ợc số các cạnh nhận đỉnh này là đỉnh đầu (ra khỏi đỉnh này) và số các cạnh nhận đỉnh này là đỉnh cuối (đi vào đỉnh này)
Định nghĩa 6.9 Trong đồ thị có h-ớng ta gọi bậc ra của đỉnh v kí hiệu là
deg+(v) là số cung của đồ thị đi ra khỏi nó, ta gọi bậc vào của đỉnh v kí hiệu là deg-(v) là số cung của đồ thị đi vào nó
Ví dụ 6.7 Tìm bậc vào và bậc ra của mỗi đỉnh của đồ thị có h-ớng cho trong
hình 6.6
Hình 6.6 Giải : deg+
(a) = 3, deg+(b) = deg+(c) = deg+(d) = 1, deg+(e) = 2
deg-(a) = 1, deg-(b) = 1, deg-(c) = 2, deg-(d) = 2, deg-(e) = 2
Định lý 6.3 Giả sử G = (V, E) là đồ thị có h-ớng Khi đó:
v v E
V v V
( deg
1
) deg(
V v
v
2
) deg(
V v
Trang 6Chứng minh: Vì mỗi cung có một đỉnh đầu và một đỉnh cuối nên tổng các
bậc vào và tổng các bậc ra của tất cả các đỉnh trong một đồ thị có h-ớng là bằng nhau và bằng số cạnh của nó
Một số tính chất của đồ thị có h-ớng không phụ thuộc vào h-ớng của các cung của nó Do đó, sẽ thuận lợi hơn nếu ta bỏ qua h-ớng trên các cung của
đồ thị Đồ thị thu đ-ợc bằng cách này đ-ợc gọi là đồ thị vô h-ớng t-ơng ứng
Đồ thị có h-ớng và đồ thị vô h-ớng t-ơng ứng có cùng số cạnh
6.1.3 Đ-ờng đi, chu trình, đồ thị liên thông
Định nghĩa 6.10 Đ-ờ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:
x0, 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 dãy các cạnh (x0, x1), (x1,
x2),…,(xn-1, xn) Đỉnh u gọi là đỉnh đầu, còn đỉnh v 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 hoặc chu trình khi đó gọi là đi qua các đỉnh x0, x1, …, xn-1, xn
Đ-ờng đi hay chu trình đ-ợc gọi là đơn nếu nó không chứa cùng một cạnh
quá một lần
Ví dụ 6.8 Trên đồ thị vô h-ớng cho trong hình 6.7 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à đuờng đi đơn, do cạnh (a, b) có mặt trong nó hai lần
Trang 7Trong đó 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ãy 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 nó không chứa cùng một cung quá một lần
Ví dụ 6.9
Hình 6.8
Trên đồ thị có h-ớng cho trong hình 6.8 ta có a, b, c, d là đ-ờng đi đơn độ dài
3 Còn a, b, c, d, b , a là chu trình độ dài 4 Đ-ờng đi a, b, e, c, a, b có độ dài là
5 không phải là đ-ờng đi đơn, do cung (a, b) có mặt trong nó 2 lần
Định nghĩa 6.12 Đồ thị vô h-ớng G = (V, E) đ-ợc gọi là liên thông nếu có
đ-ờng đi giữa mọi cặp đỉnh phân biệt của đồ thị
Ví dụ 6.10 Trong hình 6.9: Đồ thị G là liên thông, còn đồ thị H là không liên
thông Đồ thị H gồm 3 thành phần liên thông H1, H2, H3
Hình 6.9
Định lý 6.4 Giữa mọi cặp đỉnh phân biệt của một đồ thị vô h-ớng liên thông
luôn có đ-ờng đi đơn
Chứng minh : Giả sử u và v là hai đỉnh phân biệt của một đồ thị vô h-ớng
liên thông G = (V, E) Vì G là liên thông nên có ít nhất một đ-ờng đi giữa u
Trang 8và v Gọi x0, x1, , xn, với x0=u và xn=v, là dãy các đỉnh của đ-ờng đi có độ
dà i ngắn nhất Dãy này chính là đ-ờng đi đơn cần tìm Thật vậy, giả sử nó không là đ-ờng đi đơn, khi đó xi=xj với 0 i < j Điều nà y có nghĩa là giữa các đỉnh u và v có đ-ờng đi ngắn hơn qua các đỉnh x0, x1, ., xi-1, xj, ., xnnhận được bằng cách xóa đi các cạnh t-ơng ứng với dãy các đỉnh xi, , xj-1
Định nghĩa 6.13 Ta gọi đồ thị con của đồ thị G=(V, E) là đồ thị H=(W, F)
trong đó W V và F E
Một đồ thị không liên thông là hợp của hai hay nhiều đồ thị con liên thông, mỗi cặp các đồ thị con nà y không có đỉnh chung Các đồ thị con liên thông rời nhau như vậy được gọi là các thà nh phần liên thông của đồ thị đang xét Nh- vậy, một đồ thị là liên thông khi và chỉ khi nó chỉ có một thà nh phần liên thông
Ví dụ 6.11 Đồ thị H trong hình 6.9 gồm 3 thành phần liên thông 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ó 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 6.14 Đỉ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ụ 6.12 Trong đồ thị G ở hình 6.9, đỉnh u, x, v là các đỉnh rẽ nhánh còn
các cạnh (x, z) và (v, w) 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ó xem xét đến h-ớng trên các cung hay không
Định nghĩa 6.15 Đồ thị có h-ớng G = (V, E) đ-ợ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 6.16 Đồ thị có h-ớng G=(V, E) đ-ợ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
Trang 9Rõ ràng nếu muốn đồ 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à không luôn đúng, nh- chỉ ra trong thí dụ d-ới đây
Ví dụ 6.13: Trong hình 6.10 đồ 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
Hình 6.10
Vấn đề đặ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ý 6.5 Đồ 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 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ó 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
Trang 106.1.4 Một số dạng đồ thị đặc biệt
Đồ thị đầy đủ Đồ thị đầy đủ n đỉnh, ký hiệu là Kn, là một đơn đồ thị chứa
đúng một cạnh nối mỗi cặp đỉnh phân biệt Đồ thị đầy đủ Kn có tất cả n(n-1)/2 cạnh, mỗi đỉnh của Kn có bậc là n-1
Ví dụ 6.14 Các đồ thị K3, K4, K5 cho trong hình 6.11 là các đồ thị đầy đủ
Trang 11Đồ 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 hai 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| =
Đồ thị phân đôi (Đồ thị hai phía) Một đồ thị đơn G đ-ợc gọi là phân đôi nếu
tập các đỉnh V có thể phân làm hai tập con không rỗng, rời nhau V1 và V2 sao cho mỗi cạnh của đồ thị nối một đỉnh của V1 với một đỉnh của V2
Nếu đồ thị phân đôi G = (V1V2, E) sao cho với mọi v1V1, v2V2, (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
Ví dụ 6.18 Trong hình 6.15 là các đồ thị phân đôi đầy đủ K2,4, K3,3
00 1
00 0
01 1 110
Trang 12Định lý 6.6 Một đơn đồ thị là đồ thị phân đôi khi và chỉ khi nó không chứa
thì đồ thị không phải là phân đôi, kết thúc Ng-ợc lại đặt X = XT Tiếp tục
xét như vậy đối với T’ l¯ tập c²c đỉnh kề cða T,…
Đồ 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ị
Trong ví dụ hình 6.16 đồ thị K4 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
Hình 6.16
6.2 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 một thuật toán Vì vậy, việc lựa chọn cấu trúc để 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 đồ
Trang 13thị 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
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ố
6.2.1 Biểu diễn đồ thị bằng danh sách cạnh
Trong tr-ờng hợp đồ thị th-a (đồ thị có số cạnh m thoả mãn bất đẳng thức : m < 6n) ng-ời ta th-ờng dùng cách biểu diễn đồ thị bởi 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ỗi 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ị) Trong tr-ờng hợp đồ thị có trọng số ta cần thêm m đơn vị bộ nhớ
6.2.2 Biểu diễn đồ thị bằng 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 Danh sách này chỉ rõ các đỉnh kề với mỗi đỉnh của đồ thị
e
d
c
Trang 14Xét đơn đồ thị vô h-ớng G=(V, E), với tập đỉnh V={1,2, , n} và tập cạnh E ={e1, e2, , en} Ta gọi ma trận kề A của đồ thị G ứng với danh sách các đỉnh này là ma trận không-một cấp n x n với các phần tử đ-ợc xác định theo quy tắc sau đây:
aij=0 nếu i,j E và aij=1, nếu ( i,j )E (i,j=1,2,…,n)
Ví dụ 6.21 Ma trận kề của đồ thị vô h-ớng G cho trong hình 6.18 là :
1 0 1 0 0 1
0 1 0 1 1 0
0 0 1 0 1 0
0 0 1 1 0 1
1 1 0 0 1 0
Trang 15A[i,j]= A[j,i] i,j=1,2,…,n
Ng-ợc lại, mỗi ma trận đối xứng cấp n mà các phần tử là 0 hoặc 1 sẽ t-ơng ứng với một đơn đồ thị vô h-ớng n đỉnh
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 nhau 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ác cạnh nối hai đỉnh i và j 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
trong đó c(i,j) là trọng số của cạnh (i,j), và
c[i,j]= nếu (i,j ) E
0 0 0 1 0
0 0 0 0 0
0 0 1 0 0
0 0 0 1 0
Trang 16trong đó 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
sử dụng n2 đơn vị bộ nhớ để l-u trữ ma trận kề của nó
6.2.4 Sự đẳng cấu của các đồ thị
Thông th-ờng, ng-ời ta cần biết xem có thể vẽ đ-ợc hai đồ thị theo cùng một cách không Chẳng hạn, trong hóa học, đồ thị th-ờng để tạo mô hình các hợp chất Các hợp chất khác nhau có thể có cùng công thức phân tử nh-ng cấu trúc có thể khác nhau Các hợp chất nh- vật sẽ đ-ợc biểu diễn bằng các đồ thị
mà ta không thể vẽ đ-ợc cùng một cách Những đồ thị biểu diễn các hợp chất
đã biết có thể đ-ợc dùng để xác định xem một hợp chất đã biết có thể đ-ợc dùng để xác định xem một hợp chất cho là mới thực ra đã biết từ tr-ớc ch-a? Sau đây là một vài thuật ngữ đối với các đồ thị có cấu trúc nh- nhau
Định nghĩa 6.17. Các đơn đồ thị G1=(V1,E1) và G2=(V2,E2) đ-ợc gọi là đẳng cấu nếu tồn tại một song ánh f từ V1 lên V2 sao cho các đỉnh u và v là liền kề trong G1 khi và chỉ khi f(u) và f(v) là liền kề trong G2 với mọi u và v trong
V1 Ánh xạ f như thế gọi là một phép đẳng cấu
Thông thường, để chứng tỏ hai đơn đồ thị là không đẳng cấu, người ta chỉ
ra chúng không có chung một tính chất mà các đơn đồ thị đẳng cấu cần phải
có Tính chất như thế gọi là một bất biến đối với phép đẳng cấu của các đơn
đồ thị Chẳng hạn, các đơn đồ thị đẳng cấu có cùng số đỉnh Hơn thế nữa, các
đơn đồ thị đẳng cấu có cùng số cạnh, bởi vì phép t-ơng ứng 1-1 giữa các đỉnh
sẽ tạo ra phép t-ơng ứng 1-1 giữa các cạnh Và sau nữa, bậc của các đỉnh của các đơn đồ thị đẳng cấu phải nh- nhau Nghĩa là, đỉnh v bậc k trong G1 phải t-ơng ứng với đỉnh f(v) bậc k trong G2, vì đỉnh w trong G1 là nối đỉnh v nếu và chỉ nếu f(v) và f(w) là kề trong G2
Ví dụ 6.23 Hai đơn đồ thị G1 và G2 sau là đẳng cấu qua phép đẳng cấu f:
Trang 172 của G2 (y và z) là kề nhau
a b
d
u v
y w
H×nh 6.22
Trang 182 Đồ thị K2 có bao nhiêu đồ thị con có ít nhất một đỉnh?
3 Đồ thị K3 có bao nhiêu đồ thị con có ít nhất một đỉnh?
4 Đồ thị W3 có bao nhiêu đồ thị con có ít nhất một đỉnh?
5 Có thể tồn tại đồ thị đơn có 10 đỉnh, mỗi đỉnh có bậc bằng 5 không?
6 Đồ thị đơn đ-ợc gọi là chính qui nếu mọi đỉnh của nó có bậc nh- nhau Đồ thị đ-ợc gọi là n - chính qui nếu mọi đỉnh của nó có bậc n.Với các giá trị nào của n đồ thị sau đây là chính qui:
9 Chứng minh rằng trong một đơn đồ thị luôn tồn tại hai đỉnh có cùng bậc
10 Chứng minh rằng trong một đồ thị với n đỉnh (n >2) mà có đúng hai đỉnh cùng bậc thì hai đỉnh này không thể đồng thời có bậc 0 hoặc n-1
11 Hãy vẽ các đồ thị vô hướng được biểu diễn bởi các ma trận kề sau:
Trang 1912 Nªu ý nghĩa của tổng c¸c phần tử trªn một hà ng (t.ư cột) của một ma trận liền kề đối với một đồ thị v« hướng ? Đối với đồ thị cã hướng ?
1 0 0 0
1 0 0 1
1 0 1 0
1 0 0 1
1 0 0 1
1 1 1 0
1 1 0 0 0
1 0 1 0 1
0 0 0 1 1
0 1 0 0 1
0 1 1 1 0
1 0 0 1 0
Trang 2018 Đơn đồ thị G’=(V,E’) được gọi là đồ thị bù của đơn đồ thị G=(V,E) nếu
G và G’ không có cạnh chung nà o (E E’=) và G G’ là đồ thị đầy đủ
Dễ thấy rằng nếu G’ là bù của G thì G cũng là bù của G’ Khi đó ta nói hai đồ thị là bù nhau Chứng tỏ rằng các đồ thị sau là bù nhau
21 Chứng minh rằng với mọi số tự nhiên n >2, luôn tồn tại đồ thị n đỉnh mà 3
đỉnh bất kỳ của đồ thị đều không cùng bậc
22 Cho V={ 2, 3, 4, 5, 6, 7, 8 } và E là tập hợp các cặp phần tử (u,v) của V sao cho u<v và u,v nguyên tố cùng nhau Hãy vẽ đồ thị có hướng G=(V,E) Tìm số các đường đi phân biệt độ dà i 3 từ đỉnh 2 tới đỉnh 8
23 Hãy tìm số đường đi độ dà i n giữa hai đỉnh liền kề (không liền kề) tùy ý
trong K3,3 với mỗi giá trị của n sau:
a) n=2 b) n=3 c) n=4
24 Một cuộc họp có ít nhất 3 đại biểu đến dự Mỗi ng-ời quen ít nhất hai đại biểu khác Chứng minh rằng có thể xếp đ-ợc một số đại biểu ngồi xung quanh một bàn tròn mà mỗi ng-ời ngồi giữa hai ng-ời mà đại biểu đó quen
25 Trong một cuộc họp có đúng hai đại biểu không quen nhau và mỗi đại biểu nà y có một số lẻ người quen đến dự Chứng minh rằng luôn luôn có thể xếp một số đại biểu ngồi chen giữa hai đại biểu nói trên, để mỗi người ngồi giữa hai người mà anh ta quen
y
Trang 21kế các thuật toán trên đồ thị Trong mục này chúng ta sẽ giới thiệu hai thuật toán tìm kếm cơ bản trên đồ thị: thuật toán tìm kiếm theo chiều sâu và thuật toán tìm kiếm theo chiều rộng và ứng dụng của chúng vào việc giải một số bài toán trên đồ thị
Trong mục này chúng ta sẽ xét đồ thị vô h-ớng G=(V, E), với n đỉnh và
m cạnh
Chúng ta sẽ quan tâm đến việc đánh giá hiệu quả của các thuật toán trên
đồ thị và một trong những đặc tr-ng quan trọng nhất là độ phức tạp tính toán, tức là số phép toán mà thuật toán cần phải thực hiện trong tình huống xấu nhất
đ-ợc biểu diễn nh- là hàm của kích th-ớc đầu vào của bài toán Trong các thuật toán trên đồ thị, đầu vào là đồ thị G=(V, E).Vì vậy kích th-ớc của bài toán là số đỉnh n và số cạnh m của đồ thị Khi đó dộ phức tạp tính toán của thuật toán sẽ đ-ợc biểu diễn nh- là hàm của hai biến số f(n, m) là số phép toán nhiều nhất cần phải thực hiện theo thuật toán đối với mọi đồ thị với n đỉnh và
m cạnh Khi so sánh tốc độ tăng của hai hàm nhận giá trị không âm f(n) và g(n) chúng ta sẽ sử dụng kí hiệu sau:
F(n) = O(g(n)
Trang 22 tìm đ-ợc các hằng số C, N>0 sao cho f(n) ≤ Cg(n) với mọi n N
T-ơng tự nh- vậy nếu f(n1, n2…, nk), g(n1, n2…, nk) là các hàm nhiều biến, ta viết :
f(n1, n2…, nk) = O(g(n1, n2…, nk)) tìm đ-ợc các hằng số C, N >0 sao cho
f(n1, n2…, nk) ≤ C g(n1, n2…, nk) với mọi n1, n2,…, nk N
Nếu độ phức tạp tính toán của thuật toán là O(g(n)) thì ta sẽ còn nói là nó đòi hỏi thời gian tính cỡ O(g(n))
7.1 Tìm kiếm theo chiều sâu
7.1.1 Giới thiệu thuật toán
ý t-ởng chính của thuật toán có thể trình bày nh- sau.Ta sẽ bắt đầu tìm kiếm từ một đỉnh v0 nào đó của đồ thị Sau đó chọn u là một đỉnh tuỳ ý kề với
v0 và lặp lại quá trình đối với u ở b-ớc tổng quát, giả sử ta đang xét đỉnh v Nếu nh- trong số các đỉnh kề với v tìm đ-ợc đỉnh w là ch-a đ-ợc xét thì ta sẽ xét đỉnh này (nó sẽ trở thành đã xét) và bắt đầu từ nó ta sẽ tiếp tục quá trình tìm kiếm Còn nếu nh- không còn đỉnh nào kề với v là ch-a xét thì ta sẽ nói rằng đỉnh này đã duyệt xong và quay trở lại tiếp tục tìm kiếm từ đỉnh mà tr-ớc
đó ta đến đ-ợc đỉnh v (nếu v = v0 thì kết thúc tìm kiếm) Có thể nói nôm na là tìm kiếm theo chiều sâu bắt đầu từ đỉnh v đ-ợc thực hiện trên cơ sở tìm kiếm theo chiều sâu từ tất cả các đỉnh ch-a xét kề với v Quá trình này có thể mô tả bởi thủ tục đệ quy sau đây:
Procedure DFS (v);
(*Tìm kiếm theo chiều sâu bắt đầu từ đỉnh v; mảng chuaxet gồm n phần tử dùng để ghi nhận việc đã thăm hay ch-a các đỉnh của đồ thị, đỉnh v ch-a đ-ợc thăm thì chuaxet[v] có giá trị ttrue, ng-ợc lại có giá trị false Với mỗi đỉnh v, Ke(v) l-u trữ danh sách các đỉnh kề với đỉnh v *)
Begin
Thăm_đỉnh(v);
Trang 23đối với tất cả các đỉnh kề với nó
Mặt khác, do mỗi khi thăm đỉnh v xong, biến ch-a xét(v) đ-ợc đặt giá trị false nên mỗi đỉnh sẽ đ-ợc thăm đúng một lần Thụât toán lần l-ợt sẽ tiến hành tìm kiếm từ các đỉnh ch-a đ-ợc thăm, tức là sẽ xét qua tất cả các đỉnh của đồ thị (không nhất thiết phải là liên thông)
Để đánh giá độ phức tạp tính toán của thủ tục, tr-ớc hết nhận thấy rằng
số phép toán cần thực hiện trong hai chu trình của thuật toán (hai vòng for ở ch-ơng trình chính) là cỡ n Thủ tục DFS phải thực hiện không quá n lần Tổng số phép toán cần thực hiện trong các thủ tục này là O(n+m) Do trong các thủ tục này ta phải xét qua tất cả các cạnh và các đỉnh của đồ thị
Vậy độ phức tạp của thuật toán là O(n+m)
7.1.2 Ví dụ minh họa
Xét đồ thị trong hình 7.1 Các đỉnh của nó đ-ợc đánh số lại theo thứ tự chúng đ-ợc thăm theo thủ tục tìm kiếm theo chiều sâu mô tả ở trên Giả thiết rằng các đỉnh trong danh sách kề của đỉnh v: (Ke(v)) đ-ợc sắp xếp theo thứ tự tăng dần của chỉ số
Trang 24
Hình 7.1
(Trong hình 7.1 chỉ số trong ngoặc là chỉ số các đỉnh đ-ợc đánh theo thứ tự
đ-ợc thăm trong thuật toán tìm kiếm theo chiều sâu)
Thụât toán tìm kiếm theo chiều sâu trên đồ thị vô h-ớng trình bày ở trên dễ dàng có thể mô tả lại cho đồ thị có h-ớng Trong tr-ờng hợp đồ thị có h-ớng, thủ tục DFS(v) sẽ cho phép thăm tất cả các đỉnh u nào mà từ v có
đ-ờng đi đến u Độ phức tạp của thuật toán là O(n+m)
7.2 Tìm kiếm theo chiều rộng
7.2.1 Giới thiệu thuật toán
Để ý rằng thuật toán tìm kiếm theo chiều sâu đỉnh đ-ợc thăm càng muộn sẽ càng sớm trở thành đã duyệt xong Điều đó là hệ quả tất yếu của việc các đỉnh đ-ợc thăm sẽ đ-ợc kết nạp vào trong ngăn xếp (STACK) Tìm kiếm theo chiều rộng trên đồ thị, nếu nói một cách ngắn gọn, đ-ợc xây dựng dựa trên cơ sở thay thế ngăn xếp (STACK) bởi hàng đợi (QUEUE) Với sự cải tiến nh- vậy, đỉnh đ-ợc thăm càng sớm sẽ càng sớm trở thành đã duyệt xong (tức
là càng sớm dời khỏi hàng đợi) Một đỉnh sẽ trở thành đã duyệt xong ngay sau khi ta xét xong tất cả các đỉnh kề (ch-a đ-ợc thăm) với nó Thủ tục có thể mô tả nh- sau:
Trang 25đúng một lần Độ phức tạp tính toán của thuật toán là O(n+m)
7.2.2 Ví dụ minh họa
Xét đồ thị trong hình 7.2 Thứ tự thăm đỉnh của đồ thị này theo thuật toán tìm kiếm theo chiều rộng đ-ợc ghi trong ngoặc
Trang 26Hình 7.2
(Trong hình 7.2 chỉ số trong ngoặc là chỉ số các đỉnh đ-ợc đánh theo thứ
tự đ-ợc thăm trong thuật toán tìm kiếm theo chiều rộng)
7.3 Tìm đ-ờng đi và kiểm tra tính liên thông
Trong mục này ta sẽ ứng dụng các thuật toán tìm kiếm mô tả trong các mục tr-ớc vào việc giải hai bài toán cơ bản trên đồ thị: bài toán tìm đ-ờng đi
và bài toán về xác định thành phần liên thông của đồ thị
7.3.1 Bài toán tìm đ-ờng đi giữa hai đỉnh
Bài toán: Giả sử s và t là hai đỉnh nào đó của đồ thị Hãy tìm đ-ờng đi từ s
đến t
Ta đã biết, các thủ tục DFS(s), BFS(s) mỗi thủ tục sẽ cho phép thăm tất cả các đỉnh thuộc cùng một thành phần liên thông với s Vì vậy, sau khi thực hiện xong thủ tục, nếu Chuaxet[t] = false thì t thuộc cùng thành phần liên thông với
s, hay nói một cách khác: tồn tại đ-ờng đi từ s đến t Trong tr-ờng hợp tồn tại
đ-ờng đi, để ghi nhận đ-ờng đi, ta dùng thêm biến Truoc[v] để ghi nhận đỉnh
đi tr-ớc đỉnh v trong đ-ờng đi từ s đến v Khi đó, đối với thủ tục DFS(v) cần sửa đổi câu lệnh if nh- sau:
Trang 27đ-ờng đi ngắn nhất (theo số cạnh) từ đỉnh s đến đỉnh t Điều này đ-ợc suy trực tiếp từ thứ tự thăm đỉnh theo thuật toán tìm kiếm theo chiều rộng
7.3.2 Tìm các thành phần liên thông của đồ thị
Bài toán: Hãy cho biết đồ thị gồm bao nhiêu thành phần liên thông và từng
thành phần liên thông của nó là gồm những đỉnh nào
Vì các thủ tục DFS(s), BFS(s) mỗi thủ tục cho phép thăm tất cả các đỉnh thuộc cùng một thành phần liên thông với s, nên số thành phần liên thông của
đồ thị chính bằng số lần gọi đến thủ tục này Vấn đề còn lại là cách ghi nhận các đỉnh trong thành phần liên thông Ta dùng thêm biến index[v] để ghi nhận chỉ số của thầnh phần liên thông chứa đỉnh v, và dùng thêm biến Inconnect để
đếm số thành phân liên thông Thủ tục Thamdinh(v) trong các thủ tục DFS(v)
và BFS(v) có nhiệm vụ gán: Index[v]:=Inconnect, còn câu lệnh if trong các ch-ơng trình chính gọi đến các thủ tục này cần đ-ợc sửa lại nh- sau:
Trang 28Kết thúc vòng lặp lần thứ hai trong ch-ơng trình chính, Inconnect cho số thành phần liên thông của đồ thị, còn biến mảng Index[v], v V cho phép liệt
b) Theo chiều sâu
2 Viết ch-ơng trình tìm đ-ờng giữa hai đỉnh của đồ thị
3 Viết ch-ơng trình kiểm tra tính liên thông, tìm các thành phần liên thông của đồ thị
Trang 29Ch-ơng 8
Đồ thị EULER và đồ thị Hamilton
C ú thể coi năm 1736 là năm khai sinh lý thuyết đồ thị, với việc cụng
bố lời giải “Bài toỏn về cỏc cầu ở Konigsberg” của nhà toỏn học lỗi lạc Euler (1707-1783) Thành phố Konigsberg thuộc Phổ (nay gọi là Kaliningrad thuộc Nga) được chia thành bốn vựng bằng cỏc nhỏnh sụng Pregel, cỏc vựng này gồm hai vựng bờn bờ sụng, đảo Kneiphof và một miền nằm giữa hai nhỏnh của sụng Pregel Vào thế kỷ 18, người ta xõy bảy chiếc cầu nối cỏc vựng này với nhau
Dõn thành phố từng thắc mắc: “Cú thể nào đi dạo qua tất cả bảy cầu, mỗi cầu chỉ một lần thụi khụng?” Nếu ta coi mỗi khu vực A, B, C, D như một đỉnh và mỗi cầu qua lại hai khu vực là một cạnh nối hai đỉnh thỡ ta cú sơ đồ của Konigsberg là một đa đồ thị G như hỡnh 8.1
Bài toỏn tỡm đường đi qua tất cả cỏc cầu, mỗi cầu chỉ qua một lần cú thể được phỏt biểu lại bằng mụ hỡnh này như sau: Cú tồn tại chu trỡnh đơn trong
đa đồ thị G chứa tất cả cỏc cạnh?
Dưới đõy chỳng ta sẽ nghiờn cứu hai dạng đồ thị đặc biệt là đồ thị Euler
và đồ thị Hamilton Nếu khụng cú giải thớch bổ sung, thuật ngữ đồ thị được dựng để chỉ chung đa đồ thị vụ hướng và cú hướng và thuật ngữ cạnh sẽ dựng
để chỉ chung cạnh của đồ thị vụ hướng cũng như cung của đồ thị cú hướng
Trang 308.1 Đồ thị Euler
8.1.1 Định nghĩa 8.1 Chu trình đơn trong đồ thị G đi qua mỗi cạnh của nó
một lần đ-ợc gọi là chu trình Euler Đ-ờng đi đơn trong G đi qua mỗi cạnh
của nó một lần đ-ợc gọi là đ-ờng đi Euler Đồ thị đ-ợc gọi là đồ thị Euler nếu
có chu trình Euler và gọi là đồ thị nửa Euler nếu nó có đ-ờng đi Euler
Rõ ràng mọi đồ thị Euler luôn là nửa Euler, nh-ng điều ng-ợc lại không
luôn là đúng
Ví dụ 8.1 Đồ thị G1 trong hình 8.2 là đồ thị Euler vì nó có chu trình Euler a,
e, c, d, e, b, a Đồ thị G3 không có chu trình Euler nh-ng nó có đ-ờng đi Euler
a, c, d, e, b, a, d vì thế G3 đồ thị là đồ thị nửa Euler Đồ thị G2 không có chu
trình cũng nh- đ-ờng đi Euler
Hình 8.2.
Ví dụ 8.2 Đồ thị H2 trong hình 8.3 là đồ thị Euler vì nó có chu trình Euler a,
b, c, d, e, a Đồ thị H3 không có chu trình Euler nh-ng nó có đ-ờng đi Euler c,
a, b, c, d, b vì thế H3 là đồ thị nửa Eluer Đồ thị H1 không có chu trình cũng
nh- đ-ờng đi Euler
Trang 31Điều kiện cần và đủ để một đồ thị là một đồ thị Euler đ-ợc Euler tìm ra vào năm 1736 khi ông giải quyết bài toán hóc búa nổi tiếng thời đó về bẩy cái cầu ở thành phố Konigsbig, và đây là định lí đầu tiên của lý thuyết đồ thị
8.1.2 Định lý 8.1 (Định lý 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 chẵn
Bổ đề Nếu bậc của mỗi đỉnh của đồ thị G không nhỏ hơn 2 thì G chứa chu
trình
Chứng minh: Nếu G có cạnh lặp thì khẳng định của bổ đề là hiển nhiên Vì
vậy giả sử G là đơn đồ thị Gọi v là một đỉnh nào đó của G Ta sẽ xây dựng theo quy nạp đ-ờng đi v -> v1 -> v2 ->…
trong đó v1 là đỉnh kề với v, còn với i >=1 chọn vi+1 là kề với vi và vi+1vi-1 (có thể chọn vi+1 nh- vậy là vì deg((vi)>=2) Do tập đỉnh của G là hữu hạn, nên sau một số hữu hạn b-ớc ta phải quay lại một đỉnh đã xuất hiện tr-ớc đó Gọi đỉnh đầu tiên nh- thế là vk Khi đó , đoạn của đ-ờng đi xây dựng nằm giữa hai đỉnh vk là một chu trình
Chứng minh định lí Euler
Cần: giả sử G là đồ thị Euler tức là tồn tại chu trình Euler P trong G Khi
đó cứ mỗi lần chu trình P đi qua 1 đỉnh nào đó của G thì bậc của đỉnh đó tăng lên 2 Mặt khác mỗi cạnh của đồ thị xuất hiện trong p đúng một lần, suy
ra mỗi đỉnh của đồ thị đều có bậc chẵn
Đủ: Quy nạp theo số cạnh của G: Do G liên thông và deg(v) là số chẵn nên
bậc của mỗi đỉnh của nó không nhỏ hơn 2 Từ đó theo bổ đề G phải chứa chu trình C Nếu C đi qua tất cả các cạnh của G thì nó chính là chu trình Euler Giả sử C không đi qua tất cả các cạnh của G Khi đó loại bỏ khỏi G tất cả các cạnh thuộc C ta thu đ-ợc 1 đồ thị mới H (không nhất thiết là liên thông) Số cạnh trong H nhỏ hơn trong G và rõ ràng mỗi đỉnh của H vẫn có bậc là chẵn Theo giả thiết quy nạp trong mỗi thành phần liên thông của H đều tìm đ-ợc chu trình Euler Do G là liên thông nên mỗi thành phần trong H có ít nhất 1
đỉnh chung với chu trình C Vì vậy, ta có thể xây dựng chu trình Euler trong
G nh- sau: Bắt đầu từ một đỉnh nào đó của chu trình C, đi theo các cạnh của
Trang 32chu trình C chừng nào ch-a gặp phải đỉnh không cô lập của H Nếu gặp phải
đỉnh nh- vậy thì đi theo chu trình Euler của thành phần liên thông của H chứa
đỉnh đó Sau đó lại tiếp tục đi theo cạnh của C cho đến khi gặp phải đỉnh không cô lập của H thì lại theo chu trình Euler của thành phần liên thông t-ơng ứng trong H … Quá trình sẽ kết thúc khi ta trở về đỉnh xuất phát, tức
là ta thu đ-ợc chu trình đi qua mỗi cạnh của đồ thị đúng một lần
Hình 8.4 Minh hoạ cho chứng minh định lí Euler
Hệ quả: Đồ thị vô h-ớng liên thông G là nửa Euler khi và chỉ khi nó có
không quá 2 đỉnh là bậc lẻ
Chứng minh Thực vậy nếu G có không quá 2 đỉnh bậc lẻ thì số đỉnh bậc lẻ
chỉ có thể là 0 và 2 Nếu G không có đỉnh bậc lẻ thì theo định lí 1 nó là đồ thị Euler Giả sử G có hai đỉnh bậc lẻ là u và v Gọi H là đồ thị thu đ-ợc từ G bằng cách thêm vào G một đỉnh mới w và hai cạnh (w,u) và (w,v) Khi đó tất cả các đỉnh của H đều có bậc là chẵn, vì vậy theo định lí 1 nó có chu trình Euler C Xoá bỏ khỏi chu trình này đỉnh w và hai cạnh kề nó ta thu đ-ợc
đ-ờng đi Euler trong đồ thị G
Bây giờ ta quay lại bài toán cầu Konigsberg Vì đa đồ thị biểu diễn các cầu này trên hình 8.1 có 4 đỉnh bậc lẻ, nên không tồn tại chu trình Euler Tức là không có cách nào để một ng-ời có thể xuất phát từ một điểm nào đó, đi qua mỗi chiếc cầu đúng một lần rồi lại quay lại điểm xuất phát
Giả sử G là đồ thị Euler, từ chứng minh định lí ta có thể có thủ tục sau để tìm chu trình Euler trong G
Trang 33(* Loại bỏ cạnh (x,y) khỏi đồ thị *)
Ke(x) :=Ke(x) \{y}; Ke(y) := Ke(y) \ {x};
8.1.3 Thuật toán Flor
Xuất phát từ 1 đỉnh u nào đó của G ta đi theo các cạnh của nó 1 cách tuỳ ý chỉ cần tuân thủ 2 quy tắc sau đây:
i) Xoá bỏ cạnh đã đi qua và đồng thời xóa cả những đỉnh cô lập tạo thành ii) ở mỗi b-ớc ta chỉ đi qua cầu khi không còn cách lựa chọn nào khác
Chứng minh tính đúng đắn của thuật toán Flor Tr-ớc tiên ta chỉ ra rằng
thủ tục trên có thể thực hiện đ-ợc ở mỗi b-ớc Giả sử ta đi đến một đỉnh v nào
đó, khi đó nếu vu thì đồ thị con còn lại H là liên thông và chứa đúng hai đỉnh bậc lẻ là v và u Theo hệ quả trong H có đ-ờng đi Euler P từ v đến u Do vệc
Trang 34xoá bỏ cạnh đầu tiên của đ-ờng đi P không làm mất tính liên thông của H, từ
đó suy ra thủ tục có thể thực hiện ở mỗi b-ớc Nếu vu thì lập luận ở trên sẽ vẫn đúng chừng nào vẫn còn cạnh kề với u
Nh- vậy chỉ còn phải chỉ ra là thủ tục trên dẫn đến đ-ờng đi Euler Thực vậy trong G không thể còn cạnh ch-a đi qua khi mà ta sử dụng cạnh cuối cùng
kề với u (trong tr-ờng hợp ng-ợc lại, việc loại bỏ 1 cạnh nào đó kề với 1 trong
số những cạnh còn lại ch-a đi qua sẽ dẫn đến một đồ thị không liên thông và
điều đó là mâu thuẫn với giả thiết ii))
Chứng minh t-ơng tự trong định lý Euler ta thu đ-ợc kết quả sau đây cho đồ thị có h-ớng
Định lý 8.2 Đồ thị có h-ớng liên thông mạnh là đồ thị Euler khi và chỉ khi
từ một thà nh phố, hãy tìm đường đi thăm tất cả các thà nh phố khác, mỗi thà nh phố chỉ một lần, rồi trở về chỗ cũ
Trước Hamilton, có thể là từ thời Euler, người ta đã biết đến một câu đố hóc búa về ‚đường đi của con mã trên bà n cờ‛ Trên bà n cờ, con mã chỉ có thể đi theo đường chéo của hình chữ nhật 2 x 3 hoặc 3 x 2 ô vuông Giả sử
bà n cờ có 8 x 8 ô vuông Hãy tìm đường đi của con mã qua được tất cả các ô của bà n cờ, mỗi ô chỉ một lần rồi trở lại ô xuất phát
Bà i toán nà y được nhiều nhà toán học chú ý, đặc biệt là Euler, De Moivre, Vandermonde,
Hiện nay đã có nhiều lời giải và phương pháp giải cũng có rất nhiều, trong
đó có quy tắc: mỗi lần bố trí con mã ta chọn vị trí mà tại vị trí nà y số ô chưa
Trang 35dùng tới do nó khống chế là ít nhất
Một phương pháp khác dựa trên tính đối xứng của hai nửa bà n cờ Ta tìm
hà nh trình của con mã trên một nửa bà n cờ, rồi lấy đối xứng cho nửa bà n cờ còn lại, sau đó nối hà nh trình của hai nửa đã tìm lại với nhau
Trò chơi và câu đố trên dẫn tới việc khảo sát một lớp đồ thị đặc biệt, đó là
đồ thị Hamilton
8.2.1 Định nghĩa 8.2 Đ-ờng đi qua tất cả các đỉnh của đồ thị mỗi đỉnh
đúng một lần đ-ợc gọi là đ-ờng đi Hamilton Chu trình bắt đầu từ một đỉnh v nào đó qua tất cả các đỉnh còn lại mỗi đỉnh đúng một lần rồi quay trở về v
đ-ợc goi là chu trình Hamilton Đồ thị G đ-ợc gọi là đồ thị Hamilton nếu nó chứa chu trình Hamilton, và gọi là nửa Hamilton nếu nó chứa đ-ờng đi Hamilton Rõ ràng đồ thị Hamilton là nửa Hamiltnon nh-ng điều ng-ợc lại không luôn đúng
Ví dụ 8.3 Trong hình 8.5 G3là Hamilton, G2 là nửa Hamiton còn G1 không là nửa Hamilton
Ví dụ 8.4 Trong hình 8.6 là hình thập nhị diện đều biểu diễn trên mặt phẳng
ta có một đồ thị Hamilton với chu trình Hamilton là:
Trang 36Đường đi Hamilton tương tự đường đi Euler trong cách phát biểu: Đường đi Euler qua mọi cạnh (cung) của đồ thị đúng một lần, đường đi Hamilton qua mọi đỉnh của đồ thị đúng một lần Tuy nhiên, nếu như bài toán tìm đường đi Euler trong một đồ thị đã được giải quyết trọn vẹn, dấu hiệu nhận biết một đồ thị Euler là khá đơn giản và dễ sử dụng, thì các bài toán về tìm đường đi Hamilton và xác định đồ thị Hamilton lại khó hơn rất nhiều Đường đi Hamilton và đồ thị Hamilton có nhiều ý nghĩa thực tiễn và đã được nghiên cứu nhiều, nhưng vẫn còn những khó khăn lớn chưa ai vượt qua được
Người ta chỉ mới tìm được một vài điều kiện đủ để nhận biết một lớp rất nhỏ các đồ thị Hamilton và đồ thị nửa Hamilton Sau đây là một vài kết quả
Định lý 8.3 (Định lý Dirak) Đơn đồ thị vô hướng G với n ≥ 3 đỉnh, mỗi đỉnh
có bậc không nhỏ hơn n/2 là đồ thị Hamilton
Chứng minh: Định lý được chứng minh bằng phản chứng Giả sử G không
có chu trình Hamilton Thêm vào đồ thị G k đỉnh mới và nối chúng với tất cả các đỉnh của G Giả sử k > 0 là số nhỏ nhất các đỉnh cần chèn thêm vào để cho
đồ thị thu được G’ là đồ thị Hamilton Như vậy G' có n+k đỉnh Gọi chu trình Hamilton trong G’ là P và giả sử P = ayb a, trong đó a, b là các đỉnh của G còn y là một trong các đỉnh mới
Trang 37Ngoài ra, nếu a’ là một đỉnh kề nào đú của a (khỏc với y) và b’ là đỉnh nối tiếp ngay a’ trong chu trỡnh thỡ b’ khụng thể là đỉnh kề với b, vỡ nếu trỏi lại thỡ
ta cú thể thay P bởi chu trỡnh aa’ bb’ a, trong đú khụng cú y, mõu thuẫn với giả thiết về tớnh chất nhỏ nhất của k
Như vậy, với mỗi đỉnh kề với a, ta cú một đỉnh khụng kề với b, tức là số đỉnh khụng kề với b khụng thể ớt hơn số đỉnh kề với a (số đỉnh kề với a khụng
nhỏ hơn
2
n+k) Mặt khỏc, theo giả thiết số đỉnh kề với b cũng khụng nhỏ hơn
2
n+k Vỡ khụng cú đỉnh nào vừa kề với b lại vừa khụng kề với b, nờn số đỉnh
của G’ khụng ớt hơn 2(
Định lý sau là tổng quát hoá của định lý Dirak cho đồ thị có h-ớng
Định lí 8.4 Giả sử G là đồ thị có h-ớng liên thông mạnh với n đỉnh Nếu
deg+(v) ≥ n/2, deg-(v) ≥ n/2 ,v
thì G là Hamiltion
Có một số dạng đồ thị mà ta có thể biết khi nào nó là đồ thị Hamiltion
Một ví dụ nh- vậy là đồ thị đấu loại Đồ thị đấu loại là đồ thị có h-ớng mà
trong đó 2 đỉnh bất kì của nó đ-ợc nối với nhau bởi đúng một cung Tên gọi
đấu loại xuất hiện vì đồ thị nh- vậy có thể dùng để biểu diễn kết quả thi đấu
Trang 38bóng chuyền, bóng bàn hay bất cứ một trò chơi nào mà không cho phép hoà
Ta có định lí sau
Định lý 8.5 i) Mọi đồ thị đấu loại là nửa Hamiltion;
ii) Mọi đồ thị đấu loại liên thông mạnh là Hamiltion
Ví dụ 8.6 Trong hình 8.9 là đồ thị đấu loại D5 và đồ thị đấu loại liên thông mạnh D6
Chứng minh: Kn cú
2
) 1
n
cạnh và mỗi chu trỡnh Hamilton cú n cạnh, nờn
số chu trỡnh Hamilton phõn biệt nhiều nhất là
D 6
D 5
1 2
3
4 5
n
Trang 39Các đỉnh được giữ cố định, xoay khung theo chiều kim đồng hồ với các góc quay:
Vớ dụ 8.7 Bài toán sắp xếp chỗ ngồi.
Có n đại biểu từ n nước đến dự hội nghị quốc tế Mỗi ngày họp một lần ngồi quanh một bàn tròn Hỏi phải bố trí bao nhiêu ngày và bố trí như thế nào sao cho trong mỗi ngày, mỗi người có hai người kế bên là bạn mới Lưu ý rằng n người đều muốn làm quen với nhau
Xét đồ thị gồm n đỉnh, mỗi đỉnh ứng với mỗi người dự hội nghị, hai đỉnh
kề nhau khi hai đại biểu tương ứng muốn làm quen với nhau Như vậy, ta có
đồ thị đầy đủ Kn Đồ thị này là Hamilton và rõ ràng mỗi chu trình Hamilton là một cách sắp xếp như yêu cầu của bài toán Bài toán trở thành tìm các chu trình Hamilton phân biệt của đồ thị đầy đủ Kn Và với n lẻ và n 3 thì số ngày
và cách bố trí theo chứng minh của định lý 8.6 Chẳng hạn với
n=11 cú (111)/2=5 cách sắp xếp chỗ ngồi phân biệt như sau (hình 8.11):
Trang 40H×nh 8.11
Định lý 8.7. Nếu G là đồ thị phân đôi với hai tập đỉnh là V1, V2 có số đỉnh
cùng bằng n (n 2) và bậc của mỗi đỉnh lớn hơn
2
n
thì G là một đồ thị
Hamilton
Ví dụ 8.8 Đồ thị phân đôi trong hình 8.12 có bậc của mỗi đỉnh bằng 2 hoặc 3
(> 3/2), nên theo định lý 5, nó là đồ thị Hamilton
Hình 8.12
Định lý 8.8 Nếu G là một đơn đồ thị có n đỉnh và bất kỳ hai đỉnh nào không
kề nhau cũng có tổng số bậc không nhỏ hơn n thì G là một đồ thị Hamilton
Ví dụ 8.9 Đồ thị trong hình 8.13 có 7 đỉnh trong đó có 5 đỉnh bậc 4 và hai
đỉnh bậc 3 kề nhau nên bất kỳ hai đỉnh nào không kề nhau cũng có tổng số bậc bằng 7 hoặc bằng 8, nên đó là một đồ thị Hamilton
9
11
4 6
10
8 2
a e f