Đồ 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, các loại đồ thị khác nhau được phân biệt bởi kiểu và số lượng cạnh nối hai đỉnh nào đó củ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, các loại đồ thị khác nhau được phân biệt bởi kiểu và số lượng cạnh nối hai đỉnh nào đó của đồ thị.
Trang 1Chơng 1 một số vấn đề cơ bản của đồ thị
Giả sử X là tập hữu hạn, không rỗng các phần tử nào đó và U ⊆ X ì X Bộ G
= <X, U> đợc gọi là đồ thị hữu hạn Mỗi phần tử x∈X gọi là một đỉnh và mỗiphần tử u = (x,y) ∈ U gọi là một cạnh của đồ thị G = <X, U>
Xét một cạnh u ∈ U khi đó tồn tại 2 đỉnh x, y ∈ X sao cho u = (x, y), ta nóirằng x nối với y hoặc x và y thuộc u
- Nếu cạnh u = (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 u = (x, x) thì u là cạnh có hai đỉnh trùng nhau ta gọi đó là một khuyên
- Nếu u = (x, y) mà x,y là cặp đỉnh có phân biệt thứ tự hay có hớng từ x đến ythì u là một cung, khi đó x là gốc còn y là ngọn hoặc x là đỉnh ra, y là đỉnhvà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ùngcặp đỉnh là những cạnh song song hay là cạnh bội
y
Trang 2Ví dụ: Xét một mạng máy tính, có thể biểu diễn mạng này bằng một mô
hình đồ thị, trong đó mỗi máy là một đỉnh, giữa các máy đợc nối với nhaubằng các dây truyền, chúng tơng ứng là các cạnh của đồ thị Một mô hình
mạng máy tính nh hình 1.2 trong đó có các máy tính A, B, C, D tơng ứng là
các đỉnh, giữa 2 máy đợc nối trực tiếp với nhau thì tơng ứng với 1 cặp đỉnh kềnhau
Là đồ thị có ít nhất một khuyên, có thể chứa cạnh bội, cạnh đơn Tóm lại đây
là loại đồ thị tổng quát nhất
Trang 3Đồ thị G=<X,U> đợc gọi là đồ thị vô hớng nếu tất cả các cạnh e ∈ U màcặp đỉnh thuộc nó e = (x,y) ∈ X không phân biệt thứ tự Đồ thị vô hớng là đồthị không có bất kỳ một cung nào
Ví dụ: nh hình 1.3.a là biểu diễn của một đồ thị vô hớng.
Đồ thị G=<X,U> vừa có cạnh vô hớng, vừa có cạnh có hớng thì nó đợc gọi là
đồ thị hỗn hợp, loại đồ thị này rất ít khi đợc dùng tới
Chú ý rằng vấn đề phân chia đồ thị và các thuật ngữ về đồ thị chỉ mang tính tơng đối, hiện nay vẫn còn cha mang tính thống nhất chuẩn trên nhiều tài liệu.
III Một số khái niệm và tính chất cơ bản của đồ thị
1 Bậc đồ thị
1.1 Bậc đồ thị vô hớng
Cho đồ thị vô hớng G = <X,U> Xét 1 đỉnh x ∈ X đặt m(x) là số cạnh thuộc
đỉnh x khi đó m(x) đợc gọi là bậc của đỉnh x Nếu x có một khuyên thì m(x)
m(x)m(G)
Trang 4Cho đồ thị có hớng G= <X,U> xét 1 đỉnh x ∈ X, ta ký hiệu m+(x) là số cáccung vào của đỉnh x, còn m-(x) là số các cung ra khỏi x Khi đó ta gọi m+(x) làbậc vào của đỉnh x còn m-(x) là bậc ra của đỉnh x
Hệ quả: Số đỉnh bậc lẻ của đồ thị G = <X,U> là một số chẵn
Chứng minh:
Gọi A và B tơng ứng là tập đỉnh bậc lẻ và tập đỉnh bậc chẵn của đồ thị Tacó:
Do vế trái chẵn nên tổng vế phải cũng là số chẵn Mà tổng bậc của các đỉnhbậc chẵn (x∈A) là số chẵn nên tổng bậc của các đỉnh bậc lẻ (x∈Β) phải là sốchẵn, do tất cả các số hạng của nó là số lẻ, nên tổng này phải gồm một số chẵncác số hạng Vì vậy số đỉnh bậc lẻ phải là số chẵn
2 đờng đi và chu trình
x
(x)m (x)mm(G)
x X
x
m(x) m(x)
m(x) 2m
Trang 5Trong đó các cạnh, các đỉnh trong đờng đi có thể lặp lại
Độ dài của đờng đi bằng số các cạnh (hoặc cung) trong đờng đi đó.
*Chú ý rằng trong đồ thị có hớng, trên một cung uv chẳng hạn thì đờng đi chỉ
có thể đi từ gốc (u) đến ngọn (v) không thể đi ngợc lại
2.2 Chu trình
Xét một đờng đi từ xi - xj Nếu xi ≡ x j thì đờng đi này đợc gọi là một chutrình Nh vậy chu trình là một đờng đi có đỉnh xuất phát và đỉnh kết thúc trùngnhau
Chú ý rằng đờng đi trong đồ thị có hớng không đợc đi ngợc chiều mũi tên
- Đờng đi (chu trình) đợc gọi là đơn nếu nó đi qua mỗi cạnh không quá mộtlần
- Đờng đi (chu trình) đợc gọi là sơ cấp nếu nó đi qua mỗi đỉnh đúng một lần
Hình 3.1
Ví dụ nh ở hình 3.1 ADBE là một đờng đi sơ cấp từ A đến E độ dài 3;
ABCDBE là đờng đi không sơ cấp ( qua B 2 lần) từ A đến E độ dài 5; ABDAB
là một đờng đi không đơn (chứa cạnh AB 2 lần) từ A đến B độ dài 4; ABDA
Là 1 chu trình đơn và sơ cấp độ dài 3; CC là đờng đi độ dài 0
Xét đồ thị có hớng nh hình 2.1 thì ABCB là một đờng đi độ dài 3; CBA
không là một đờng đi vì không có cung đi từ B đến A
Định lý:
Nếu trong đồ thị G = <X,U> các đỉnh đều có bậc không nhỏ hơn 2 ( ∀x ∈ X
| m(x) ≥ 2 ) thì trong G tồn tại ít nhất một chu trình
Chứng minh:
Xét tất cả các đờng đi đơn Vì đồ thị là hữu hạn cho nên số các đờng đi đơn
là hữu hạn Chọn một đờng đi là dài nhất nào đó ví dụ từ xi1 đến xij +1 (xem hình
vẽ dới đây) Theo giả thiết m(x) ≥ 2 nên tồn tại ít nhất một đỉnh xi0 và một cạnhnối đỉnh xi1 và xi0 Đỉnh xi0 thuộc một trong các đỉnh trên đờng đi đã chọn
C
D
E
Trang 6chẳng hạn xij vì đờng đi là dài nhất, nên chứng tỏ tồn tại một chu trình trong ờng đi.
3 Đồ thị liên thông
Cho đồ thị G = <X,U> Hai đỉnh phân biệt x,y ∈ X đợc gọi là liên thông nếutồn tại một đờng đi nối các đỉnh x, y với nhau Đồ thị G đợc gọi là liên thôngnếu với hai đỉnh phân biệt bất kỳ trong đồ thị đều là liên thông
Ví dụ nh hình 3.1 là một đồ thị liên thông vì luôn có đờng đi nối hai đỉnh bất
kỳ của đồ thị, còn đồ thị nh hình 3.2 là không liên thông vì không có đờng đi
từ A tới D hoặc từ D tới F v.v
Ví dụ nh đồ thị trong hình 3.3 có ba thành phần liên thông sau:
G1 = <X1, U1> với X1= {A,B,C} và U1 = {AB, AC, CB}
- G là liên thông một chiều nếu với hai đỉnh x,y khác nhau bất kỳ của G luôn
có đờng đi x - y hoặc đờng đi y - x.
- G là liên thông mạnh (liên thông 2 chiều) nếu hai đỉnh x,y khác nhau bất kỳ
của G đều có đờng đi x - y và đờng đi y - x.
Trang 7H1 H2 H3
Hình 3.4
ở hình 3.4 đồ thị H1 là liên thông mạnh, giả sử cặp đỉnh (A,C) ta có chiều đi
từ C tới A, và đồng thời cũng có chiều đi từ A tới C, và bất kỳ các cặp đỉnhkhác cũng tơng tự nh vậy H2 là liên thông một chiều vì xét cặp đỉnh (A,D) cóchiều đi từ D tới A nhng không có chiều đi từ A tới D H3 là liên thông yếu vìtồn tại cặp đỉnh (B,C) không có chiều đi B - C cũng không có chiều đi C - B,nhng đồ thị vô hớng tơng ứng là liên thông
4 Đồ thị con và đồ thị bộ phận
Cho đồ thị G = <X,U>
- Nếu trong đồ thị đó ta bỏ đi một số đỉnh nào đó và các cạnh xuất phát từ đỉnh
đó thì phần còn lại của đồ thị đợc gọi là đồ thị con của đồ thị G đã cho, hoặc lànếu D = <X',U'> là đồ thị con của G = <X,U> thì X' ⊆ X và U' ⊆ U
- Nếu trong đồ thị G ta bỏ đi một số cạnh nhng giữ nguyên các đỉnh thì phầncòn lại của đồ thị đợc gọi là đồ thị bộ phận của đồ thị G
IV Các dạng biểu diễn của đồ thị
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ểudiễ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 = <X,U> trong đó
X = {A, B, C, D, E} và U = {AB, AC, AD, AE, BD, CD, CE}
C
E B
A
Trang 8Hì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
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ị ởng chừng khác nhau nhng đó là cách biểu diễn hình học khác nhau của cùngmột đồ thị, sự đẳng cấu cho phép chúng ta kết luận đợc điều đó
t-Định nghĩa: Xét 2 đồ thị G1 = (X1, U1) và G2 = <X2, U2>
Hai đồ thị này đợc gọi là đẳng cấu với nhau nếu tồn tại 1 song ánh từ X1 vào X2
và từ U1 vào U2 sao cho nếu có cạnh e = (u, v) ∈ U1 tơng ứng với cạnh e' = (u', v')
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à 1chỉ 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:
Trang 9Đồ thị đầy đủ n đinh, ký hiệu Kn là đơn đồ thị vô hớng mà mọi cặp đỉnh phân
biệt luôn kề nhau Xem ví dụ nh hình 4.4 dới đây hoặc 1 trờng hợp riêng của
3.4 Một vài ứng dụng của đồ thị đặc biệt
ở các mạng cục bộ (LAN), các máy tính thờng đợc kết nối theo một cáchthức nào đó gọi là hình trạng (topolopy) Dựa theo đặc điểm của các totolopy
Trang 10này mà ta có thể mô hình bằng 1 số dạng đồ thị đặc biệt Ví dụ với mạng LANcác máy tính đợc kết nối theo topolopy hình sao (Star) sau đây:
Hình 4.6
ở dạng này, tất cả các máy đợc nối vào một thiết bị trung tâm có nhiệm vụnhận tín hiệu từ các máy và chuyển đến máy đích của tín hiệu Từ đặc điểmnày có thể mô hình bằng một đồ thị bộ phận của đồ thị bánh xe W6 nh hình 4.7.a
a) Dạng sao b) dạng vòng c) dạng hỗn hợp d) dạng đầy đủ (Complete)
Hình 4.7 Một số topolopy của LAN
ở mạng LAN ta cũng thờng có các dạng topolopy khác nh dạng chu trình(loop) hoặc gọi là vòng ở dạng này mỗi máy nối đúng với 2 máy khác Mạngcục bộ với cấu trúc vòng tròn đợc mô hình bằng các đồ thị đặc biệt dạng vòng
Cn nh hình 4.7.b, thông báo gửi từ máy này sang máy khác theo chu trình vòng
tròn cho tới khi tới đợc máy đích Hoặc 1 dạng nữa là dạng hỗn hợp, đó là sựkết hợp của dạng hình sao và hình vòng Topolopy kiểu này là một đồ thị bánh
xe Wn (hình 4.7.c) Mạng cục bộ dạng bánh xe các máy có thể truyền vòng
quanh theo vòng tròn hoặc có thể qua bộ phận trung tâm Ngoài ra ngời tacũng thờng hay bố trí mạng sao cho các máy đều kết nối trực tiếp với nhau, vớikiểu này có thể mô hình bằng đồ thị đầy đủ Kn (hình 4.7.d)
4 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 ứngdụ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à lu trữ đồ thị trên máy tính là một vấn đề khá trọng
Trang 11tâ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ảithuật, phơng pháp giải quyết các ứng dụng trên máy tính.
4.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ề
+ Trờng hợp G = <X,U> là đồ thị có hớng với X = {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 Matrậ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 ứngcủa ma trận kề là aii = 1
Hình 4.8
Ta có thể dùng ma trận kề biểu diễn đồ thị G1 và G2 trong hình 4.8 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)
Ư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ậpphầ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 n2 đơn vị bộ nhớ để lu trữ ma trận kề của nó
0 0 2 1
1 2 0 1
0 1 1 1
0 1 0
1 1 0
2
G
M
A C
Trang 12Định lý:
Nếu G = <X,U> là đa đồ thị với A = (aij) là ma trận kề tơng ứng, thì số ờng đi khác nhau từ đỉnh xi đến đỉnh xj có độ dài s bằng phần tử Pij của ma trậntích AìAì ìA = As = (Pij)
đ-Xét ví dụ ứng dụng: Trong một số hệ thống thông tin khi đợc mô hình bằng
đồ thị có thể thực hiện tốt một số công tác kiểm kỹ thuật Ví dụ khi biểu diễnmột mạng máy tính bằng đồ thị, giả sử có 2 máy nào đó mà thông tin truyềngiữa chúng là quan trọng, cần tiến hành kiểm tra xem đã có đờng truyền dựphòng giữa chúng không Xét ở góc độ đồ thị thì cần kiểm tra xem số đờng đigiữa cặp đỉnh tơng ứng với 2 máy đó, nếu số đờng đi lớn hơn 1 là đã có đờngtruyền dự phòng
* Chơng trình viết bằng PASCAL sau tính số đờng đi độ dài l nhập từ bàn
phím
Type MaTran = Array[1 20,1 20] Of Integer;
Var a, b, aa: MaTran;
Trang 13Writeln('Nhap ma tran ke cho do thi:');
Write('So dinh do thi: '); Readln(n);
InputMt(a);
Write('Dinh xuat phat: '); Readln(x1);
Write('Dinh ket thuc: '); Readln(x2);
Write('Do dai duong di: '); Readln(l);
LthuaMt(l);
FindWay(x1,x2);
END.
4.2 Danh sách cạnh (cung)
Cho đồ thị G = <X, U> 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ó ớng) Mỗi cạnh (cung) e = (x, y) của đồ thị tơng ứng với hai biến Dau[e],Cuoi[e]
Trang 144.3 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.9 đồ thị G1 và G2 đợc biểu diễn bằng danh sách kề nh sau:
2 1 1 2
3 Nil 3
Trang 15Ta có thể dùng ma trận kề biểu diễn đồ thị G1 và G2 trong hình 4.8 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)
Ư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ậpphầ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 n2 đơn vị bộ nhớ để lu trữ ma trận kề của nó
Định lý:
Nếu G = <X,U> là đa đồ thị với A = (aij) là ma trận kề tơng ứng, thì số ờng đi khác nhau từ đỉnh xi đến đỉnh xj có độ dài s bằng phần tử Pij của ma trậntích AìAì ìA = As = (Pij)
đ-Xét ví dụ ứng dụng: Trong một số hệ thống thông tin khi đợc mô hình bằng
đồ thị có thể thực hiện tốt một số công tác kiểm kỹ thuật Ví dụ khi biểu diễnmột mạng máy tính bằng đồ thị, giả sử có 2 máy nào đó mà thông tin truyềngiữa chúng là quan trọng, cần tiến hành kiểm tra xem đã có đờng truyền dựphòng giữa chúng không Xét ở góc độ đồ thị thì cần kiểm tra xem số đờng đigiữa cặp đỉnh tơng ứng với 2 máy đó, nếu số đờng đi lớn hơn 1 là đã có đờngtruyền dự phòng
* Chơng trình viết bằng PASCAL sau tính số đờng đi độ dài l nhập từ bàn
phím
Type MaTran = Array[1 20,1 20] Of Integer;
Var a, b, aa: MaTran;
0 0 2 1
1 2 0 1
0 1 1 1
0 1 0
1 1 0
2
G
M
Trang 17Writeln('Nhap ma tran ke cho do thi:');
Write('So dinh do thi: '); Readln(n);
InputMt(a);
Write('Dinh xuat phat: '); Readln(x1);
Write('Dinh ket thuc: '); Readln(x2);
Write('Do dai duong di: '); Readln(l);
LthuaMt(l);
FindWay(x1,x2);
END.
4.2 Danh sách cạnh (cung)
Cho đồ thị G = <X, U> 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ó ớng) Mỗi cạnh (cung) e = (x, y) của đồ thị tơng ứng với hai biến Dau[e],Cuoi[e]
Trang 18
2 Nil
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.9 đồ thị G1 và G2 đợc biểu diễn bằng danh sách kề nh sau:
Ta có thể dùng ma trận kề biểu diễn đồ thị G1 và G2 trong hình 4.8 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)
2 1 1 2
3 Nil 3
0 0 2 1
1 2 0 1
0 1 1 1
0 1 0
1 1 0
2
G
M