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

Xây dựng chương trình mô phỏng bài toán luồng cực đại trong mạng

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.96 MB, 66 trang )

MỤC LỤC
LỜI NÓI ĐẦU ....................................................................................................3
CHƯƠNG 1 ........................................................................................................5
1.1. Các định nghĩa ........................................................................................5
1.2.Các thuật ngữ cơ bản...............................................................................9
1.2.1.Các thuật ngữ mô tả các đỉnh và cạnh của đồ thị vô hướng............9
1.2.2.Các thuật ngữ mô tả đồ thị có hướng .............................................10
1.3. Đường đi, chu trình, đồ thị liên thông..................................................11
1.3.1. Đường đi, chu trình ........................................................................11
1.3.2. Đồ thị liên thông..............................................................................12
1.4. Các dạng biểu diễn đồ thị ....................................................................15
1.4.1. Biểu diễn hình học của đồ thị.........................................................15
1.4.2. Sự đẳng cấu.....................................................................................15
1.4.3. Biểu diễn đồ thị trên máy tính .......................................................16
CHƯƠNG 2 ......................................................................................................22
BÀI TOÁN LUỒNG CỰC ĐẠI TRONG MẠNG .............................................22
2.1. Mạng, Luồng trong mạng .....................................................................22
2.2. Lát cắt, đường tăng luồng....................................................................23
2.3. Bài toán luồng cực đại trong mạng ......................................................27
2.3.1.Giới thiệu bài toán luồng cực đại trong mạng................................27
2.3.2.Nội dung bài toán.............................................................................27
2.4. Thuật toán tìm luồng cực đại trong mạng ..........................................27
2.4.1.Tư tưởng thuật toán ........................................................................27
2.4.2.Sơ đồ thuật toán ford_ Fulkersol ....................................................29
2.4.3. Sơ đồ khối........................................................................................32
2.4.4.Ví dụ .................................................................................................34
2.4.4.Ví dụ .................................................................................................35


CHƯƠNG 3 ......................................................................................................38
CÀI ĐẶT MÔ PHỎNG BÀI TOÁN LUỒNG CỰC ĐẠI TRONG MẠNG .......38


3.1. Khái quát về ngôn ngữ lập trình C#.....................................................38
3.1.1. Những thế mạnh của ngôn ngữ C# ................................................39
3.1.2. Các bước chuẩn bị cho chương trình.............................................41
3.2. Thuật toán tìm luồng cực đại trong mạng ...........................................42
3.3. Các phương thức chính của chương trình ...........................................45
3.4. Kết quả ..................................................................................................48
CHƯƠNG 4 ......................................................................................................50
MỘT SỐ BÀI TOÁN ỨNG DỤNG...................................................................50
4.1.Một số bài toán luồng tổng quát ............................................................50
4.1.1. Mạng với nhiều điểm phát và điểm thu ........................................50
4.1.2. Bài toán với khả năng thông qua của các cung và đỉnh...............52
4.1.3.Mạng trong đó khả năng thông qua của mỗi cung bị chặn hai phía
...................................................................................................................53
4.2. Một số bài toán ứng dụng trong tổ hợp................................................54
4.2.1. Bài toán đám cưới vùng quê..........................................................54
4.2.2. Bài toán về hệ thống đại diện chung .............................................54
4.2.3. Bài toán tối ưu rời rạc ...................................................................56
KẾT LUẬN .......................................................................................................64
TÀI LIỆU THAM KHẢO .................................................................................66
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN..... Error! Bookmark not defined.

2


LỜI NÓI ĐẦU
Trong những năm gần đây các nghành khoa học và công nghệ, nhất là
công nghệ thông tin đang phát triển một cách chóng mặt với nhiều loại hình dịch
vụ phong phú đáp ứng ngày càng cao nhu cầu của con người. Các hệ thống viễn
thông hiện đại, các máy tính cá nhân, các mạng máy tính quốc gia, quốc tế và
internet… đã làm cho các quốc gia và các cá nhân trên thế giới xích lại gần nhau

