UBND THANH PHO HO CHi MINH
Trang 3
CHƯƠNG I
CÁC KHÁI NIỆM CƠ BẢN CỦA LÝ THUYẾT ĐÔ THỊ
(tuân 1 & 2: T: ống cộng có 4 tiết lý thuyết và 4 tiết hưởng dẫn bài tập/thực hành)
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 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ị
Định nghĩa 1
Đơn đồ thị vô hướng G = (V,E) bao gom V la 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
Định nghĩa 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ự
gom hai phan tir khac nhau cua V goi la cac canh Hai canh e; và e; được gọi là cạnh lặp nếu
chúng cùng tương ứng với mội cặp đỉnh
Định nghĩa 3
Giả đô thị vô hướng GŒ = (V, E) bao gom V là tập các đỉnh va 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 Ý gọi là cạnh Cạnh e được gọi là khuyên
nếu nó có dạng e = (u, 1)
Định nghĩa 4
Don đô thị có hướng GŒ = ( È) bao gồm V là tập các đỉnh va E la tap các cặp có thứ tự gom hai
phân tử khác nhau của V gọi là các cung
Định nghĩa 5
Đa đồ thị có hướng Œ = (V, È) bao gôm V là tập các đỉnh va E la tap cac cap có thit te gm hai
phan tit khdc nhau cua V goi la cac cung Hai cung e}, 2 twong ứ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
2 CÁC THUẬT NGỮ CƠ BẢN
Định nghĩa 1
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 dé 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à noi
định u va dinh v, đồng thời các đỉnh u va v sé dugc gọi là các đỉnh đâu của cạnh (u, v)
Trang 4Dinh nghia 2 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) b ; r e d Hinh 1 Dé thivé hướng Thi du 1
Xét đồ thị cho trong hinh 1, ta cd
deg(a) = 1, deg(b) = 4, deg(c) = 4, deg() = 3,
deg(d) = 1, deg(e) = 3, deg(g) = 0
Dinh bac 0 goi la dinh cé Idp Dinh bac | duge goi 1a dinh treo Trong vi du 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) la dé thi 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ố cạnh
Thí dụ 2
Dé thị với n đỉnh có bậc là 6 có bao nhiêu cạnh?
Giải: Theo định lý 1 ta có 2m = ốn Từ đó suy ra tổng các cạnh của đồ thị là 3n Hệ quả
Trong đồ thị vô hướng, số đỉnh bậc lẻ (nghĩa là có bậc là số lẻ) là một số chăn Định nghĩa 3
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à di ra khỏi đỉnh u va vào đỉnh v Đỉnh u(v)
sẽ được gị là đỉnh dau (cudi) cia 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 4
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
Trang 5Hình 2 Đồ thị có hướng Thí dụ 3 Xét đồ thị cho trong hình 2 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ó: |
Dinh ly 2
Giả sử G = (V, E) la do thi có hướng Khi đó
Tổng tất cả các bán bậc ra bằng tông tất cả các bán bậc vào bằng số cung -
Đề 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
3 ĐƯỜNG ĐI CHU TRÌNH ĐỎ THỊ LIÊN THƠNG Định nghĩa 1
Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên đương, trên đỗ thị vô hướng G = (P, E) là dãy xạ, Xi, Xu-l, Xn
trong đó t = xạ, V = Xa, (Xi, Xa) CL, 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:
(xo, X)), (Xã X2), (Xe, Xu)
Dinh u gọi là đỉnh đâu, còn đỉnh v gọi là đỉnh cuối của đường ẩi Đường ẩi có đỉnh dau trùng
-_ với đỉnh cuối (tức là u = v) được gọi là chu trình Đường di hay chu trình được gọi là đơn nếu như không có cạnh nào bị lặp lại
Thí dụ 1
Trên đồ thị vô hướng cho trong hinh 1: a, d, c, f, e 1a đường đi đơn độ đài 4 Còn d, e, c, a không là đường đi, đo (c,e) không phải là cạnh của dé thi Day b, c, £ e, b là chu trình độ dài 4 Đường
Trang 6d e f d e f Hình 1 Duing di trén 46 thi
Khái niệm đường đi và chu trình trên dé 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 2
Đườ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 Ơ
= (, E) là dãy xạ, Xị, Xn-I, Xn
trong đó u = xụ, V= X„ (Xi xa) EE, 1 = Ú, I, 2, , n-l
Đường i nói trên còn có thể biểu diễn dưới dạng dãy các cung: (xo, XI), (XI, X2), ., (Xn-, Xe)
Dinh u gọi là đỉnh đầu, còn đình v gọi là đỉnh cuối của đường đi Đường di cé dinh dau tring
với đỉnh cuối (tức là u = v) được goi là chu trình Đường đi hay chu trình được gọi la don nếu
như không có cạnh nào bị lặp lại |
Thi du 2
Trên đồ thị có hướng cho trong hinh 1: a, d, c, f, e la dwong đ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 Định nghĩa 3
Đà 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 nghĩa 4
- Ta gọi đồ thị con của đồ thị G = (V, E) là đỗ thị H = (W, F), trong đó W c V và F€E
Trong trường hợp đồ thị là không liên thông, nó sẽ rã ra thành một số đồ thị con liên thông đôi
một không có đỉnh chung Những dé thi con liên thông như vậy ta sẽ gọi là các “hành phan lién
thông của đồ thị
Định nghĩa 5
Đỉ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ị |
Trang 7
Đề thị có hướng G = (V, E) được goi 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 7
Đề 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à vô hướng liên thông 4 MỘT SỐ DẠNG ĐỎ THỊ ĐẶC BIỆT Đồ thị đầy đủ Dé thi day đủ n đỉnh, ký hiệu bởi Kạ, là đơn đồ thị vô hướng mà giữa hai đỉnh bất kỳ của nó luôn có cạnh nối Cac dé thi Ks, Ka, Ks cho trong hình đưới đây Hình 1 đồ thị đầy đủ Kạ, Ka, Ks Đồ thị đầy đủ Kạ có tất cả n(n-1)/2 cạnh, nó là đơn đồ thị có nhiều cạnh nhất Đồ thị hai phía ˆ |
Đơ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 © Ÿ, E) để chỉ đỗ thị hai phía với tập đỉnh X2 Y
Trang 8Đồ 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ị
Thí dụ đồ thị K¿ 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 6)
Hình 3 Đồ thị K¿ 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 ngồi ở đỉnh (ví dụ xem cách vẽ Ka trong hình 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 đồ thi 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
Dinh ly 2 (Kuratovski)
Đồ thị là phẳng khi và chỉ khi nó không chita dé thi con déng cau v6i K3,3 hoặc Ks
` Trong trường hợp riêng, đồ thị Kạa hoặc K; không phải là đồ thị phẳng Bài toán về tính phăng của đồ thị Kạ¿ 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ặn Thí dụ, biểu diễn phẳng của đồ thị cho trong hình 7 chia mặt phẳng ra thành 6 miền Rị,Rạ, .R¿
Trang 9
Hình 4 Các miền tương ứng với biểu diễn phẳng của đồ thị
Euler đã chứng minh được rằng các cách biểu diễn phẳng khác nhau của một dé thi đều chia mặt phang 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 dé thị phẳng sau đây
Định lý 3 (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 bi 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 thí dụ minh hoạ cho áp dụng công thức Euler
Thí dụ.:
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 là r=30-20+2=12
Ghi chú về tài liệu tham khảo
Trang 10Bài tập lý thuyết
1-1.Vẽ đồ thị (nếu tồn tại)
a.Vẽ một đồ thị có 4 đỉnh với bậc các đỉnh là 3, 2, 2, I
b.Vẽ các đồ thị mà mọi đỉnh của nó đều có bậc là lần lượt là k (1 < k< 5)
c.Vẽ các đồ thị mà mọi đỉnh của nó đều có bậc là 3 và có số đỉnh lần lượt là:4,5,6,8 d.Vẽ một đồ thị có 15 đỉnh và mỗi đỉnh của nó đều có bậc là 5
1-2.a.Một đồ thị phẳng liên thông có 8 đỉnh, các đỉnh lần lượt có bậc là 2, 2, 3, 3, 3, 3, 4, 6 Hoi đỗ thị có bao nhiêu cạnh ? b.Một đơn đồ thị phẳng liên thông có 10 mặt, tất cả các đỉnh đều có bậc 4 Tìm số đỉnh của đồ thị c.Xét một đồ thị liên thông có 8 đỉnh bậc 3 Hỏi biểu điễn phẳng của dé thi nay sé chia mat phẳng thành mấy miền d.Don dé thị phẳng liên thông G có 9 đỉnh, bậc các đỉnh là 2,2,2,3,3,3,4,4,5 Tìm số cạnh và số mặt của G 1-3.a.Một đồ thị có 19 cạnh và mỗi đỉnh đều có bậc > 3, hỏi đồ thị này có tối đa bao nhiêu đỉnh 3
b.Cho một đồ thị vô hướng có n đỉnh Hỏi đồ thị này có thể có tối đa bao nhiêu cạnh Trong trường hợp số cạnh là tối đa thì mỗi đỉnh sẽ có bậc là bao nhiêu ?
c.Cho một đô thị vô hướng có n đỉnh và 2n cạnh Chứng minh rằng trong đỗ thị này luôn ton tai một đỉnh có bậc không nhỏ hơn 4 d.Chứng minh rằng trong một đơn dé thị vô hướng nếu không chứa chu trình thì sẽ luôn tồn tại ít nhất là hai đỉnh treo e.Chứng minh rằng nếu dé thi G có chứa một chu trình có độ dài lẻ thi số màu của G ít nhất phải là 3 1-4.a Xét đồ thị vô hướng đơn có số đỉnh n > 2 Chứng minh rằng đồ thị có ít nhát 2 đỉnh cùng bậc với nhau
b.Cho 1 đồ thị G có chứa đúng 2 đỉnh bậc lẽ (các đỉnh khác nếu có phải bậc chấn) Chứng minh
rằng 2 đỉnh này liên thông với nhau
c.xét đồ thị vô hướng đơn có số đỉnh n > 2 Giả sử đồ thị không có đỉnh nào có bậc < (n-1)/2
Chứng minh rằng đồ thị này liên thông
d.Chứng minh rằng một đơn đồ thị vô hướng là hai phía nếu và chỉ nếu số màu của nó là 2 1-5.Vẽ đồ thị phẳng
a.Vẽ đồ thị phẳng liên thông với 6 cạnh và 3 miễn
b.Vẽ đỗ thị phẳng liên thông với 4 đỉnh va 5 miễn
Trang 111-6.Gia str cé 6 cudc mitting A,B,C,D,E,F cần được tô chức: Mỗi cuộc mifting được tổ chức
trong một budi Các cuộc mitting sau không được diễn ra đồng thời:BEF, CEF, ABE, CD, AD
Hãy bé tri các cuộc mitting vào các buổi sao cho số buổi diễn ra là ít nhất
1-7.Chứng minh rằng một đồ thị đầy đủ có 5 đỉnh không là đồ thị phẳng
1-8.Hãy tìm sắc số của đô thị sau: C _ F H 1-9.Có ba nhà ở gần ba cái giếng, từ mỗi nhà có đường đi thẳng đến mỗi giếng Có lần do bất
hòa với nhau, cả ba người này muốn tìm cách làm các con đường khác dé đên các giêng sao cho
các đường này không cắt nhau Hỏi ý định này có thực hiện được không ? vì sao ? 1-10.Tìm số đỉnh, cạnh và miên của các đồ thị sau:
Trang 13
1-12.Bài tốn tơ màu dé thị
Cho đơn đồ thị vô hướng G Hãy tìm cách gán mỗi đỉnh của đồ thị một màu sao cho hai đỉnh kể
nhau không bị tô bởi cùng một màu Một phép gán màu cho các đỉnh như vậy được gọi là một
phép tô màu đồ thị Bài tốn tơ màu địi hỏi tìm phép tô màu với số màu phải sử đụng là ít nhất Số màu ít nhất cần dùng để tô màu đồ thị được gọi là sắc số của đồ thị
Thuật giải:
Dùng màu thứ nhất tô cho tất cả các đỉnh của đồ thị mà có thể tô được, sau đó dùng màu thứ hai tô tất cả các đỉnh của đồ thị còn lại có thể tô được và cứ như thế cho đến khi tô hết cho tất cả các đỉnh của đồ thị m=l; số đỉnh đã được tô=0; mọi đỉnh đều chưa được tô do { for 1=1 ton
if đỉnh ¡ là chưa xét và có thể tô được bằng màu m then
{ tô đỉnh i bang mau m
tăng số đỉnh đã được tô lên 1 đơn vị mt++ } while (số đỉnh đã được t6<n) Thuật giải 2: Tính bậc của tất cả các đỉnh while (còn đỉnh chưa được tô ) {
-Tìm đinh(chưa được tô) có bậc lớn nhất Chang hạn đó là đỉnh i0
tim màu để tô đỉnh i0, Chẳng hạn đó là màu j
-Ngăn cấm việc tô màu j cho các đỉnh kề với đỉnh ¡0 -tô màu đỉnh 10 là j
-Gán bậc của đỉnh được tô 0 }
Trang 14
nhất và từ đó suy ra sắc sô của đơ thị Bài tốn tìm sắc số của một đô thị là một bài toán khó và không phải đồ thị nào cũng tìm được sắc số của nó một cách dê dàng
Trang 15
Bai tap lap trinh
(Đề chuẩn bị cho việc cài đặt các thuật toán của học phân lý thuyết đô thị, yêu
cau sinh viên ôn tap các kiến thức về lập trình đệ quy và các cấu trúc mảng, struct, file) 1-13.Dé quy a.Cho một dãy số được định nghĩa theo công thức quy nạp như sau (n là số nguyên, n>l): #@ =E/@ =2) =3 f(@i+3)=2ƒ(n+2)+ ƒ(n+1)—3ƒ(n) Viết chương trình tính f(n)
b.Với mỗi n > I, số Yạ được tính như sau :
Yi=1, Y2=2, Y3=3,
Yn=Y,¡ + 2Y„a + 3Y,„ nếu n >4
-Tính Ys
-Viét hàm tính Y„ bằng phương pháp đệ quy
-Viết hàm tính Yạ không dùng đệ quy cũng không dùng biến mảng để lưu giá trị tạm c.Viết hàm tính số hạng thứ n của hai dãy sau:
x(0) = 1, y(0) =0, |
x(n) = x(n - 1) + y(n- 1) voi moi n> 0, y(n) = 3*x(n - 1) + 2*y(n - 1) voi moi n> 0 d.Cho day x, duoc dinh nghia nhu sau:
Xo=l, x1=2,
Xn=nxg†{n-l)Xị+ TXn-
Viết hàm đệ quy tính xạ (với n > 0)
1-14.Mảng một chiều
Cho mảng một chiều a chứa n số nguyên dương
a.Tìm giá trị nguyên tố nhỏ nhất, nếu không có thì trả về giá trị -l
Trang 16a.Sắp xếp các số nguyên tổ trong mảng tăng dần, còn các số khác khác thì giữ nguyên gia tri va vi tri
b.Viết hàm chuyền các số chin vé dau mang, các số lẻ về cuối mảng, còn các số 0 ở giữa
1-16.Mang (ma tran)
Cho ma trận n dòng, n cột các phần tử là các số nguyên a.Tính tổng các phần tử thuộc ma trận tam giác dưới
b.Hãy sắp các phần tử tăng dần trên mỗi dòng (từ trái qua phải) và tăng dần trên mỗi cột (từ trên xuống đưới) Lưu ý: Mỗi phân tử của dòng dưới phải lớn hơn tất cả các phần tử của dòng trên
c.Tính tổng các phần tử trên từng dòng
d.Kiểm tra ma trận có đối xứng qua đường chéo chính hay không ? 1-17.Struct
Viết chương trình nhập vào từ bàn phím ma trận 2 chiều có n dòng, n cột các phân số (0 < m,n< 6) hãy xuất phân số lớn nhất trong số các phân số có giá trị nhỏ hơn l của mảng
1-18.File
Viết chương trình tạo file văn bản có tên là “bangso.inp” có cầu trúc như sau: -Dòng đầu tiên ghi hai số m và n (m, n là các số nguyên đương nhập từ bàn phim)
-Trong m dòng tiếp theo mỗi dòng ghi n số nguyên ngẫu nhiên trong phạm vi từ 0 đến 50
(các số cách nhau ít nhất một dầu cách) Hãy thực hiện các công việc sau:
-Hãy cho biết các dòng có chứa số nguyên tổ (các dòng được đánh số từ 0 đến m-1)
-Hãy tính tổng các phần tử trên mỗi dòng
Trang 17CHUONG 2
BIEU DIEN DO THI TREN MAY VI TINH
(tuân 3: Tổng cộng có 2 tiết lý thuyết và 2 tiết hướng dẫn bài tập/thực hà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 đữ 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 dé biểu diễn đô thị trên máy tính
1 MA TRAN KE MA TRAN TRONG SO
Xét đơn đồ thị vô hướng G = (V,B), vdi tap dinh V={1, 2, n}, tap canh E={e}, e2,
.@m} - Ta gọi ma trận kể của dé thị G là ma trận A={ai; :1J=1,2, m}
Với các phần tử được xác định theo qui tắc sau đây:
ai, = 0, néu (i,j) e E và
aij= Ì ,néu (i,j) ¢ E, i, j=l, 2, 0
Trang 18Hình 1 Dé thị vô hướng G và Đồ thị có hướng G¡
Các tính chất của ma trận kề:
1)RG rang ma trận kể của đồ thị vô hướng là ma trận đối xứng, tức là a[1,j]Ea[j,], 1,j=l,2,
oN
2ÿTỗng các phần từ trên dòng ¡ (cột j) của ma trận kẻ chính bằng bậc của đinh ¡ (đỉ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ự Thí dụ 2 Đồ thị có hướng G¡ cho trong hình l có ma trận ké là ma trận sau: 1 2 3 4 5 6 6 01010101110 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 I vào vi tri a[i,j] nếu (i,j) la cạnh của đỗ thị, chúng ta sẽ ghi k là số cạnh nối hai đỉnh ¡, j
Ma trận trọng số
Trong rất nhiều van dé ứ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[ij]; 1LJEL, 2, .n}
với c[i,j] = c(i,j) néu (ij) e E va c[ij] = 9 nếu (j)e E
Trang 19trong đó sé @ , tuy ting truong hop cu 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 điễ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” đơn vị bộ nhớ để lưu trữ ma trận kề
của nó
2.2.Ma trận liên thuộc đỉnh-cạnh
Xét G = (V,E) là đơn dé thi có hướng, giả sử V ={ I,2, n }; E= {ei, @, €m} Ma
trận liên thuộc dinh — canh có n dong (1 dong tmg với ! đỉnh) và m cột (1 cột img voi |
cạnh) Trong đó
1 nếu đỉnh ¡ là đỉnh đầu của cung c;
Trang 202.3.DANH SACH CANH (CUNG)
Trong trường hợp đồ thị thưa (đồ thị có số cạnh m thoả mãn bất dang thitc: 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 dé thi bởi đanh sách cạnh (cung) chúng ta sẽ lưu trữ danh sách tat ca
các cạnh (cung) của dé thi 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
Thí dụ 3 Danh sách cạnh (cung) của đỗ thị G (G¡) cho trong hình | 1a:
Dau Cuoi Dau Cuoi 1 2 1 2 1 3 1 3 2 3 3 2 2 5 3 4 3 4 5 4 4 5 5 6 4 6 6 3 5 6 Danh sách cạnh của G Danh sánh cung của G] 2.4 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ị đưới dạng danh
sách kể cũng là cách biểu điễn đượ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 e V: (v,u) e E}
Trang 21Bai tap ly thuyét
2-1.Cho đồ thị vô hướng liên thông G
như hình vẽ bên
aHãy biểu diễn đồ thị G bằng ma
trận kề, danh sách cạnh
b.Số màu ít nhất cần dùng để tô màu một đồ thị được gọi là sắc số của đồ
thị (bài tốn tơ màu) Hãy cho biết
sắc số của đỗ thị G trên
2-2.Cho đồ thị G như hình vẽ bên:
aHãy biểu diễn đồ thị G bằng ma trận liên thuộc đỉnh - cạnh, ma trận trọng số, danh sách cung
b.Gọi G' là đồ thị vô hướng thu
được bằng cách loại bỏ hướng trên
các cung của đề thị G Hãy cho biết sắc số k của G° và chỉ ra một cách tô màu G' với k màu 2-3 Xét đồ thị G gồm 8 đỉnh được cho bởi ma tran trong số(các đỉnh của đỗ thị được đánh s6 tir 1) 0 -2 0 2 0 5 0 5 0 5 0 2 10 0 -6 0 0
a.Hãy biểu diễn đồ thị G bằng danh sách kề, danh sách cạnh
Trang 222-4 Xét đồ thị có hướng G gồm 6 đỉnh được cho bởi hình vẽ dưới đây:
eb >
a.Hay biéu dién G bằng ma trận trọng lượng và ma trận liên thuộc
b.Goi G’ la dé thi vô hướng được tạo bằng cách loại bỏ hướng trên các cung của G Hãy cho biết sắc s6 k cua G’ va chỉ ra một cách tô màu G' với k màu
2-5.Xét đồ thị có hướng G gồm 5 đỉnh được cho bởi hình vẽ dưới đây:
a.Hãy biểu diễn G bằng ma trận trọng lượng và ma trận liên thuộc
b.Gọi G' là đồ thị vô hướng được tạo bằng cách loại bỏ hướng trên các cung của G (và bỏ cung (3,4) có trọng lượng là I) Hãy cho biết sắc số k của G” và chỉ ra một cách tô mảu GÌ
với k màu
Bài tập thực hành
2-6.Lập trình nhập đồ thị với các phương pháp biểu diễn: ma trận kể, ma trận trọng số và
danh sách cạnh, ma trận liên thuộc
2-7.Lập trình cho phép chuyển đổi cấu trúc dữ liệu biểu diễn đồ thị dưới dạng ma trận trọng số qua dạng danh sách cạnh và ngược lại
2-8.Lập trình cho phép chuyển đổi cấu trúc dữ liệu biểu diễn dé thi dưới dạng ma trận kề qua dạng danh sách kể và ngược lại
2-9.Cho đồ thị vô hướng được biểu diễn bằng ma trận kẻ Dữ liệu được lưu trên file text
dothi.inp có cầu trúc như sau:
Trang 23
Dòng đầu ghi số n, trong n dòng tiếp theo mỗi dòng ghi n số, các số cách nhau ít
nhất một dau cach Hay viết chương trình thực hiện các yêu cầu sau:
a.Đọc ma trận kẻ từ file dothi.inp
b.Kiểm tra tính hợp lệ của ma trận (kiểm tra xem các giá a[i][i] có giá trị nào khác
0 hay không ? kiểm tra xem có giá trị nào mà a[¡][j] khác a[j][ï] hay không ?)
2-10.Cho một đơn đồ thị Hãy viết các hàm thực hiện các yêu cầu sau:
a.Đề thị là có hướng hay vô hướng ?
b.Tính bậc của mỗi đỉnh
c.Kiểm tra xem có phải là đồ thị hai phía hay khơng?
2-11.Bài tốn tơ màu đỗ thị
Cho đơn đồ thị vô hướng G Hãy tìm cách gán mỗi đỉnh của đồ thị một màu sao cho hai đỉnh kể nhau không bị tô bởi cùng một màu Một phép gán màu cho các đỉnh như vậy được
gọi là một phép tô màu đồ thị Bài tốn tơ màu địi hỏi tìm phép tô màu với số màu phải sử
dụng là ít nhất Số màu ít nhất cần dùng dé tô màu đề thị được gọi là sắc số của đồ thị
Hãy lập trình cho bài toán này
Hướng dẫn cài đặt bài tốn tơ màu đồ thị
Mô tả đữ liệu:
Dữ liệu vào được lưu trên một trận vuông c[i][]]
Nếu c[i][ï]E1 thì hai thành phố ¡j là kề nhau c[i][j]P0 thì hai thành phé i,j không kề nhau Thuật toán
Tỉnh bậc của tất cả các đỉnh
while (còn đỉnh chưa được tô ) {
-Tim dinh(chua được tô) có bậc lớn nhất, chẳng hạn đó là đỉnh i0
-tìm màu để tô đỉnh ¡0; chẳng hạn đó là mau j -Ngăn cấm việc tô màu j cho các đỉnh kề với đỉnh ¡0 -Tô màu đỉnh ¡0 là j
-Gán bậc của đỉnh được tô 0 }
Mã giả:
+Danh sách bảng màu cho các đỉnh được cho là 1 và bậc của các đỉnh cho là 0
for (int i=1;1<=n;i++)
{
Trang 24for (int j=1;j<=n;j++) mau[i][jJ=1; dinh[i]=0; bac[i]=0; } +Tinh bậc cho mỗi đỉnh của đồ thị ban đầu for (i=1;i<=n;it++) for (int j=1;j<=n;j++) if(c[lÙlE=D bac[i}=bac[i]+1;
+i=0 /¡ là số đỉnh được tô tại thời điểm đang xét
/Tặp lại đoạn sau đến khi nào số đỉnh đã được tô bằng n thì dừng lại {
// tìm đỉnh có bậc cao nhất tại thời điểm đang xét
Trang 27CHUONG 3
CAC THUAT TOAN TIM KIEM TREN ĐỎ THỊ VA UNG DUNG
(tudn 4 & 5: Tổng cộng có 4 tiết lý thuyết và 4 tiết hướng dẫn bài tập/thực hành) 1 TIM KIEM THEO CHIEU SAU TREN DO THI
Ý 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
vo nao dé cha dé thi Sau đó chọn u là một đỉnh tuỳ ý kể với vạ 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ẽ bắt đầu 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 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=vu, 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 đệ qui sau đây void DFS(); (*tim kiem theo chieu sau bat dau tu định v; cac bien chuaxet, Ke la bien toan cuc*) tham_dinh(v); chuaxet[v] =0; for ué ke(v) If (chuaxet[u]) DF S(u);
} C*dinh v da duyef xong")
Khi đó, tìm kiếm theo chiều sâu trên đỗ thị được thực hiện nhờ thuật toán sau: void main() f (*Initialization*) for ve V chuaxet[v]=1; forveV if (chuaxet[v]) DFS(v); }
Rõ ràng lệnh gọi DFS(v) sẽ cho phép đến thăm tất cả các đỉnh thuộc cùng thành phan liên thông với đỉnh v, bởi vì sau khi thăm đỉnh là lệnh gọi đến thủ tục DFS đối với tất cả các
Trang 28false nên mỗi đỉnh sẽ được thăm đúng một lần Thuậ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, vì vậy, nó 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 biệ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 phai 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 tính toán của thuật toán là O(n+m) Thí dụ 1 Xét đồ thị cho trong hình 1 gồm 13 đỉnh, các đỉnh được đánh số từ | đến 13 như sau: 22) 8(6) 1) 12(11) 13(10) 10(12) 11(13) Hình 1
Chỉ số mới (trong ngoặc) của các đỉnh được đánh lại theo thứ tự chúng được thăm theo
thuật toán tìm kiếm theo chiều sâu
Thuậ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 dé thi có hướng Trong trường hợp đồ thị có hướng, thủ tcụ DFS(v) sẽ cho phép thăm tất cả các dinh u nao mà từ v có đường đi đến u Độ phức tạp tính toán của htuật toán là O(n+m)
2 TIM KIEM THEO CHIEU RONG TREN BO THI
Để ý rằng trong 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
Trang 29
một cách ngắn gọn, được xây dựng trên cơ sở thay thế ngăn xếp (STACK) bởi hàng đợi
(QUEUE) V6i sy cải biê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 đờ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: void BFS(v); (*Tim kiem theo chieu rong bat dau tu dinh v, cac bien chuaxet, Ke la bien cuc bo*) ( QUEUE=Ø; QUEUE c=y; (*ket qua nap vao QUEUE*) Chuaxet[v]=0; While (QUEUE<>@) { P <= QUEUE; (*lay p tu QUEUE: *) Tham_dinh(p); ƒoru e Ke(v) If (chuaxet[uj) { QUEUE <u; chuaxet[u] =0; } } } Khi đó, tìm kiếm theo chiêu rộng trên đồ thị được thực hiện nhờ thuật toán sau: void main() ( (*Initialization*) for f € V do chuaxet[v]=1; forve V if (chuaxet[v]) BFS(v); }
Lập luận tương tự như trong thủ tục tìm kiếm theo chiều sâu, có thể chỉ ra được rằng lệnh
gọi BFS(v) sẽ cho phép thăm đến tất cả các đỉnh thuộc cùng thành phần liên thông với đỉnh
Trang 30v, và mỗi đỉnh của đồ thị sẽ được thăm đúng một lần Độ phức tạp tính toán của thuật toán là O(mtn)
Thí dụ 2
Xét đồ thị xét trong hình 2 Thứ tự thăm đỉnh của đồ thị theo thuật toán tìm kiếm theo chiều rộng được ghi trong ngoặc 22) 8(12) 1() 12(4) 13(10) 10(7) 11(8) Hinh 2
3 TIM DUONG DI VA KIEM TRA TINH LIEN THONG
Trong mục nảy ta xét ứng dụng các thuật tốn tìm kiếm mơ tả trong các mục trước vào việc giải bài toán cơ bản trên đồ thị: bài toán về tìm đường đi và bài toán về xác định tính
liên thông của đô thị
a) Bài toán tìm đường đi giữa hai đỉnh:
Giả sử s và t là hai đỉnh nào đó của đồ thị Hãy tìm đường đi từ s đến t
Như trên đã phân tích, thủ tục DES(s) (BFS(s)) sé cho 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]=true(1), "thì điều đó có nghĩa là không có đường đi từ s đến t, còn nếu chuaxet[t]=false(0
) thi 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ểu thức Truoc[{v] để ghi nhận đỉnh đi trước đỉnh v trong đường đi tìm kiếm tứ s đến v Khi đó, đối với thủ tục DES(v) cần sửa đôi câu lệnh ì trong nó như sau:
Ƒ (chuaxetJuj) (
Truoc[u] =v;
Trang 31DFS(u); } Còn đối với thủ tục BFS(v) cần sửa đổi câu lên 1f trong nó như sau: If (chuaxet [u]) { QUEUE <u; chuaxet[u] =0; Truoc[u] =p; } Chu y:
Đường đi tìm được theo thuật toán tìm kiếm theo chiều rộng là đường đi ngắn nhất (theo số
cạnh) từ s đến t Điều này 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
b) Tìm các thành phần liên thông của đồ thị:
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
Do thủ tục DFS(v) (BFS(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, nên số thành phân liên thong cia dd thi bang sé lan gọi đến thủ tục này Vấn đẻ
còn lại là cách ghi nhận các đỉnh trong từng tbà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 (biến này cần khởi tạo giá trị 0) Thủ tục Tham _dinh(v) trong các thủ tục DES(v) và BFS(v) có nhiệm vụ gán: Index[v]=connect, còn câu lện 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: Inconnect=0; If (chuaxet([v] ) { Inconnect=Inconnect+ I; DFS(v); (*BFS(v)*) }
Kết thúc vòng lặp thứ hai trong chương trình chính, Inconnect cho số thành phan liên thông của đồ thị, còn biến mảng Index[v], v e V cho phép liệt kê các đỉnh thuộc cùng một thành phần liên thông
Trang 32
Bài tập lý thuyết:
3-1.Hãy liệt kê các đỉnh của dé thi được duyệt theo phương pháp tìm kiếm theo chiều sâu, tìm kiếm theo chiều rộng Tìm đường đi từ đỉnh A đến đỉnh H A B C F 3-2.Cho dé thi vô hướng liên thông G như hình vẽ bên
a.Hãy liệt kê danh sách các đỉnh của G theo thuật toán tìm kiếm theo chiều
sâu (DES), theo thuật toán tìm kiếm
theo chiều rộng (BES) bắt đầu từ đỉnh 1
b.Hãy tìm một đường đi từ đỉnh 1 đến đỉnh 6 trên G theo thuật toán DFS và từ đỉnh I đến đỉnh 7 theo thuật tốn BES 3-3.Cho đồ thị vơ hướng liên thông G như hình vẽ bên 2 3 a.Hãy biểu diễn đồ thị G bằng ma trận kề
b.Hãy liệt kê danh sách các đỉnh của !
_G theo thuật toán tìm kiếm theo
chiều sâu (DFS), theo thuật toán tìm
kiếm theo chiều rộng (BFS) bắt đầu
từ đỉnh 1
Trang 33Bài tập thực hành
3-4.Một khóa học gồm N môn học, môn học ¡ phải học trong ti ngày Giữa các môn học có
mối quan hệ trước/sau: có môn học chỉ học được sau khi đã học một số môn học khác Mối quan hệ đó được thể hiện bởi một mảng hai chiều A[i, j];
i,j=1, , N trong d6 Afi, j] = 1/0 va Afi, i] bang 0 với mọi 1, A[ij] = 1 khi và chỉ khi |
môn học ¡ phải được dạy xong trước khi học môn j (ngày kết thúc môn ¡ phải trữơc ngày
bắt đầu môn j) Môn học ¡ phải đạy trước môn học j nếu có một dãy môn học i\, iz, ., ik sao cho a{[it, it,¡] = l, l <= t<= k-l, i¡=I và Ik=] Nếu có một nhóm các môn học từng đôi một không có quan hệ trước/sau thì trong mỗi ngày, về nguyên tắc, ta có thể học đồng thời tất cả những môn học này (nếu không vi phạm quan hệ với các môn học khác) Mảng A[I, J] được gọi là bế tắc nếu có một đãy các môn học ì¡, i, , ik, k > 1, mà môn 1¡ phải dạy trước môn i;, môn 1; phải dạy trước môn is, ., môn ik phải dạy trước môn ik, mén ik
phải dạy trước môn 1¡
Hãy viết chương trình với tên KT3.CPP làm các việc sau: Hãy xét xem mảng A có bé tac hay không
Nếu mảng A không bế tắc, hãy tính xem khóa học có thể kết thúc trong thời gian nhanh
nhất là bao nhiêu ngày
Theo các học bảo đảm thời gian hoàn thành ngắn nhất ở câu 2, hãy tính xem một học sinh trong quá trình học phải học đồng thời trong một ngày nhiều nhất bao nhiêu môn
Dữ liệu vào được cho bởi file text có tên MH.DAT trong đó số N ghi ở đòng thứ nhất,
trong nhóm N dong tiép theo, dong thtr i ghi N sé Ali, 1], ., Ali, N] dong cuối cùng ghi N
số nguyên đượng tỉ không lớn hơn 30, 1 <=i<=N; N <= 30
Kết quả ghi ra file TKB.DAT như sau: dòng thử nhất ghi số 1/0 tùy theo mảng A bế tắc / không bế tác Nếu dòng thứ nhất ghi số 0, ta mới ghi tiếp kết quả câu 2 và 3
Kết quả câu 2 ghi tiếp vào file TKB.DAT N+1 dòng như sau: dòng dầu ghi số T là số ngày tối thiểu có thể hoàn thành khóa học, tiếp theo là N dòng trong đó dòng thứ ¡ ghi 2 số X, Y với ý nghĩa môn học thứ ¡ học từ ngày thứ X đến ngày thứ Y (chú ý rằngY-X=t, ¡)
Trang 340100 0010 0001 1000 Lili Ví dụ 2 MH.DAT TKB.DAT 7 0 0100000 22 0001000 12 0001000 34 0000110 18 0000000 912 0000001 1322 0000000 13 14 22841023 15 17 12 13
3-5.Cho một mạng N (N <= 20) máy tính được đánh số từ I đến N Sơ đỗ mạng được cho bởi hệ gồm M kênh (đoạn) nối trực tiếp giữa một số cặp máy trong mạng, m kênh tương
ứng với m cặp Cho biết chỉ phí truyền 1 đơn vị thông tin theo mỗi kênh của mạng
Người ta cần chuyên một bức thông điệp từ máy s đến máy t Để đảm bảo an toàn, người ta chuyển bức thông điện này theo hai đường truyền tin khác nhau (tức không có kênh nào) của mạng được sử dụng trong cả hai đường truyền tin; cho phép hai đường truyền tin cùng đi qua một số máy tính) Chỉ phí của một đường truyền được hiểu là tông chi phí trên các
kênh của nó Đơn giá đường truyền từ máy s sang máy t được tính như sau:
Với hai máy s và †, cùng bức thông điệp có độ dài là 1 đơn vị thông tin, đơn giá truyền cho
cặp (s, t) được tính bằng tông chỉ phí chuyển thơng điệp an tồn (bằng tổng chi phí của hai
đường truyền tin) là nhỏ nhất
Người ta mong muốn mạng máy tính (mạng truyền tin nói trên thỏa mãn tính chất an toàn
theo nghĩa là từ một máy bất kỳ luôn truyền được (một cách an tồn) thơng điệp tới một
Trang 35may bất kỳ khác Khi một mạng an toàn, người ta tính được đơn giá của mạng là tổng đơn giá mọi đường truyền từ một máy bắt kỳ tới một máy bất kỳ khác
Ma trận đơn giá của mạng là mảng hai chiều A có N dòng và N cột, mà giá trị phân tử A[i,j] chinh là đơn giá từ máy i sang may j
3-6.Truyền tin trên mạng
Có một nhóm gồm N lập trình viên được đánh số từ I tới N, một số người trong họ có biết
địa chỉ email của nhau Khi biết một thông tin nào mới họ gửi thông tin đó cho nhau Bạn
là một người rất quan trọng và bạn biết tất cả các mối quan hệ của họ cũng như bạn có một thông tin rất đặc biệt mà muốn cho tất cả họ đều biết Hãy lập trình chỉ ra một số Ít nhất
các lập trình viên cần cho họ biết thông tin sao cho những người đó có thể thông báo cho
tất cả những người còn lại thông tin của bạn |
Dữ liệu cho trong file văn bản với tên INFOR.INP trong đó dòng đầu chức số N (N <=
1000), dòng thứ I trong N dòng tiếp theo chứa danh sách các lập trình viên mà người Ï biết
địa chỉ email của họ Nếu người thứ I không biết địa chỉ của bất cứ ai thì dòng này là dòng trống
Kết quả ghi ra file văn bản với tên INFOR.OUT trong đó dòng đầu ghi số K là số người
Trang 36Cài đặt một số thuật toán căn bản quan trọng
Trang 382.Tìm kiếm theo chiều rộng trên đồ thị