hơn.
Thông tin là một nhu cầu không thể thiếu đối với con người và là một
dạng tài nguyên đặc biệt vô cùng quý giá. Nói đến thông tin cũng đồng thời nói
đến việc lưu trữ và xử lý thông tin trên máy tính. Trong lưu trữ và xử lý thông tin
trên máy tính thì toán rời rạc đóng góp một tầm quan trọng không nhỏ, bởi vì
bản chất của việc lưu trữ và xử lý thông tin trên máy tính là các quá trình rời rạc.
Lý thuyết đồ thị là một trong những lĩnh vực nghiên cứu của toán rời rạc,
có nhiều ứng dụng rộng rãi trong nhiều lĩnh vực của khoa học kỹ thuật và đời
sống nhất, nhất là lĩnh vực khoa học máy tính. Có rất nhiều bài toán ứng dụng
của lý thuyết đồ thị được áp dụng rộng rãi trong thực tế như: Bài toán cây khung
nhỏ nhất, bài toán tìm đường đi ngắn nhất, bài toán luồng cực đại trong mạng,…
Bài toán luồng cực đại trong mạng là một trong những bài toán tối ưu
trên đồ thị tìm được những ứng dụng rộng rãi trong thực tế, có rất nhiều bài toán
trong thực tế có thể đưa về bài toán luồng cực đại trong mạng để giải như bài
toán mạng với nhiều điểm phát và điểm thu, bài toán đường ống dẫn dầu, bài
toán tìm cường độ lớn nhất của dòng vận tải giữa hai nút của một bản đồ giao
thông,… Bài toán luồng cực đại trong mạng cũng tìm được nhiều ứng dụng thú
vị trong lý thuyết tổ hợp, một số bài toán tổ hợp như bài toán đám cưới vùng quê,
bài toán về hệ thống đại diện chung, bài toán lập lịch cho hội nghị,…có thể giải
bằng cách xây dựng mạng đồ thị tương ứng, khi đó việc tìm luồng cực đại trong
mạng đó sẽ tương ứng với việc giải bài toán tổ hợp đặt ra.
Vì vậy, em chọn đề tài “Xây dựng chương trình mô phỏng bài toán
Luồng cực đại trong mạng” làm đồ án tốt nghiệp nhằm nghiên cứu và hiểu rõ
hơn về bài toán luồng cực đại trong mạng và thuật toán tìm luồng cực đại

3


trong mạng cũng như những ứng dụng của bài toán trong thực tế cũng như trong
lý thuyết tổ hợp.

Nội dung của đề tài sẽ được trình bày trong 4 chương
Chương 1: Lý thuyết đồ thị
Chương 2: Bài toán luồng cực đại trong mạng
Chương 3: Cài đặt mô phỏng bài toán luồng cực đại trong mạng
Chương 4: Một số bài toán ứng dụng

4


CHƯƠNG 1
LÝ THUYẾT ĐỒ THỊ
1.1. Các định nghĩa
Định nghĩa 1: (Định nghĩa về đồ thị)
Đồ thị là 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.
Người 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ị.
Giả sử V là tập hữu hạn, không rỗng các phần tử nào đó và E  V× V. Bộ
G = (V,E) được gọi là đồ thị hữu hạn. Mỗi phần tử xV gọi là một đỉnh và mỗi
phần tử e=(x, y)E gọi là một cạnh của đồ thị G=(V,E).
Xét một cạnh e khi đó tồn tại 2 đỉnh x, yV sao cho e =(x,y), ta nói
rằng x nối với y hoặc x và y thuộc e.

- Nếu cạnh e = (x,y) mà x và y là hai đỉnh phân biệt thì ta nói x,y là hai
đỉnh kề nhau.
- Nếu e=(x,x) thì e là cạnh có hai đỉnh trùng nhau ta gọi đó là một khuyên.
- Nếu e=(x,y) mà x,y là cặp đỉnh có phân biệt thứ tự hay có hướng từ x
đến y thì e là một cung, khi đó x là gốc còn y là ngọn hoặc x là đỉnh ra, y là đỉnh
vào.
- Khi giữa cặp đỉnh (x,y) có nhiều hơn một cạnh thì ta nói những cạnh
cùng cặp đỉnh là những cạnh song song hay là cạnh bội. Minh hoạ bằng các hình

vẽ sau:

5


Trong thực tế ta có thể gặp nhiều vấn đề mà có thể dùng mô hình đồ thị để
biểu diễn, như sơ đồ một mạng máy tính, sơ đồ mạng lưới giao thông, sơ đồ thi
công một công trình.
Ví dụ: Sử dụng đơn đồ thị vô hướng để mô tả một mạng máy tính như sau:
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 nối các
máy tính này, chúng ta có thể biểu diễn các vị trí đặt máy tính bởi các điểm và
các kênh điện thoại nối chúng bởi các đoạn thẳng nối như hình 1 dưới đây:

Ta thấy trong mạng ở hình 1, giữa hai máy bất kỳ chỉ có nhiều nhất một
kênh điện thoại nối chúng, kênh này cho phép liên lạc cả hai chiều và không có
máy tính nào lại được nối với chính nó. Sơ đồ mạng máy tính cho trong hình 1
được gọi là đơn đồ thi vô hướng.
Vậy ta có định nghĩa sau:
Định nghĩa 2: (Định nghĩa đơn đồ thị vô hướng)
Đơ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.
Ví dụ: Sơ đồ mạng cho trong hình 1 ở trên là đơn đồ thị vô hướng
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 vớ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 2 dưới đây.

6


Sơ đồ biểu diễn mạng như trên được gọi là đa đồ thị vô hướng. Như vậy ta

có định nghĩa sau:
Định nghĩa 3( Định nghĩa đa đồ thị vô hướng)
Đa đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh và E là họ các
cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh. Hai cạnh
e1và e2 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ụ: đa đồ thị vô hướng như hình 2 ở trên
Nhận xét: Mỗi đơn đồ thị đều là đa đồ thị nhưng điều ngược lại không
đúng.
Trong mạng máy tính có thể có những kênh thoại nối một máy nào đó với
chính nó. Trong những trường hợp mạng như vậy thì ta sử dụng khái niệm giả đồ
thị vô hướng được định nghĩa như sau:
Định nghĩa 4 (Định nghĩa giả đồ thị vô hướng)
Giả đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh và E là họ các
cặp không có thứ tự gồm hai phần tử ( không nhất thiết phải khác nhau) của V
gọi là các cạnh. Cạnh e được gọi là khuyên ( cạnh nối một đỉnh với chính nó) nếu
nó có dạng e= (u, u).
Ví dụ: Sơ đồ hình 3 dưới đây là giả đồ thị với các khuyên là (A,A), (B,B),
(C,C).

7


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. Trong trường hợp này người ta biểu diễn mạng máy tính bằng đồ thị
có hướng. Ta có các định nghĩa sau:
Định nghĩa 5:( Định nghĩa đơn đồ thị có hướng)
Đơ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.
Ví dụ:Sơ đồ biểu diễn mạng máy tính trong hình 4 sau là đơn đồ thị có
hướng.


Nếu trong mạng có thể có nhiều 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 được định nghĩa như sau:
Định nghĩa 6:( Định nghĩa đa đồ thị có hướn+g)
Đa đồ thị có hướng G=(V, E) bao gồm V là tập các đỉnh và E là họ các
cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung. Hai cung e1và e2
tương ứng với cùng một cặp đỉnh được gọi là cung lặp.

8


Ví dụ: Sơ đồ biểu diễn mạng máy tính trong hình 5 dưới đây là đa đồ thị
có hướng.

1.2.Các thuật ngữ cơ bản
1.2.1.Các thuật ngữ mô tả các đỉnh và cạnh của đồ thị vô hướng
Đị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 đồ thị G 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ư trong hình 5 ở trên ta thấy hai đỉnh A và E là hai đỉnh kề nhau và
cạnh e nối hai đỉnh A và E là cạnh của đồ thị nên e liên thuộc với hai đỉnh A và
E, tương tự với các đỉnh khác cũng vậy.
Để có thể biết có bao nhiêu cạnh liên thuộc với một đỉnh,ta đưa vào định
nghĩa sau
Định nghĩa 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à ta ký hiệu là deg(v).
Ví dụ 1: xét đồ thị vô hướng G ở hình 1 dưới đây


9


Trong hình 1 ta có
deg(a)=1,deg(b)=4, deg(c)=4, deg(e)=3, deg(f)=3,
deg(d)=1, deg(g)=0.
Đỉnh có bậc bằng 0 được gọi là đỉnh cô lập, đỉnh có bậc bằng 1 gọi là đỉnh
treo. Trong ví dụ 1 ở trên ta có đỉnh g là đỉnh cô lập, đỉnh a và đỉnh d là đỉnh
treo.
Tính chất bậc của đỉnh
Nếu G=(V,E) là đồ thị vô hướng có m cạnh thì ta có
2m=

 deg(v)
vV

Ví dụ 2: đồ thị vô hướng với n đỉnh và mỗi đỉnh có bậc là 6 có bao nhiêu
cạnh.
Giải:
Theo tính chất trên thì ta có: 2m=6n  m=3n
vậy số cạnh của đồ thị là 3n.
1.2.2.Các thuật ngữ mô tả đồ thị có hướng
Đị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à đi ra
khỏi đỉnh u và đi vào đỉnh v. Đỉnh u(v) được gọi là đỉnh đầu (đỉnh cuối) của cung
(u,v).
Trong đồ thị có hướng ta có khái niệm bán bậc ra (vào) của một đỉnh được
định nghĩa như sau

Đị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 khỏi nó (đi vào nó) và ký hiệu là deg+(v), ( deg-(v)).
Ví dụ 3: Xét đồ thị có hướng G ở hình 2 dưới đây, ta có
deg-(A)=2, deg-(B)=3, deg-(C)=1, deg-(D)=2, deg-(E)=2.
deg+(A)=3, deg+(B)=2,deg+(C)=2, deg+(D)=2, deg+(E)=1.

10


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ó:
Giả sử G=(V,E) là đồ thị có hướng, khi đó

 deg
vV



(v )

 deg

= vV



(v )

=


E

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 ta 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.3. Đường đi, chu trình, đồ thị liên thông
1.3.1. Đường đi, chu trình
Định nghĩa 1:
Đườ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 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 gọi là đỉnh cuối của đường đi. Đường
đi có đỉnh đầu và đỉnh cuối trùng nhau (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ụ: Xét đồ thị vô hướng cho trong hình 1 dưới đây

11


Trong hình 1 ta có: a, d, 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 là cạnh của đồ thị.
Dãy b, c, f, e, b là chu trình độ dài 4. Đường đi a, b, e, d, a, b có độ dài là
5 không phải là đường đi đơn, do cạnh (a, b) có mặt trong nó hai lần.
Trong đồ thị có hướng thì đường đi cũng được định nghĩa tương tự như
sau
Đị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 G=(V, A) là dãy x0, x1, …, xn-1, xn trong đó u=x0,v=xn,(xi,xi+1) A,
i=0, 1, 2, …, n-1.
Đường đi nói trên còn có thể biểu diễn dưới dạng các cung:
(x0,x1), (x1,x2),…,(xn-1,xn).
Đỉnh u được 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) gọi là chu trình. Đường
đi hay chu trình được gọi là đơn nếu như không có cung nào bị lặp lại.
Ví dụ: Trên đồ thị có hướng trong hình 1 ở trên thì a,d,c,f,e là đường đi
đơn độ dài 4, còn d,e,c,a không là đường đi, do (e,c) không phải là cung của đồ
thị. Đường đi a,b,e,d,a,b có độ dài là 5 không phải là đường đi đơn, do cung (a,b)
có mặt trong nó hai lần.
1.3.2. Đồ thị liên thông
Đị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ư 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.

12


Ví dụ: đồ thị G trong hình 2 dưới đây là đồ thị liên thông, còn đồ thị H là
không liên thông.

Định nghĩa 4:
Ta gọi đồ thị con của đồ thị G=(V,E) là đồ thị H=(W,F), trong đó W  V
và F  E.
Trong trường hợp đồ thị là không liên thông, nó sẽ phân rã ra thành một
số thành phần 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ụ: Đồ thị H trong hình 2 ở trên gồm 3 thành phần liên thông là H1,
H2, H3.
Trong mạng máy tính có thể có những máy 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 sẽ được đưa ra trong các định nghĩa sau.
Đị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ị.
Ví dụ: Trong đồ thị G ở hình 2 ở trên, đỉnh e và đỉnh d 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
xét đến hướng trên các cung hay không.

13


Định nghĩa 6:
Đồ thị có hướng G=(V,A) được gọi là đồ thị 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ó.
Ví dụ: Đồ thị G ở hình 3 sau đây là đồ thị liên thông mạnh.

Định nghĩa 7
Đồ thị có hướng G=(V,A) được gọi là liên thông yếu nếu đồ thị vô
hướng tương ứng với nó là đồ thị vô hướng liên thông.
Ví dụ: Đồ thị H trong hình 4 dưới đây là đồ thị liên thông yếu

Định lý1 (tiêu chuẩn nhận biết đồ thị định hướng)

Đồ 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ị, khi đó sẽ tồn tại đường đi từ u tới v và
ngược lại. Như vậy (u,v)phải nằm trên ít nhất một chu trình. (điều phải chứng
minh)
Điều kiện đủ:
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ó.Và tiếp tục như vậy với các cạnh
còn lại chưa được định hướng cho tới khi tất cả các cạnh của đồ thị được định
hướng ta sẽ thu được đồ thị liên thông mạnh.

14


1.4. Các dạng biểu diễn đồ thị
1.4.1. Biểu diễn hình học của đồ thị
Để có cái nhìn trực quan ta thường biểu diễn đồ thị bằng hình học, một đồ
thị có thể biểu diễn trên một mặt phẳng hoặc trong không gian. Phương pháp
biểu diễn như sau: Biểu diễn các đỉnh của đồ thị bằng các điểm (hay vòng tròn
nhỏ, ô vuông nhỏ) và nối hai điểm bằng một đường (cong, thẳng, mũi tên) khi
cặp điểm đó ứng với một cạnh (cung) của đồ thị.
Ví dụ 1: Cho đồ thị G = (V,E) trong đó
V={A,B,C,D,E và E ={AB,AC,AD,AE,BD,CD,CE}

Hình 4.1.a và hình 4.1.b đều là biểu diễn hình học của đồ thị G đã cho ở
trên.
1.4.2. Sự đẳng cấu
Với mỗi đồ thị thì có thể có nhiều dạng biểu diễn hình học, có nhiều đồ thị

tưởng chừng khác nhau nhưng đó là cách biểu diễn hình học khác nhau của cùng
một đồ thị, sự đẳng cấu cho phép chúng ta kết luận được điều đó.
Định nghĩa: Xét 2 đồ thị G1=(V1, E1) và G2 =(V2, E2)
Hai đồ thị này được gọi là đẳng cấu với nhau nếu tồn tại 1 song ánh từ V1
vào V2 và từ E1 vào E2 sao cho nếu có cạnh e=(x,y)E1 tương ứng với cạnh
e'=(x',y')E2 thì cặp đỉnh x,yV1 cũng là tương ứng cặp đỉnh x', y' V2

15


Ví dụ: Xét 2 đồ thị G1 và G2 như hình 4.2

Ta có f : G1  G2
f(a)=m
f(c)=nf
(d)=q
f(b) = p
Nếu a,bX1 kề nhau thì f(a), f(b)X2 kề nhau.
Vậy đây là 2 đồ thị đẳng cấu với nhau, ta có thể xem G1 và G2 thực chất
chỉ là 1 chỉ có điều biểu diễn ở dạng hình học khác nhau, các tên đỉnh khác nhau.
Để xét 2 đồ thị có đẳng cấu không là việc khó, tuy nhiên để xét 2 đồ thị
không đẳng cấu với nhau thì đơn giản hơn.
Đối với 2 đồ thị đẳng cấu thì các đồ thị đó có những tính chất bất biến như
sau:
- Số đỉnh bằng nhau
- Số cạnh bằng nhau
- Bậc các đỉnh tương ứng cùng như nhau
- Hai ma trận kề cũng như nhau
- Các chu trình cũng như nhau
1.4.3. Biểu diễn đồ thị trên máy tính

Lĩnh vực đồ thị có nhiều ứng dụng trong thực tế, có thể mô hình nhiều
ứng dụng bằng đồ thị và sử dụng máy tính để giải quyết các bài toán về ứng dụng
đó. Nên việc biểu diễn và lưu trữ đồ thị trên máy tính là một vấn đề khá trọng
tâm, phương thức biểu diễn từng loại đồ thị trên máy tính ảnh hưởng đến các giải
thuật, phương pháp giải quyết các ứng dụng trên máy tính.

16


1.4.3.1 Biểu diễn bằng ma trận kề
Phương pháp này dựa trên mối quan hệ giữa các cặp đỉnh, mỗi đồ thị được
đặt tương ứng với một ma trận vuông cấp n (n là số đỉnh của đồ thị). Gọi ma trận
kề là A = (aij), (i,j=1...n).
+) Trường hợp G =(V,E) là đồ thị vô hướng với V={x1,x2,...,xn} khi đó
mỗi phần tử aij của ma trận A được xác định như sau: aij=aji =d, nếu cặp đỉnh
(xi,xj) có d cạnh nối với nhau. Khi cặp đỉnh (xi,xj) không có cạnh nào nối với
nhau thì aij=0.Ta thấy ma trận kề của đồ thị vô hướng là ma trận đối xứng.
+) Trường hợp G=(V, E) là đồ thị có hướng với V={x1, x2, ..., xn} thì mỗi
phần tử aij của A được xác định như sau: đối với mỗi cặp đỉnh (xi, xj) từ xi đến xj
nếu có d cung thì aij=d. Chú ý aji=0 nếu không có cung nào hướng từ xj đến xi.
Ma trận kề trong trường hợp này là không đối xứng.
Trong 2 trường hợp trên ta chú ý nếu đỉnh xi có một khuyên thì phần tử
tương ứng của ma trận kề là aii = 1

Ta có thể dùng ma trận kề biểu diễn đồ thị G1 và G2 trong hình 4.3 như
sau:
Đối với đồ thị có trọng số mỗi cạnh e=(xi,xj) được gán một trọng số l(e)
(còn viết là l(xi,xj) ) thì ma trận kề của nó được thay bằng ma trận có trọng số,
khi đó mỗi phần tử của ma trận bằng trọng số của cạnh tương ứng:
aij = l(xi, xj)


17


1
1
M(G1)= 
1

0

1
0

1
2

2
1

0
0

0
0
1 
M(G2) = 0

0
1


0

1
1
1

1
0
0

Ưu điểm của phương pháp này là dễ dàng xác định được các cặp đỉnh có
kề nhau hay không hoặc rất thuận tiện khi tìm số bậc của mỗi đỉnh. Việc truy cập
phần tử của ma trận kề qua chỉ số không phụ thuộc vào số đỉnh của đồ thị.
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ó.
1.4.3.2 Biểu diễn bằng ma trận liên thuộc đỉnh - cạnh
Xét G=(V,E), (V={1, 2, …. ,n}, {e1, e2, …. , en}), là đơn đồ thị có hướng.
Xây dựng ma trận A=(aij:i=1,2,…,n; j=1,2,….,m), trong đó
1, nếu đỉnh i là đỉnh đầu của cung ej
aij

=

-1, nếu đỉnh i là đỉnh cuối cùng của cung e
0, nếu đỉnh i không là đầu mút của cung ej

Ma trận A xây dựng theo quy tắc vừa nêu được gọi là ma trận liên thuộc
đỉnh cạnh.

Ví dụ: Xét đồ thị cho trong hình 4.4 sau

Ta có ma trận A tương ứng với đồ thị hình 4.4 như sau

18


(1,2) (1,3) (2,3) (2,4) (3,5) (4,5) (4,6) (5,2) (5,6)

1 1 1 0 0 0 0
2
3
A= 4
5
6

1 0 1 1

 0 1 1 0

 0 0 0 1
0 0 0 0

 0 0 0 0

0
1
0
1


0
0
1
0

0 0

0 0 0 
0 1 0 
0 0 0

1 0 0
0 1 1

1 0 1 

Ma trận liên thuộc đỉnh_cạnh là một trong những cách biểu diễn rất hay
được sử dụng trong các bài tóan liên quan đến đồ thị có hướng mà trong đó phải
xử lý các cung của đồ thị .
1.4.3.3. Danh sách cạnh (cung)
Cho đồ thị G = (V, E) với số cạnh m, số đỉnh n. Nếu m < 6n thì G thường
được biểu diễn dưới dạng danh sách cạnh (cung).
Theo cách này 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ị tương ứng với hai biến
Dau[e],Cuoi[e].

19


Ví dụ: Hình 4.5 đồ thị G1và G2 được biểu diễn bằng danh sách cạnh

(cung) như sau:
Đầu
Cuối
1
2
1
3
2
3
2
4
3
4
Danh sách cạnh G1

Đầu
Cuối
1
2
2
3
3
1
4
1
4
2
Danh sách cung G2

Như vậy để lưu trữ đồ thị cần sử dụng 2m đơn vị bộ nhớ.

Nhược điểm của phương pháp 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.
1.4.3.4 Danh sách kề
Phương pháp biểu diễn bằng danh sách kề cũng được sử dụng khá phổ
biến và thường hay dùng cho đồ thị có hướng.
Danh sách kề cho đỉnh xi là danh sách gồm tất cả các đỉnh kề của xi theo
thứ tự các đỉnh trong tập đỉnh X. Ta có thể biểu diễn đồ thị như một mảng
FIRST, với phần tử FIRST[i] là con trỏ trỏ tới danh sách kề cho đỉnh xi.
Ví dụ: ở hình 4.5 đồ thị G1 và G2 được biểu diễn bằng danh sách kề như
sau:

20


Bộ nhớ sử dụng cho phương pháp biểu diễn danh sách kề là tỷ lệ thuận với
tổng số đỉnh và các cạnh của đồ thị.
Nhược điểm của cách biểu diễn này là thời gian cần thiết để xác định có
một cạnh đi từ đỉnh xi tới đỉnh xj có hay không mất O(n). Cách biểu diễn này
thích hợp cho các thuật toán mà cấu trúc đồ thị hay thay đổi như thêm hoặc bớt
các cạnh.

21


CHƯƠNG 2
BÀI TOÁN LUỒNG CỰC ĐẠI TRONG MẠNG
2.1. Mạng, Luồng trong mạng
Định nghĩa 1: (Định nghĩa về mạng)
Mạng là đồ thị có hướng G=(V,E), trong đó có duy nhất một đỉnh s không
có cung đi vào gọi là điểm phát, duy nhất một đỉnh t khôngcó cung đi ra gọi là

điểm thu và mỗi cung e=(v,w) E được gán một số không âm c(e)=c(v,w) gọi là
khả năng thông qua của cung e.
Quy ước: Nếu không có cung (v,w) thì khả năng thông qua c(v,w) được
gán bằng 0.
Định nghĩa 2:(Định nghĩa luồng trong mạng)
Giả sử cho mạng G=(V,E), ta gọi luồng trong mạng là ánh xạ f:E  R+ gán
cho mỗi cung e(v,w) E một số không âm f(e)=f(v,w), gọi là luồng trên cung e,
thoả mãn các điều kiện sau:
1)Luồng trên cung e  E không vượt quá khả năng thông qua của nó :
0  f(e)  c(e).
2) Điều kiện cân bằng luồng trên mỗi đỉnh của mạng: Tổng luồng trên các
cung đi vào đỉnh v bằng tổng luồng trên các cung đi ra khỏi đỉnh v, nếu v  s,t:
Divf(v)=

 f (w, v) -  f (v, w) .

w  ( v )

w  ( v )


Trong đó  (v) là tập các đỉnh của mạng mà từ đó có cung đến v,   (v) là

tập các đỉnh của mạng mà từ đó có cung đến nó:
  (v) ={ w  V; (w,v)  E},   (v) ={w  V;(v,w)  E}.

3) Ta gọi giá trị của luồng là số
Val(f)=

 f ( s,w) =  f (v, w)


w  ( s )

w  ( t )

22


Ví dụ: Mạng G và luồng f trong mạng cho trong hình1 dưới đây

Trong hình 1 các số ghi cạnh tương ứng là khả năng thông qua và luồng
trong mạng.
tính chất:
Cho X và Y là hai tập con của đỉnh V, ta gọi khả năng thông qua từ X đến
Y là:

 c(u, v)

c(X,Y) =

uX .vY

Và giá trị luồng thông từ X sang Y là:
f(X,Y) =

 f (u, v)

uX ,vY

Định nghĩa 3:

Luồng f* là luồng cực đại trong mạng nếu nó ứng với giá trị luồng val(f*)
là lớn nhất.
2.2. Lát cắt, đường tăng luồng
Định nghĩa 1: (Định nghĩa lát cắt)
Ta gọi lát cắt (X, X*) là một phân hoạch tập đỉnh V của mạng ra thành hai
tập X và X* =V\X, trong đó s  X và t  X*. Khả năng thông qua của lát cắt (X,
X*)là số:
c(X, X*)=

 c(v,w)

vX
wX *

Lát cắt với khả năng thông qua nhỏ nhất gọi là lát cắt hẹp nhất.

23


Bổ đề 1:
Giá trị của mọi luồng f trong mạng luôn nhỏ hơn hoặc bằng khả năng
thông qua của lát cắt (X, X*) bất kỳ trong nó : val(f)  c(X, X*)
Chứng minh:
Từ điều kiện cân bằng luồng ta có Divf(v)=0, với mọi v  X. Khi đó ta có

 (  f (w, v)   f (v,w)) =-val(f)

vX

w  ( v )


 -



w  ( v )

f (v, w) +

 val(f) =

 f (v, w) = - val(f),

v X *
w X

v X
w X *

 f (v, w) -  f (v, w)
vX *
wX

vX
vX *

Mặt khác do f là luồng trong mạng nên nó thoả mãn điều kiện
f(e)  c(e) hay là

 f (v, w)   c(v, w)


vV
wX *

vV
w X *

và -

 f (v, w)  0

vV
wX *

 val ( f )  c(X,X*). (đ p c m)

Hệ quả:
Giá trị luồng cực đại trong mạng không vượt quá khả năng thông qua của
lát cắt hẹp nhất trong mạng.
Giả sử f là một luồng trong mạng G=(V,E). Từ mạng G=(V,E) ta xây
dựng đồ thị có trọng số trên cungGf=(V,Ef). Với tập cung Ef và trọng số trên các
cung được xác định theo quy tắc sau:
1)Nếu e=(v,w) E với f(v,w) =0, thì (v,w)  Ef với trọng số c(v,w);
2)Nếu e=(v,w)  E với f(v,w)=c(v,w)thì (w,v)  Ef với trọng số f(v,w);
3)Nếu e=(v,w)  E với 0 < f(v,w) < c(v,w), thì (v,w)  Ef với trọng số
c(v,w) - f(v,w) và (w,v) với trọng số f(v,w).
Các cung của Gf đồng thời cũng là cung của G được gọi là cung thuận,
các cung còn lại được gọi là cung nghịch. Đồ thị Gf được gọi là đồ thị tăng
luồng.
Ví dụ : Các số viết cạnh các cung của G ở hình 2 theo thứ tự là khả năng

thông qua và luồng trên cung

24


Giả sử P=(s=v0,v1,…,vk=t) là một đường đi từ s đến t trên đồ thị tăng
luồng Gf. Gọi  là giá trị nhỏ nhất của các trọng số của các cung trên đường đi P.
Xây dựng luồng f trên mạng theo quy tắc sau:
f’(u,v) ={f(u,v)+  , nếu (u,v)  P là cung thuận,
f(u,v)-  , nếu (u,v) P là cung nghịch,
f(u,v), nếu (u,v)  P.
}
f’ xây dựng như trên cũng là luồng trong mạng và ta có:
val(f’)=val(f)+  .Thủ tục biến đổi từ luồng f sang luồng f’ gọi là tăng
luồng dọc theo đường tăng P.
Như vậy ta có khái niệm đường tăng luông được định nghĩa như sau
Định nghĩa 2: (Định nghĩa đường tăng luồng)
Với Gf là đồ thị tăng luồng được xây dựng như trong phần chứng minh hệ
quả ở mục 2.1 trên ta định nghĩa đường tăng luồng như sau:
Đường tăng luồng f là mọi đường đi từ s đến t trên đồ thị tăng luồng Gf
Ví dụ: Trên đồ thị tăng luồng Gf ở hình vẽ 1 dưới đây thì đường tăng
luồng là mọi đường đi từ s đến t.

25


×