u j xX gọi là một đỉnh và mỗi phần j Trong đó 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 U gọi là một cạnh của đồ thị G =.. Đồ thị
Trang 1Chương 1 MỘT SỐ VẤN ĐỀ CƠ BẢN CỦA ĐỒ THỊ
I CÁC ĐỊNH NGHĨA ĐỒ THỊ
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, 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ị.
<X, U> được gọi là đồ thị hữu hạn Mỗi phần tử xX gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần
tử u = (xX gọi là một đỉnh và mỗi phần,y) U gọi là một cạnh của đồ thị G = <X, U> U gọi là một cạnh của đồ thị G = <X, U> X gọi là một đỉnh và mỗi phần
Xét một cạnh u U khi đó tồn tại 2 đỉnh xX gọi là một đỉnh và mỗi phần, y X sao cho u = (xX gọi là một đỉnh và mỗi phần, y) U gọi là một cạnh của đồ thị G = <X, U> , ta nói rằng xX gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần nối với y hoặc xX gọi là một đỉnh và mỗi phần và y thuộc u.
- Nếu cạnh u = (xX gọi là một đỉnh và mỗi phần, y) U gọi là một cạnh của đồ thị G = <X, U> mà xX gọi là một đỉnh và mỗi phần và y là hai đỉnh phân biệt thì ta nói xX gọi là một đỉnh và mỗi phần, y là hai đỉnh kề nhau.
- Nếu u = (xX gọi là một đỉnh và mỗi phần, xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> thì u là cạnh có hai đỉnh trùng nhau ta gọi đó là một khuyên.
- Nếu u = (xX gọi là một đỉnh và mỗi phần, y) U gọi là một cạnh của đồ thị G = <X, U> mà xX gọi là một đỉnh và mỗi phần,y là cặp đỉnh có phân biệt thứ tự hay có hướng từ xX gọi là một đỉnh và mỗi phần đến y thì u
là một cung, khi đó xX gọi là một đỉnh và mỗi phần là gốc còn y là ngọn hoặc xX gọi là một đỉnh và mỗi phần là đỉnh ra, y là đỉnh vào.
- Khi giữa cặp đỉnh (xX gọi là một đỉnh và mỗi phần, y) U gọi là một cạnh của đồ thị G = <X, U> 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
a) U gọi là một cạnh của đồ thị G = <X, U> b) U gọi là một cạnh của đồ thị G = <X, U> c) U gọi là một cạnh của đồ thị G = <X, U>
a Tại đỉnh y có một khuyên b Một cung có hướng từ x sang y
c Cặp đỉnh (x, y) có 2 cạnh song song
Hình 1.1
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ụ: 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 nhau bằng các dây
y
Trang 2truyề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.
Hình 1.2 Ví dụ về một đồ thị
2 Đồ thị đơn
Đồ thị G = <X, U> được gọi là đồ thị đơn nếu giữa hai đỉnh bất kỳ được nối với nhau bởi không quá một cạnh (cung) U gọi là một cạnh của đồ thị G = <X, U> , tức là đồ thị không có cạnh bội, không có khuyên.
Trang 3Đồ 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 chưa 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 xX gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần X đặt m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> là số cạnh thuộc đỉnh xX gọi là một đỉnh và mỗi phần khi đó m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> được gọi là bậc của đỉnh xX gọi là một đỉnh và mỗi phần Nếu xX gọi là một đỉnh và mỗi phần có một khuyên thì m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> được cộng thêm 2.
m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = 3 m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = 2
- Nếu m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = 0 thì đỉnh xX gọi là một đỉnh và mỗi phần được gọi là đỉnh cô lập
- Nếu m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = 1 thì đỉnh xX gọi là một đỉnh và mỗi phần được gọi là đỉnh treo
- Nếu m + (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> + m - (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = 0 thì đỉnh xX gọi là một đỉnh và mỗi phần được gọi đỉnh là cô lập
- Nếu m + (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> + m - (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = 1 thì đỉnh xX gọi là một đỉnh và mỗi phần được gọi là đỉnh treo
m(x) m(G)
m (x) m (x) m(G)
C
Trang 4Khi đó m(G) U gọi là một cạnh của đồ thị G = <X, U> được gọi là bậc của đồ thị có hướng G = <X,U>.
Trong đồ thị có hướng thì m + (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = m - (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = U U U
Ví dụ:
- Xét đồ thị vô hướng như trong hình 1.3.a ta có:
m(G) U gọi là một cạnh của đồ thị G = <X, U> = m(A) U gọi là một cạnh của đồ thị G = <X, U> + m(B) U gọi là một cạnh của đồ thị G = <X, U> + m(C) U gọi là một cạnh của đồ thị G = <X, U> + m(D) U gọi là một cạnh của đồ thị G = <X, U> = 2 + 5 + 2 + 1 = 10
- Xét đồ thị có hướng trong hình 2.1 ta có:
m(G) U gọi là một cạnh của đồ thị G = <X, U> = [m + (A) U gọi là một cạnh của đồ thị G = <X, U> + m + (B) U gọi là một cạnh của đồ thị G = <X, U> + m + (C) U gọi là một cạnh của đồ thị G = <X, U> ] + [m - (A) U gọi là một cạnh của đồ thị G = <X, U> + m - (B) U gọi là một cạnh của đồ thị G = <X, U> + m - (C) U gọi là một cạnh của đồ thị G = <X, U> ]
= [1 + 2 + 1] + [2 + 1 +1] = 8
Định lý:
Cho đồ thị hữu hạn G = <X,U> khi đó bậc của đồ thị G bằng 2 lần số cạnh của
đồ thị, tức là m(G) U gọi là một cạnh của đồ thị G = <X, U> = 2 U U U
Chứng minh:
Ta thấy một cạnh thuộc 2 đỉnh, nếu xX gọi là một đỉnh và mỗi phầnoá một cạnh thì bậc của G giảm đi 2, nếu xX gọi là một đỉnh và mỗi phầnoá một khuyên u = (xX gọi là một đỉnh và mỗi phần, xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> thì bậc của G cũng giảm đi 2, còn nếu xX gọi là một đỉnh và mỗi phầnoá hết cạnh, hết khuyên thì bậc của đồ thị bằng 0 Từ đó suy ra định lý.
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ị Ta có:
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 đỉnh bậc
chẵn (xX gọi là một đỉnh và mỗi phần A) U gọi là một cạnh của đồ thị G = <X, U> là số chẵn nên tổng bậc của các đỉnh bậc lẻ (xX gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần phải là số chẵn, do tất cả các số hạng của nó là số lẻ, nên tổng này phải gồm một số chẵn các số hạng.
Tập hợp các đỉnh kề nhau từ xX gọi là một đỉnh và mỗi phần i đến xX gọi là một đỉnh và mỗi phần j được gọi là 1 đường đi, kí hiệu
xX gọi là một đỉnh và mỗi phần i xX gọi là một đỉnh và mỗi phần i1 xX gọi là một đỉnh và mỗi phần i2 xX gọi là một đỉnh và mỗi phần j xX gọi là một đỉnh và mỗi phần x i u i xX gọi là một đỉnh và mỗi phần i1 u i1 xX gọi là một đỉnh và mỗi phần i2 u i2 u j xX gọi là một đỉnh và mỗi phần j
Trong đó 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) U gọi là một cạnh của đồ thị G = <X, U> 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) U gọi là một cạnh của đồ thị G = <X, U> đến ngọn (v) U gọi là một cạnh của đồ thị G = <X, U> không thể đi ngược lại
x X
x
m(x) m(x)
m(x) 2m
Trang 5Xét một đường đi từ xX gọi là một đỉnh và mỗi phần i - xX gọi là một đỉnh và mỗi phần j Nếu xX gọi là một đỉnh và mỗi phần i xX gọi là một đỉnh và mỗi phần x j thì đường đi này được gọi là một chu trình Như vậy chu trình là một đường đi có đỉnh xX gọi là một đỉnh và mỗi phầnuất phát và đỉnh kết thúc trùng nhau 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) U gọi là một cạnh của đồ thị G = <X, U> được gọi là đơn nếu nó đi qua mỗi cạnh không quá một lần.
- Đường đi (chu trình) U gọi là một cạnh của đồ thị G = <X, U> đượ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) U gọi là một cạnh của đồ thị G = <X, U> từ A đến E độ dài 5; ABDAB là một đường đi không đơn (chứa cạnh AB 2 lần) U gọi là một cạnh của đồ thị G = <X, U> 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.
3 Đồ thị liên thông
Cho đồ thị G = <X,U> Hai đỉnh phân biệt xX gọi là một đỉnh và mỗi phần,y X được gọi là liên thông nếu tồn X gọi là một đỉnh và mỗi phần tại một đường đi nối các đỉnh xX gọi là một đỉnh và mỗi phần, y với nhau Đồ thị G được gọi là liên thông nế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
Trang 6Ví dụ như đồ thị trong hình 3.3 có ba thành phần liên thông sau:
Cho đồ thị có hướng G = <X, U>
- G được gọi là đồ thị liên thông yếu nếu đồ thị vô hướng tương ứng với nó là liên thông
- G là liên thông một chiều nếu với hai đỉnh xX gọi là một đỉnh và mỗi phần,y khác nhau bất kỳ của G luôn có
đường đi xX gọi là một đỉnh và mỗi phần - y hoặc đường đi y - xX gọi là một đỉnh và mỗi phần.
- G là liên thông mạnh (liên thông 2 chiều) U gọi là một cạnh của đồ thị G = <X, U> nếu hai đỉnh xX gọi là một đỉnh và mỗi phần,y khác nhau bất kỳ của
G đều có đường đi xX gọi là một đỉnh và mỗi phần - y và đường đi y - xX gọi là một đỉnh và mỗi phần.
Hình 3.4
Ở hình 3.4 đồ thị H1 là liên thông mạnh, giả sử cặp đỉnh (A,C) U gọi là một cạnh của đồ thị G = <X, U> 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 đỉnh khác cũng tương tự như vậy H 2 là liên thông một chiều vì xX gọi là một đỉnh và mỗi phầnét cặp đỉnh (A,D) U gọi là một cạnh của đồ thị G = <X, U> có chiều đi từ D
(B,C) U gọi là một cạnh của đồ thị G = <X, U> không có chiều đi B - C cũng không có chiều đi C - B, nhưng đồ thị vô hướng tương ứng là liên thông.
F
C
E D
Trang 74 Đồ 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 xX gọi là một đỉnh và mỗi phầnuấ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
- Nếu trong đồ thị G ta bỏ đi một số cạnh nhưng giữ nguyên các đỉnh thì phần cò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ể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ỏ) U gọi là một cạnh của đồ thị G = <X, U> và nối hai điểm bằng một đường (cong, thẳng, mũi tên) U gọi là một cạnh của đồ thị G = <X, U> khi cặp điểm đó ứng với một cạnh (cung) U gọi là một cạnh của đồ thị G = <X, U> của đồ thị.
Ví dụ 1: Cho đồ thị G = <X,U> trong đó
a) U gọi là một cạnh của đồ thị G = <X, U> b) U gọi là một cạnh của đồ thị G = <X, U>
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 = (X 1 , U 1 ) U gọi là một cạnh của đồ thị G = <X, U> và G 2 = <X 2 , U 2 >
U 1 vào U 2 sao cho nếu có cạnh e = (u, v) U gọi là một cạnh của đồ thị G = <X, U> U X gọi là một đỉnh và mỗi phần 1 tương ứng với cạnh e' = (u', v') U gọi là một cạnh của đồ thị G = <X, U> U X gọi là một đỉnh và mỗi phần 2 thì cặp đỉnh u, v X X gọi là một đỉnh và mỗi phần 1 cũng là tương ứng cặp đỉnh u', v' X X gọi là một đỉnh và mỗi phần 2
Ví dụ xX gọi là một đỉnh và mỗi phầnét 2 đồ thị G 1 và G 2 như hình 4.2
D E
C
E B
A
Trang 8G 1 G 2
Hình 4.2
f(a) U gọi là một cạnh của đồ thị G = <X, U> = m f(c) U gọi là một cạnh của đồ thị G = <X, U> = n
f(d) U gọi là một cạnh của đồ thị G = <X, U> = q f(b) U gọi là một cạnh của đồ thị G = <X, U> = p
Nếu a, b X X gọi là một đỉnh và mỗi phần 1 kề nhau thì f(a) U gọi là một cạnh của đồ thị G = <X, U> , f(b) U gọi là một cạnh của đồ thị G = <X, U> X X gọi là một đỉnh và mỗi phần 2 kề nhau.
Vậy đây là 2 đồ thị đẳng cấu với nhau, ta có thể xX gọi là một đỉnh và mỗi phầnem G 1 và G 2 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.
Để xX gọi là một đỉnh và mỗi phầnét 2 đồ thị có đẳng cấu không là việc khó, tuy nhiên để xX gọi là một đỉnh và mỗi phầné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:
Hình 4.3 a: G- 1 đều; b: G - 2 đều; c: G - 2 đều; d: G - 3 đều.
Trường hợp riêng như đồ thị hình 4.3.b và hình 4.3.c là những đồ thị vòng ký hiệu
C n (n là số đỉnh) U gọi là một cạnh của đồ thị G = <X, U>
3.2 Đồ thị đầy đủ
Trang 9Đồ thị đầy đủ n đinh, ký hiệu K n 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 đồ thị
Hình 4.5 Các dạng đồ thị bánh xX gọi là một đỉnh và mỗi phầne
3.4 Một vài ứng dụng của đồ thị đặc biệt
Ở các mạng cục bộ (LAN) U gọi là một cạnh của đồ thị G = <X, U> , các máy tính thường được kết nối theo một cách thức nào đó gọi là hình trạng (topolopy) U gọi là một cạnh của đồ thị G = <X, U> Dựa theo đặc điểm của các totolopy này mà ta
có thể mô hình bằng 1 số dạng đồ thị đặc biệt Ví dụ với mạng LAN các máy tính được kết nối theo topolopy hình sao (Star) U gọi là một cạnh của đồ thị G = <X, U> sau đây:
Trang 10a) U gọi là một cạnh của đồ thị G = <X, U> b) U gọi là một cạnh của đồ thị G = <X, U> c) U gọi là một cạnh của đồ thị G = <X, U> d) U gọi là một cạnh của đồ thị G = <X, U>
a) U gọi là một cạnh của đồ thị G = <X, U> Dạng sao b) U gọi là một cạnh của đồ thị G = <X, U> dạng vòng c) U gọi là một cạnh của đồ thị G = <X, U> dạng hỗn hợp d) U gọi là một cạnh của đồ thị G = <X, U> dạng đầy đủ (Complete) U gọi là một cạnh của đồ thị G = <X, U>
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) U gọi là một cạnh của đồ thị G = <X, U> 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ạng cục bộ với
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 xX gọi là một đỉnh và mỗi phầne W n (hình 4.7.c) U gọi là một cạnh của đồ thị G = <X, U> .
Mạng cục bộ dạng bánh xX gọi là một đỉnh và mỗi phầne 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 ta cũ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ới kiểu này có thể mô hình bằng đồ thị đầy đủ K n (hình 4.7.d) U gọi là một cạnh của đồ thị G = <X, U>
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 ứ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.
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ị) U gọi là một cạnh của đồ thị G = <X, U> Gọi ma trận kề là
A = (a ij ) U gọi là một cạnh của đồ thị G = <X, U> i,j = 1 n
+ Trường hợp G = <X,U> là đồ thị vô hướng với X = {xX gọi là một đỉnh và mỗi phần 1 , xX gọi là một đỉnh và mỗi phần 2 , ,xX gọi là một đỉnh và mỗi phần n } khi đó mỗi phần tử a ij của ma trận A được xX gọi là một đỉnh và mỗi phầnác định như sau: a ij = a ji = d, nếu cặp đỉnh (xX gọi là một đỉnh và mỗi phần i , xX gọi là một đỉnh và mỗi phần j ) U gọi là một cạnh của đồ thị G = <X, U> có
d cạnh nối với nhau Khi cặp đỉnh (xX gọi là một đỉnh và mỗi phần i , xX gọi là một đỉnh và mỗi phần j ) U gọi là một cạnh của đồ thị G = <X, U> không có cạnh nào nối với nhau thị a ij = 0.
Ta thấy ma trận kề của đồ thị vô hướng là ma trận đối xX gọi là một đỉnh và mỗi phầnứng.
+ Trường hợp G = <X,U> là đồ thị có hướng với X = {xX gọi là một đỉnh và mỗi phần 1 , xX gọi là một đỉnh và mỗi phần 2 , ,xX gọi là một đỉnh và mỗi phần n } thì mỗi phần tử
a ij của A được xX gọi là một đỉnh và mỗi phầnác định như sau: đối với mỗi cặp đỉnh (xX gọi là một đỉnh và mỗi phần i , xX gọi là một đỉnh và mỗi phần j ) U gọi là một cạnh của đồ thị G = <X, U> từ xX gọi là một đỉnh và mỗi phần i đến xX gọi là một đỉnh và mỗi phần j nếu có d cung thì a ij = d Chú ý a ji = 0 nếu không có cung nào hướng từ xX gọi là một đỉnh và mỗi phần j đến xX gọi là một đỉnh và mỗi phần i Ma trận kề trong trường hợp này là không đối xX gọi là một đỉnh và mỗi phầnứng.
Trang 11
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 = (xX gọi là một đỉnh và mỗi phần i , xX gọi là một đỉnh và mỗi phần j) U gọi là một cạnh của đồ thị G = <X, U> được gán một trọng số l(e) U gọi là một cạnh của đồ thị G = <X, U> (còn viết
là l(xX gọi là một đỉnh và mỗi phầni , xX gọi là một đỉnh và mỗi phần j ) U gọi là một cạnh của đồ thị G = <X, U> ) U gọi là một cạnh của đồ thị G = <X, U> 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: a ij = l(xX gọi là một đỉnh và mỗi phầni , xX gọi là một đỉnh và mỗi phần j ) U gọi là một cạnh của đồ thị G = <X, U>
Ưu điểm của phương pháp này là dễ dàng xX gọi là một đỉnh và mỗi phầná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 đồ
Định lý:
Nếu G = <X,U> là đa đồ thị với A = (a ij ) U gọi là một cạnh của đồ thị G = <X, U> là ma trận kề tương ứng, thì số đường
đi khác nhau từ đỉnh xX gọi là một đỉnh và mỗi phần i đến đỉnh xX gọi là một đỉnh và mỗi phần j có độ dài s bằng phần tử P ij của ma trận tích
A A A = A X Bộ G = X Bộ G = X Bộ G = s = (P ij ) U gọi là một cạnh của đồ thị G = <X, U>
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ễn một mạng máy tính bằng đồ thị, giả sử có 2 máy nào đó mà thông tin truyền giữa chúng là quan trọng, cần tiến hành kiểm tra xX gọi là một đỉnh và mỗi phầnem đã có đường truyền dự phòng giữa chúng không Xét ở góc độ đồ thị thì cần kiểm tra xX gọi là một đỉnh và mỗi phầnem số đường đi giữa cặp đỉnh tương ứng với 2 máy đó, nếu số đường đi lớn hơn 1 là đã có đường truyề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;
n,l,xX gọi là một đỉnh và mỗi phần1,xX gọi là một đỉnh và mỗi phần2: Integer;
Procedure InputMt(Var Mt: Matran) U gọi là một cạnh của đồ thị G = <X, U> ;
1 0
0 0
2 1
1 2
0 1
0 1
1 1
0 1 0
1 1 0
Trang 12Gan(a,b) U gọi là một cạnh của đồ thị G = <X, U> ;
For i:=1 to m-1 do Begin
TichMt(b,a,aa) U gọi là một cạnh của đồ thị G = <X, U> ;
Gan(aa,b) U gọi là một cạnh của đồ thị G = <X, U> ;
Writeln('Nhap ma tran ke cho do thi:') U gọi là một cạnh của đồ thị G = <X, U> ;
Write('So dinh do thi: ') U gọi là một cạnh của đồ thị G = <X, U> ; Readln(n) U gọi là một cạnh của đồ thị G = <X, U> ;
InputMt(a) U gọi là một cạnh của đồ thị G = <X, U> ;
Trang 13Write('Dinh xX gọi là một đỉnh và mỗi phầnuat phat: ') U gọi là một cạnh của đồ thị G = <X, U> ; Readln(xX gọi là một đỉnh và mỗi phần1) U gọi là một cạnh của đồ thị G = <X, U> ;
Write('Dinh ket thuc: ') U gọi là một cạnh của đồ thị G = <X, U> ; Readln(xX gọi là một đỉnh và mỗi phần2) U gọi là một cạnh của đồ thị G = <X, U> ;
Write('Do dai duong di: ') U gọi là một cạnh của đồ thị G = <X, U> ; Readln(l) U gọi là một cạnh của đồ thị G = <X, U> ;
LthuaMt(l) U gọi là một cạnh của đồ thị G = <X, U> ;
FindWay(xX gọi là một đỉnh và mỗi phần1,xX gọi là một đỉnh và mỗi phần2) U gọi là một cạnh của đồ thị G = <X, U> ;
Ví dụ: ở hình 4.9 đồ thị G1 và G 2 được biểu diễn bằng danh sách kề như sau:
Trang 14Nhược điểm của cách biểu diễn này là thời gian cần thiết để xX gọi là một đỉnh và mỗi phầnác định có một cạnh
đi từ đỉnh xX gọi là một đỉnh và mỗi phần i tới đỉnh xX gọi là một đỉnh và mỗi phần j có hay không mất O(n) U gọi là một cạnh của đồ thị G = <X, U> 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.
2 1 1 2
3 Nil 3
Trang 15Chương 2
SỐ ỔN ĐỊNH VÀ TÔ MÀU ĐỒ THỊ
I SỐ ỔN ĐỊNH TRONG, SỐ ỔN ĐỊNH NGOÀI, NHÂN ĐỒ THỊ
1 Số ổn định trong
Cho đồ thị vô hướng G = <X, U> và A X
a) U gọi là một cạnh của đồ thị G = <X, U> Tập A gọi là tập ổn định trong của đồ thị nếu hai đỉnh bất kỳ trong A làkhông kề nhau, tức là không có một cạnh nào của đồ thị chứa hai đỉnh xX gọi là một đỉnh và mỗi phần và y.b) U gọi là một cạnh của đồ thị G = <X, U> Tập A gọi là tập ổn định trong cực đại của đồ thị G nếu:
- A là tập ổn định trong
- Nếu thêm vào A một đỉnh ngoài A thì A không phải là ổn định trong
Gọi L là tập hợp các tập ổn đỉnh trong của của G = <X,U> Khi đó ký hiệu (G) U gọi là một cạnh của đồ thị G = <X, U>
= MaxX gọi là một đỉnh và mỗi phần {A / AX gọi là một đỉnh và mỗi phần L} và (G) U gọi là một cạnh của đồ thị G = <X, U> được gọi là số ổn định trong của đồ thị G Như vậy
(G) U gọi là một cạnh của đồ thị G = <X, U> là số phần tử của 1 tập ổn định trong cực đại nào đó.
2 Số ổn định ngoài
Cho đồ thị vô hướng G = <X,U> và B X
a) U gọi là một cạnh của đồ thị G = <X, U> Tập B được gọi là tập ổn định ngoài của đồ thị nếu với mỗi phần tử y X gọi là một đỉnh và mỗi phần X \ Bđều tồn tại xX gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần B sao cho có cạnh nối giữa xX gọi là một đỉnh và mỗi phần và y, B còn được gọi là tập thốngtrị của đồ thị
b) U gọi là một cạnh của đồ thị G = <X, U> Tập B được gọi là tập ổn định ngoài cực tiểu nếu:
- B là tập ổn định ngoài
- Nếu bớt 1 phần tử bất kỳ của B thị B không còn là tập ổn định ngoài
Gọi M là tập của tất cả các tập ổn định ngoài của G = <X,U> Khi đó ký hiệu
(G) U gọi là một cạnh của đồ thị G = <X, U> = Min { / BX gọi là một đỉnh và mỗi phần M} và (G) U gọi là một cạnh của đồ thị G = <X, U> được gọi là số ổn định ngoài của đồ thị G Đối với các tập ổn định ngoài, ta thường quan tâm đến tập ổn định ngoài có sốphần tử ít nhất vì lực lượng của nó liên quan tới số ổn định ngoài của đồ thị
3 Nhân đồ thị
Trang 16Cho đồ thị vô hướng G = <X, U> Nếu tập A X vừa là tập ổn định trong vừa
là tập ổn định ngoài của đồ thị G thị A được gọi là nhân của đồ thị
Đối với nhân của đồ thị, ta quan tâm tới nhân có số phần tử ít nhất
Với đồ thị trên các tập ổn định ngoài cực tiểu là B1 = A1; B2 = A2; B3 = A3; B4
= A4 Vì các tập này nếu bớt đi 1 trong các phần tử của chúng thì tập còn lạikhông là tập ổn định ngoài nữa Số ổn đỉnh ngoài của đồ thị này là (G) U gọi là một cạnh của đồ thị G = <X, U> = 3.Nhân của đồ thị trên là B1, B2, B3, B4 vì các tập này là tập ổn định trong và đồngthời cũng là tập ổn định ngoài
4 Các thuật toán tìm các tập ổn định trong cực đại, ổn định ngoài cực tiểu.
4.1 Thuật toán tìm số ổn định trong
- Bước 1: Tìm các tập ổn định trong có 2 phần tử bằng cách xX gọi là một đỉnh và mỗi phầnét tất cả tổ hợp
chập 2 của n phần tử (n số các đỉnh) U gọi là một cạnh của đồ thị G = <X, U> , kiểm tra những tập nào mà phần tử của matrận kề tương ứng bằng 0 thì tập đó là ổn định trong
- Bước 2: Duyệt từng tập có 2 phần tử và bổ sung thêm phần tử thứ 3 và kiểm
tra từng cặp như bước 1, tập nào thoả ta được tập ổn định trong 3 phần tử
- Bước k: Giả sử đã tìm được m tập con ổn định trong có k + 1 phần tử
+ Duyệt từng tập và bổ sung vào các tập đó thêm 1 phần tử
Trang 17+ Nếu không có tập nào bổ sung được nữa thì dừng
4.2 Thuật toán tìm số ổn định ngoài
Xét G = <X,U> với X = {xX gọi là một đỉnh và mỗi phần1, xX gọi là một đỉnh và mỗi phần2, ,xX gọi là một đỉnh và mỗi phầnn}
- Bước 1: Xác định các tập xX gọi là một đỉnh và mỗi phầni) U gọi là một cạnh của đồ thị G = <X, U> i = 1 n với xX gọi là một đỉnh và mỗi phầni) U gọi là một cạnh của đồ thị G = <X, U> = {xX gọi là một đỉnh và mỗi phầni và các đỉnh kề với xX gọi là một đỉnh và mỗi phầni}
- Bước 2: Từ các tập xX gọi là một đỉnh và mỗi phần1) U gọi là một cạnh của đồ thị G = <X, U> , xX gọi là một đỉnh và mỗi phần2) U gọi là một cạnh của đồ thị G = <X, U> , , xX gọi là một đỉnh và mỗi phầnn) U gọi là một cạnh của đồ thị G = <X, U> ta tìm tập B
B = {xX gọi là một đỉnh và mỗi phầnk1 , xX gọi là một đỉnh và mỗi phầnk2 , , xX gọi là một đỉnh và mỗi phầnkm} sao cho xX gọi là một đỉnh và mỗi phầnk1) U gọi là một cạnh của đồ thị G = <X, U> X xX gọi là một đỉnh và mỗi phầnk2) U gọi là một cạnh của đồ thị G = <X, U> X XxX gọi là một đỉnh và mỗi phầnkm) U gọi là một cạnh của đồ thị G = <X, U> = X
Khi đó B là tập ổn định ngoài cực tiểu
5 Ứng dụng đồ thị trong lập trình chơi cờ Ca rô
Ta xX gọi là một đỉnh và mỗi phầnét một ứng dụng của đồ thị cho bài toán lập trình chơi cờ Ca rô trên máytính Cờ carô là loại cờ mà rất nhiều bạn trẻ đặc biệt giới sinh viên học sinh ưathích Quy tắc và cách thức chơi đơn giản, nhưng nó thực sự là bài toán tin rấthay, là bài lập trình thể hiện nhiều tư duy thuật toán, cũng như cơ sở về trí tuệnhân tạo cho việc lập trình trò chơi giữa người và máy
Ta xX gọi là một đỉnh và mỗi phầnét ứng dụng của đồ thị phục vụ cho bài toán lập trình trò chơi Carô
Xét một thế cờ Carô như hình 1.2.a
Cấu trúc dữ liệu cho thế cờ này có thể dùng bảng ma trận như hình 1.2.b, với 0
là vùng trắng, 1 là quân "o" và 2 là quân "xX gọi là một đỉnh và mỗi phần" Nhưng như vậy việc tính toán sẽrất khó khăn, ta có thể dùng đồ thị làm cấu trúc dữ liệu cho thế cờ Carô, khi đóviệc tính toán sẽ dễ dàng đi và tận dụng những tính chất đã nghiên cứu về đồ thịthì bài toán lập trình trò chơi carô sẽ trở nên thuận lợi hơn nhiều
a) Mô hình bằng đồ thị theo vị trí liền kề
Ta xX gọi là một đỉnh và mỗi phầnây dựng 1 đơn đồ thị theo nguyên tắc sau
- Mỗi 1 quân "xX gọi là một đỉnh và mỗi phần" hoặc quân "o" thì tương ứng với một đỉnh
- Hai đỉnh là kề nhau nếu tương ứng với 2 quân ở vị trí liên tiếp nhau
- Mỗi một cạnh được gán một nhãn, nhãn cho biết 2 đỉnh kề nhau là kề đứng, kềchéo hay là kề ngang trong thế cờ Ta gán tên nhãn như sau: thẳng ngang nhãn
0 1 0 2
A = 0 0 2 2
0 2 0 0
1 0 0 1
Trang 18là 1, thẳng chéo trái là 2, thẳng dọc nhãn là 3, thẳng chéo phải là 4 (xX gọi là một đỉnh và mỗi phầnem hình1.3.a) U gọi là một cạnh của đồ thị G = <X, U> .
a) U gọi là một cạnh của đồ thị G = <X, U> b) U gọi là một cạnh của đồ thị G = <X, U>
Hình 1.3 a) U gọi là một cạnh của đồ thị G = <X, U> Cách đánh nhãn b) U gọi là một cạnh của đồ thị G = <X, U> Đồ thị cho thế cờ hình 1.2.a
Ví dụ đồ thị như hình 1.3.b là thể hiện cho thế cờ hình 1.2.a
Trong luật chơi cờ carô nếu quân "xX gọi là một đỉnh và mỗi phần" đi trước thì ngay sau đó là quân "o" đi sau,tiếp tục lại "xX gọi là một đỉnh và mỗi phần" rồi lại "o" Chính điều này ta có thể coi những quân "xX gọi là một đỉnh và mỗi phần" tươngứng là những đỉnh số lẻ, quân "o" tương ứng những đỉnh số chẵn hoặc ngượclại
Trong 1 thế cờ Carô nếu tồn tại 1 dãy 5 quân liên tiếp của "xX gọi là một đỉnh và mỗi phần" hoặc "o" đượcsắp thẳng hàng ngang, thẳng hàng dọc hoặc thẳng hàng chéo thì thắng Với đồthị nếu tồn tại một đường đi các cạnh cùng nhãn gồm 5 đỉnh số lẻ, hoặc số chẵnthì thế cờ thắng cho tương ứng quân "xX gọi là một đỉnh và mỗi phần" hoặc quân "o"
Xét đồ thị hinh 1.3.b đã có 1 đường đi cùng nhãn 4 gồm 3 đỉnh cùng quân xX gọi là một đỉnh và mỗi phần1,xX gọi là một đỉnh và mỗi phần2, xX gọi là một đỉnh và mỗi phần3 Nếu ta thêm 1 đỉnh xX gọi là một đỉnh và mỗi phần6 kề với đỉnh o2 sao cho cạnh (o2, xX gọi là một đỉnh và mỗi phần6) U gọi là một cạnh của đồ thị G = <X, U> có nhãn 4, saucùng ta thay đỉnh o2 bằng đỉnh xX gọi là một đỉnh và mỗi phần5 thì bây giờ ta có 1 đường đi cùng nhãn 4 gồm
5 đỉnh quân "xX gọi là một đỉnh và mỗi phần" (xX gọi là một đỉnh và mỗi phần1, xX gọi là một đỉnh và mỗi phần2, xX gọi là một đỉnh và mỗi phần3, xX gọi là một đỉnh và mỗi phần5, xX gọi là một đỉnh và mỗi phần6) U gọi là một cạnh của đồ thị G = <X, U> và ta có 1 thế cờ thắng cho quân xX gọi là một đỉnh và mỗi phần
Nhận xét:
- Với mô hình này ta sẽ không thể thấy được đầy đủ mối quan hệ giữa cácđỉnh, như đồ thị hình 1.3.b đỉnh o3 là đỉnh cô lập, trong thế cờ hình 1.2.a o1 cómối quan hệ thẳng hàng với xX gọi là một đỉnh và mỗi phần1 và xX gọi là một đỉnh và mỗi phần3 nhưng trong đồ thị tương ứng ta khôngnhìn thấy được mối quan hệ này nên khó tính toán được nước đi cho lần sau
Mà mối quan hệ "thẳng hàng" giữa các quân là quan trọng trong bài toán lậptrình trò chơi carô
4 1
Trang 19- Mô hình này chỉ thích hợp cho việc lập trình khi mà chỉ chơi giữa người vớingười, lúc này bài toán chỉ là tìm đường đi cùng nhãn gồm 5 đỉnh cùng quân,không phải là bài toán tính nước đi cho các bước tiếp theo.
b) Mô hình bằng đồ thị theo mối quan hệ thẳng hàng.
Cách xX gọi là một đỉnh và mỗi phầnây dựng này tương tự như cách thứ nhất nhưng có những đặc điểm sau:
- Hai đỉnh xX gọi là một đỉnh và mỗi phần và o là kề nhau nếu tương ứng với 2 quân xX gọi là một đỉnh và mỗi phần và o mà chúng có mốiquan hệ là thẳng hàng với nhau
- Trên mỗi cạnh ngoài nhãn thể hiện mối quan hệ thẳng hàng, ta thêm 1 trọng sốđường đi, trọng số của cạnh (xX gọi là một đỉnh và mỗi phần, o) U gọi là một cạnh của đồ thị G = <X, U> là số ô đi thẳng hàng từ quân xX gọi là một đỉnh và mỗi phần đến quân otrong thế cờ
- Hai đỉnh xX gọi là một đỉnh và mỗi phần và o chỉ được kề nhau khi trọng số cạnh (xX gọi là một đỉnh và mỗi phần, o) U gọi là một cạnh của đồ thị G = <X, U> không quá 4
xX gọi là một đỉnh và mỗi phần 1 o 1 xX gọi là một đỉnh và mỗi phần 1
xX gọi là một đỉnh và mỗi phần 2 xX gọi là một đỉnh và mỗi phần 2
xX gọi là một đỉnh và mỗi phần 3 xX gọi là một đỉnh và mỗi phần 3
Trang 20trọng số cho các cạnh còn lại ta có đồ thị như hình 1.5.a Như vậy nếu tồn tại 1đường đi cùng nhãn và có trọng số 1 gồm 5 đỉnh cùng quân thì thế cờ thắng, ở
đồ thị hình 4.a đường đi thắng cho quân xX gọi là một đỉnh và mỗi phần là (xX gọi là một đỉnh và mỗi phần1, xX gọi là một đỉnh và mỗi phần2, xX gọi là một đỉnh và mỗi phần3,xX gọi là một đỉnh và mỗi phần4, xX gọi là một đỉnh và mỗi phần5) U gọi là một cạnh của đồ thị G = <X, U>
Trong kỹ thuật chơi cờ Ca rô, nước đi có lợi nhất là nước có tạo được nhiềukhả năng dẫn đến thế cờ thắng, ví dụ thế cờ như hình 1.4.b thì ví trí của o1 là 1trong những nước có lợi nhất, vì nếu ta thay o1 bằng xX gọi là một đỉnh và mỗi phần4 thì quân xX gọi là một đỉnh và mỗi phần có thêm 3khả năng phát triển nước dẫn đến thế cờ thắng như (xX gọi là một đỉnh và mỗi phần4, xX gọi là một đỉnh và mỗi phần2) U gọi là một cạnh của đồ thị G = <X, U> ; (xX gọi là một đỉnh và mỗi phần4, xX gọi là một đỉnh và mỗi phần1) U gọi là một cạnh của đồ thị G = <X, U> ; ( xX gọi là một đỉnh và mỗi phần4, xX gọi là một đỉnh và mỗi phần3) U gọi là một cạnh của đồ thị G = <X, U> ,nếu với đồ thị tương ứng thì xX gọi là một đỉnh và mỗi phần4 là phần tử thống trị tập {xX gọi là một đỉnh và mỗi phần1, xX gọi là một đỉnh và mỗi phần2, xX gọi là một đỉnh và mỗi phần3} Nếu vẫn giữ
vị trí o1 như ban đầu thì quân "o" đã ngặn chặn đối phương có hiệu quả vì o1 đãthống trị {xX gọi là một đỉnh và mỗi phần1, xX gọi là một đỉnh và mỗi phần2, xX gọi là một đỉnh và mỗi phần3}, và ta thấy còn có o2 thống trị {xX gọi là một đỉnh và mỗi phần1, xX gọi là một đỉnh và mỗi phần2, xX gọi là một đỉnh và mỗi phần3} ngăn chặn đượcthế sắp thắng theo thẳng chéo {xX gọi là một đỉnh và mỗi phần1, xX gọi là một đỉnh và mỗi phần2, xX gọi là một đỉnh và mỗi phần3} (xX gọi là một đỉnh và mỗi phầnem đồ thị hình 1.5.b) U gọi là một cạnh của đồ thị G = <X, U> Như vậy ởgóc độ đồ thị thì ta tìm tập thống trị (tập ổn định ngoài cực tiểu) U gọi là một cạnh của đồ thị G = <X, U> , ở đồ thị này{o1, o2} là 1 tập thống trị
Nhận xét:
- Với mô hình này ta có ưu điểm là nhìn rõ trước được mối quan hệ giữa cácđỉnh, tuy vậy nếu có 2 đỉnh không thẳng hàng thì chúng cô lập nhau, nhưng điềuthường xX gọi là một đỉnh và mỗi phầnảy ra khi số đỉnh là nhỏ ta dễ dàng kiểm soát được thế cờ Hơn nữa hầunhư ta chỉ quan tâm những quân có mối quan hệ thẳng hàng, để khắc phụcnhược điểm ta có thể dựa vào mối quan hệ "tay ba" bằng cách đưa thêm đỉnh
vụ cho việc xX gọi là một đỉnh và mỗi phầnử lý và tìm kiếm, tra cứu thông tin khi cần thiết
II TÔ MÀU ĐỒ THỊ
1 Sắc số đồ thị
Sắc số đồ thị G là số màu tối thiểu cần dùng để tô màu các đỉnh của đồ thị saocho hai đỉnh kề nhau phải có màu khác nhau
Ta ký hiệu sắc số của đồ thị G là (G) U gọi là một cạnh của đồ thị G = <X, U>
Định lý 1: Cho đồ thị n đỉnh G = <X, U> Nếu đồ thị là đầy đủ thì sắc số của
nó bằng số đỉnh của đồ thị, tức là (G) U gọi là một cạnh của đồ thị G = <X, U> = n
Chứng minh:
Trang 21Với n = 1 thì (G) U gọi là một cạnh của đồ thị G = <X, U> = 1
Giả thiết đúng với n k cần chứng minh đúng với n = k +1
Xét đồ thị k + 1 đỉnh X = {xX gọi là một đỉnh và mỗi phần1, xX gọi là một đỉnh và mỗi phần2, , xX gọi là một đỉnh và mỗi phầnk, xX gọi là một đỉnh và mỗi phầnk+1}
Nếu trong đồ thị G ta bỏ đỉnh xX gọi là một đỉnh và mỗi phầnk+1 còn lại là 1 đồ thị với k đỉnh Đối với phầncòn lại theo giả thiết quy nạp ta cần k màu
Xét đỉnh xX gọi là một đỉnh và mỗi phầnk +1, vì đồ thị là đầy đủ nên đỉnh xX gọi là một đỉnh và mỗi phầnk+1 nối với các đỉnh còn lại, cho nên
để tô đỉnh xX gọi là một đỉnh và mỗi phầnk+1 cần màu khác với màu đã tô nên số màu sẽ là k + 1 màu
Hệ quả: Nếu đồ thị G chứa một đồ thị con đẳng cấu với Km thì (G) U gọi là một cạnh của đồ thị G = <X, U> thì trong G tồn tại ít nhất một chu trình. m
Định lý 2: Giả sử G = <X, U> là đồ thị vô hướng (G) U gọi là một cạnh của đồ thị G = <X, U> = 2 khi và chỉ khi trong
G không có chu trình độ dài lẻ
- Điều kiện đủ: Giả sử G không có chu trình độ dài lẻ Ta chỉ ra (G) U gọi là một cạnh của đồ thị G = <X, U> = 2 Thậtvậy, ta tô màu các đỉnh của G theo nguyên tắc sau: Nếu xX gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần X được tô màuxX gọi là một đỉnh và mỗi phầnanh thì các đỉnh kề của xX gọi là một đỉnh và mỗi phần là y, z lại tô màu đỏ Tiếp theo các đỉnh kề của y,z, lại tô màu xX gọi là một đỉnh và mỗi phầnanh Cứ như vậy, do số đỉnh hữu hạn và G liên thông nên tất cảcác đỉnh trong X sẽ được tô hoặc xX gọi là một đỉnh và mỗi phầnanh hoặc đỏ và không có một đỉnh nào được
tô cả hai màu xX gọi là một đỉnh và mỗi phầnanh, đỏ đồng thời, vì nếu có điều đó xX gọi là một đỉnh và mỗi phầnảy ra thì sẽ có một chutrình độ dài lẻ đi qua xX gọi là một đỉnh và mỗi phần (trái với giả thiết) U gọi là một cạnh của đồ thị G = <X, U> Hay (G) U gọi là một cạnh của đồ thị G = <X, U> = 2
- Điều kiện cần: Giả sử (G) U gọi là một cạnh của đồ thị G = <X, U> = 2 Dễ thấy rằng chỉ dùng 2 màu để tô các đỉnhcủa G thì trong G phải không có chu trình độ dài lẻ, vì nếu có chu trình độ dài lẻthì tô màu các đỉnh theo quy tắc trên sẽ có ít nhất một đỉnh được tô đồng thời cả
đỏ nên d, e tô màu xX gọi là một đỉnh và mỗi phầnanh Ta thấy G1 không có chu trình lẻ và (G) U gọi là một cạnh của đồ thị G = <X, U> = 2
Xét G2 có chu trình độ dài lẻ nên không thể tô bằng 2 màu, mà phải dùng 3 màu:xX gọi là một đỉnh và mỗi phầnanh, đỏ và vàng
ab
c
e d
a
b
c
d
Trang 22Định lý 3: Giả sử G = <X,U> là đồ thị vô hướng với số đỉnh là n Khi đó số ổn
định trong (G) U gọi là một cạnh của đồ thị G = <X, U> và sắc số (G) U gọi là một cạnh của đồ thị G = <X, U> thoả mãn bất đẳng thức:
(G) U gọi là một cạnh của đồ thị G = <X, U> (G) U gọi là một cạnh của đồ thị G = <X, U> thì trong G tồn tại ít nhất một chu trình.n
Chứng minh: Đặt (G) U gọi là một cạnh của đồ thị G = <X, U> = s, theo định nghĩa của sắc số thì dùng s màu để tô cácđỉnh trong X theo nguyên tắc hai đỉnh kề phải tô bằng 2 màu khác nhau
Cách tô màu như trên lập nên một phân hoạch tương đương trên tập X: X1 X
X2 X XXs, Xi Xj = (i j) U gọi là một cạnh của đồ thị G = <X, U> , ở đây nếu ta đánh số các màu từ 1, 2, ,s thì Xi gồmcác đỉnh cũng được tô màu i (i = 1,2, ,s) U gọi là một cạnh của đồ thị G = <X, U> Mặt khác theo định nghĩa số ổn địnhtrong thì Xi (G) U gọi là một cạnh của đồ thị G = <X, U> (i = 1, ,s) U gọi là một cạnh của đồ thị G = <X, U> Từ đó ta có đánh giá:
X n= X1 + X2 + + Xi + + Xs s.(G) U gọi là một cạnh của đồ thị G = <X, U>
Hay (G) U gọi là một cạnh của đồ thị G = <X, U> (G) U gọi là một cạnh của đồ thị G = <X, U> thì trong G tồn tại ít nhất một chu trình.n Định lý được chứng minh
2 Tô màu đồ thị phẳng
2.1 Đồ thị phẳng
Xét đồ thị G = <X,U> được gọi là phẳng nếu có thể biểu diễn được trên mặtphẳng sao cho bất kỳ hai cạnh nào cũng không cắt nhau ngoài đỉnh (nếu có) U gọi là một cạnh của đồ thị G = <X, U>
Ví dụ: Xét đồ thị như hình 2.2.a 1 là đồ thị phẳng vì nó được biểu diễn cách
khác ở dạng mặt phẳng không có cạnh cắt nhau như hình 2.2.a 2 Tương tự đồ thị
ở hình 2.2.b 1 là đồ thị phẳng vì nó có thể biểu diễn ở dạng mặt phẳng như hình 2.2.b 2
a1) U gọi là một cạnh của đồ thị G = <X, U> a2) U gọi là một cạnh của đồ thị G = <X, U>
b1) U gọi là một cạnh của đồ thị G = <X, U> b2) U gọi là một cạnh của đồ thị G = <X, U>
Hình 2.2
* Các cạnh của đồ thị phẳng chia mặt phẳng thành nhiều miền, mỗi miền gọi là
một mặt của G Những cạnh nằm bên trong mặt f nào đó hoặc là cạnh giới hạn
của mặt f với một mặt khác gọi là cạnh biên của mặt f
Trang 232.2 Định lý 5 màu (Kempe - Heawood)
Mọi đồ thị phẳng đều có sắc số không lớn hơn 5.
Chứng minh: Xét một đồ thị G có n đỉnh Dùng phép chứng minh quy nạp trên
n ta có:
Trường hợp G có một đỉnh hiển nhiên đúng
Giả sử mọi đồ thị phẳng có n đỉnh (n thì trong G tồn tại ít nhất một chu trình.1) U gọi là một cạnh của đồ thị G = <X, U> đều có thể tô bằng 5 màu Coi một đồthị phẳng có n + 1 đỉnh Có thể giả sử G là đơn đồ thị Vì G phẳng nên có mộtđỉnh bậc 5 Loại bỏ đỉnh xX gọi là một đỉnh và mỗi phần này khỏi G, ta nhận được một đồ thị phẳng mới có
n đỉnh Tô màu cho đồ thị mới này bằng năm màu, do giả thiết qui nạp trên điềunày thực hiện được Bây giờ đưa đỉnh xX gọi là một đỉnh và mỗi phần vào lại đồ thị
Nếu các đỉnh kề với xX gọi là một đỉnh và mỗi phần được tô bằng ít hơn 5 màu thì tô màu xX gọi là một đỉnh và mỗi phần bằng một trong
5 năm khác màu các đỉnh kề với xX gọi là một đỉnh và mỗi phần là xX gọi là một đỉnh và mỗi phầnong : đồ thị G đã được tô bằng 5 màu Vậy chỉ xX gọi là một đỉnh và mỗi phầnét trường hợp m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = 5 và 5 đỉnh kề với xX gọi là một đỉnh và mỗi phần được tô bằng 5 màu nhưhình 2.3 sau:
Hình 2.3
Xét tất cả các đường trong G bắt đầu từ a và gồm các đỉnh chỉ tô bằng màu 1
và màu 3, trong các đường này nếu không có đường nào đi qua đỉnh c thì ta cóthể thày đổi màu các đỉnh trên, tất cả các đường nói trên theo cách đổi màu 1thành màu 3 và có thể tô đỉnh xX gọi là một đỉnh và mỗi phần màu 1 Nếu có một đường từ a đên c gồm toàncác đỉnh chỉ tô bằng màu 1 và màu 3 thì đường này cộng thêm hai cạnh e1 = (xX gọi là một đỉnh và mỗi phần,a) U gọi là một cạnh của đồ thị G = <X, U> và e2 = (c, xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> sẽ tạo thành một chu trình Hai đỉnh b, d không thể nằm cùngbên trong hoặc cùng bên ngoài chu trình này được Suy ra không có đường nào
từ b đến d gồm các đỉnh chỉ tô màu 2 và màu 4 theo cách đổi màu 2 thành màu
4 và ngược lại Lúc này, b và d có cùng màu 4 và ta có thể tô đỉnh xX gọi là một đỉnh và mỗi phần bằng màu2
2.3 Bài toán 4 màu (Appel - Haken)
Phát biểu: Mọi đồ thị phẳng đều có sắc số không lớn hơn 4.
Bài toán 4 màu được phát biểu như trên được chứng minh bằng phép thử trênmáy tính trong nỗ lực nhằm thay thế cho định lý 5 màu
3 Ví dụ ứng dụng
a b c
d
e x
5
1
2 3
4
Trang 24Vấn đề tô màu đồ thị cũng có nhiều ứng dụng thực tế như tô màu bản đồ, côngtác lập lịch Với đồ thị phẳng ta có thể mô hình cho một bản đồ, trong đó mỗimiền bản đồ thì tương ứng là một đỉnh, hai miền có chung đường biên thì tươngứng với 2 đỉnh kề nhau Khi tô màu bản đồ thì 2 miền kề nhau (chỉ chung đườngbiên không kể chung điểm biên) U gọi là một cạnh của đồ thị G = <X, U> phải có màu khác nhau Như vậy vấn đề tìm sốmàu tối thiểu để tô bản đồ, tương ứng với việc tìm sắc số cho đồ thị phẳng Vàonăm 1850 người ta đã chỉ ra 1 cách tô bản đồ nước Anh chỉ cần 4 màu, điều này
là 1 thể hiện cho bài toán 4 màu
* Trong nhiều bài toán tin học, ta hay bắt gặp bài toán lập lịch Vấn đề tô màu
đồ thị có thể ứng dụng để giải quyết bài toán này
Ta xX gọi là một đỉnh và mỗi phầnét một ví dụ ứng dụng, trong một phòng về phần mềm có các nhóm lậptrình như sau:
dụ như nhóm 1 và 2 cùng chung thành viên A thì đỉnh 1 và 2 kề nhau, ta biểudiễn đồ thị như hình 2.4
Trang 25dụ sử dụng lý thuyết đường đi, chu trình Euler để tìm hành trình đường đi chongười phát thư, cho xX gọi là một đỉnh và mỗi phầne rửa đường sao cho hành trình là tối ưu nhất Hoặc làtrong một hệ thống mạng, một máy đơn cần gửi 1 thông điệp đến tất cả các máycòn lại vậy thì đường truyền tin sẽ đi như thế nào để cho hiệu quả nhất, bài toán
Trang 26này có thể được giải quyết bằng cách vận dụng các lý thuyết chu trình và đường
Định lý 1: Đồ thị vô hướng G = <X,U> có chu trình Euler khi và chỉ khi G là
liên thông và bậc của tất cả các đỉnh trong đồ thị G là số chẵn
Chứng minh
- Điều kiện cần: Giả sử đồ thị G = <X, U> có chu trình Euler Ta cần chứng
minh G là đồ thị liên thông và với mỗi xX gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần X có m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = 2k với k là một sốnguyên dương nào đó
Thật vậy, giả sử G = <X, U> không liên thông hay G có ít nhất hai thành phầnliên thông G1 = <X1, U1> và G2 = <X2, U2> Trong đó X1 X X 2 = X , U1 U X 2 = U,giữa các đỉnh trong X1 và trong X2 không có cạnh hoặc đường nối với nhau Giả
sử là 1 chu trình Euler trong G Theo định nghĩa của chu trình Euler thì làchu trình đi qua tất cả các cạnh trong G, mỗi cạnh đúng 1 lần Nếu có đỉnhchung với G1 = <X1, U1> thì là chu trình nằm gọn trong đồ thị G 1 Điều nàymâu thuẫn với định nghĩa của Chứng tỏ đồ thị G = <X, U> là liên thông
Bây giờ ta chứng minh mỗi đỉnh xX gọi là một đỉnh và mỗi phần X trong G đều có bậc chẵn, tức là cần chỉX gọi là một đỉnh và mỗi phần
ra m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = 2k, với k {1,2, } Trước hết thấy rằng k 0 bởi vì nếu k = 0 thì xX gọi là một đỉnh và mỗi phần làX gọi là một đỉnh và mỗi phần điểm cô lập trong G, tức là G không liên thông, trái với điều đã chỉ ra Giả sửngược lại tồn tại một đỉnh xX gọi là một đỉnh và mỗi phầni X mà m(xX gọi là một đỉnh và mỗi phầnX gọi là một đỉnh và mỗi phần i) U gọi là một cạnh của đồ thị G = <X, U> là một số lẻ, chẳng hạn m(xX gọi là một đỉnh và mỗi phầni) U gọi là một cạnh của đồ thị G = <X, U> = 3.Đối với xX gọi là một đỉnh và mỗi phầni có 3 cạnh đi vào nó, giả sử đó là các cạnh (xX gọi là một đỉnh và mỗi phầni, xX gọi là một đỉnh và mỗi phầnk) U gọi là một cạnh của đồ thị G = <X, U> , (xX gọi là một đỉnh và mỗi phầni, xX gọi là một đỉnh và mỗi phầnj) U gọi là một cạnh của đồ thị G = <X, U> và (xX gọi là một đỉnh và mỗi phầni, xX gọi là một đỉnh và mỗi phần1) U gọi là một cạnh của đồ thị G = <X, U> X gọi là một đỉnh và mỗi phần
U Chu trình Euler sẽ đi qua 3 cạnh đó Khi đó một trong 3 cạnh trên có ítnhất một cạnh mà chu trình Euler đi qua 2 lần Điều đó mâu thuẫn với địnhnghĩa của chu trình Vậy m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> là một số chẵn với mọi xX gọi là một đỉnh và mỗi phần X.X gọi là một đỉnh và mỗi phần
- Điều kiện đủ: Giả sử G = <X, U> là đồ thị liên thông và mỗi đỉnh xX gọi là một đỉnh và mỗi phần X đềuX gọi là một đỉnh và mỗi phần
có bậc chẵn: m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = 2k, k {1, 2, } ta chứng minh trong đồ thị G tồn tại mộtX gọi là một đỉnh và mỗi phầnchu trình Euler
Với giả thiết trên, trước hết ta chứng minh rằng tại mỗi đỉnh của G có tồn tạichu trình đơn (tức là chu trình đi qua các cạnh, mỗi cạnh đúng một lần) U gọi là một cạnh của đồ thị G = <X, U> Đềchứng minh điều đó, ta lưu ý rằng không thể có một đỉnh xX gọi là một đỉnh và mỗi phần mà m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = 2 Điều
Trang 27đó đúng bởi vì khi đó tại đỉnh xX gọi là một đỉnh và mỗi phần có khuyên và do đó xX gọi là một đỉnh và mỗi phần cũng là một đỉnh cô lập,trái với giả thiết đồ thị G là liên thông.
Giả sử xX gọi là một đỉnh và mỗi phần X là một đỉnh nào đó Ta chỉ ra có chu trình đơn P qua xX gọi là một đỉnh và mỗi phần Do m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> X gọi là một đỉnh và mỗi phần
> 2 suy ra tồn tại các đỉnh xX gọi là một đỉnh và mỗi phần1 sao cho xX gọi là một đỉnh và mỗi phần1 xX gọi là một đỉnh và mỗi phần và xX gọi là một đỉnh và mỗi phần kề với xX gọi là một đỉnh và mỗi phần 1 Do m(xX gọi là một đỉnh và mỗi phần1) U gọi là một cạnh của đồ thị G = <X, U> > 2 suy ratồn tại các đỉnh xX gọi là một đỉnh và mỗi phầni sao cho xX gọi là một đỉnh và mỗi phầni xX gọi là một đỉnh và mỗi phần i-1 và xX gọi là một đỉnh và mỗi phầni kề với xX gọi là một đỉnh và mỗi phầni-1 Khi tới bước thứ i thì ta đã cómột đường đi tư xX gọi là một đỉnh và mỗi phần đến xX gọi là một đỉnh và mỗi phầni, qua các cạnh, mỗi cạnh đúng một lần Quá trình trênkhông thể kéo dài vô hạn do tính hữu hạn của đồ thị G Giả sử số bước hữu hạn
đó là i Điều này chứng tỏ xX gọi là một đỉnh và mỗi phần và xX gọi là một đỉnh và mỗi phầni kề nhau, tức là có cạnh nối xX gọi là một đỉnh và mỗi phần và xX gọi là một đỉnh và mỗi phầni Điều đó làđúng vì bước i là bước cuối cùng Như vậy tại đỉnh xX gọi là một đỉnh và mỗi phần có chu trình đơn P đi qua Bây giờ ta chứng minh rằng trong đồ thị G = <X, U> có chu trình Euler Theochứng minh trên với đỉnh xX gọi là một đỉnh và mỗi phần X có chu trình đơn đi qua là PX gọi là một đỉnh và mỗi phần 1 và P1 là chu trìnhtrong đồ thị G Hãy "đánh dấu xX gọi là một đỉnh và mỗi phầnoá" các cạnh trong P1 Nếu sau khi "đánh dấuxX gọi là một đỉnh và mỗi phầnoá" các cạnh trên đường P1 tạo ra một số đỉnh cô lập mới thì hãy "đánh dấuloại bỏ" các đỉnh cô lập mới đó Kết quả thu được sẽ là một đồ thị mới G1 =
<X1, U1> là đồ thị con của đồ thị G = <X, U> đã cho Ta chỉ ra đồ thị G1 thoảmãn một số tính chất sau:
- Chu trình P1 trong đồ thị G và G1 có đỉnh chung, bởi vì G là đồ thị liên thông
- Đồ thị G1 gồm các đỉnh xX gọi là một đỉnh và mỗi phần XX gọi là một đỉnh và mỗi phần 1 có bậc chẵn
Thật vậy, nếu xX gọi là một đỉnh và mỗi phần XX gọi là một đỉnh và mỗi phần 1 mà xX gọi là một đỉnh và mỗi phần không thuộc các đỉnh trong P1 thì m(xX gọi là một đỉnh và mỗi phần1) U gọi là một cạnh của đồ thị G = <X, U> hiển nhiên
là một số chẵn
Còn nếu xX gọi là một đỉnh và mỗi phần1 XX gọi là một đỉnh và mỗi phần 1 mà xX gọi là một đỉnh và mỗi phần1 là đỉnh thuộc P1 thì sau khi "đánh dấu bỏ " hai cạnh của
P1 chứa đỉnh đó thì bậc của đỉnh xX gọi là một đỉnh và mỗi phần1 sẽ giảm đi 2 đơn vị, do đó m(xX gọi là một đỉnh và mỗi phần1) U gọi là một cạnh của đồ thị G = <X, U> cũng làchẵn
Tóm lại với mọi xX gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần X1 thì m(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> là một số chẵn
Ta có thể minh hoạ đồ thị với chu trình đơn P1 và đồ thị con G1 như hình vẽdưới đây:
xX gọi là một đỉnh và mỗi phần1 là đỉnh chung giữa P1 và G1 Đối với G1 = <X1, U1> tại đỉnh xX gọi là một đỉnh và mỗi phần1 X gọi là một đỉnh và mỗi phần X1 có tồn tạichu trình đơn P2 mà cách xX gọi là một đỉnh và mỗi phầnây dựng P2 cũng đối với P1
Trong P2 bỏ tất cả các cạnh, giữ lại các đỉnh có cạnh hoặc đường nối với cácđỉnh khác trong G1 ta được đồ thị con G2 = <X2, U2> của G1 Đồ thị cũng có tínhchất như G1, là liên thông, mọi xX gọi là một đỉnh và mỗi phần XX gọi là một đỉnh và mỗi phần 2 đều có bậc chẵn và G2 và P2 có điểmchung chẳng hạn xX gọi là một đỉnh và mỗi phần2
Trang 28Do tính hữu hạn của đồ thịi G, quá trình xX gọi là một đỉnh và mỗi phầnây dựng các chu trình đơn sẽ dừnglại ở bước thứ k nào đó Như vậy, trước khi sang bước thứ k ta đã có k - 1 chutrình đơn P1, P2, , Pk-1 và đồ thị Gk-1 = <Xk-1, Uk-1> là đồ thị con của đồ thị Gk-2
= <Xk-2, Uk-2>. Đồ thị Gk-1 là liên thông và mọi đỉnh xX gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần Xk-1 có bậc chẵn, đồngthời Gk-1 và Pk-1 có điểm chung là xX gọi là một đỉnh và mỗi phầnk Vì quá trình trên dừng lại sau k bước nên
đồ thị Gk-1 là một chu trình đơn qua xX gọi là một đỉnh và mỗi phầnk và bao gồm hết các cạnh trong đồ thị Gk-1
Vì nếu không sẽ dẫn tới mâu thuẫn do k là bước cuối cùng
Ghép các chu trình đơn P1, P2, ,Pk tại các đỉnh chung ta được tập các chu trìnhEuler trong đồ thị G = <X, U> Định lý được chứng minh
Định lý 2: Cho đồ thị có hướng G = <X, U> G có chu trình Euler khi và chỉ khi
G là liên thông và mỗi đỉnh đều có bậc vào bằng bậc ra
1.2 Thuật toán tìm chu trình Euler
Cho đồ thị G = <X, U> xX gọi là một đỉnh và mỗi phầnây dựng thuật toán tìm chu trình Euler
Bước 1: Kiểm tra xX gọi là một đỉnh và mỗi phầnem G có là đồ thị liên thông hay không Nếu G là liên thông
thì chuyển sang bước 2 Ngược lại thì thuật toán dừng và kết luận rằng đồ thịkhông có chu trình Euler
Bước 2: Kiểm tra xX gọi là một đỉnh và mỗi phầnem tất cả các đỉnh trong G đều có bậc chẵn hay không
Nếu tất cả các đỉnh đều có bậc là chẵn thì chuyển sang bước tiếp theo Nếukhông dừng lại và kết luận đồ thị đã cho không có chu trình Euler
Bước 3: Xây dựng các chu trình đơn trong G sao cho tất cả các cạnh của đồ thị
đều có các chu trình đơn đi qua và mỗi cạnh chỉ đi qua một lần Ghép các chutrình đơn như trên tại các đỉnh chung nhau ta được tập các chu trình Euler cầntìm
2 Đường đi Euler
2.1 Định nghĩa
Đường Euler trong đồ thị G = <X, U> là đường đi qua tất cả các cạnh của đồthị, mỗi cạnh đi qua đúng một lần
Đinh lý 3: Cho G = <X, U> là đồ thị vô hướng liên thông Điều kiện cần và đủ
để đồ thị có đường Euler là số đỉnh bậc lẻ trong đồ thị là 0 hoặc 2
Chứng minh: Trường hợp số đỉnh bậc lẻ bằng 0 thì G là đồ thị liên thông và
mọi đỉnh đều có bậc chẵn Theo định lý về chu trình Euler thì trong G có chutrình Euler, tức cũng là đường Euler
Trang 29Nếu số đỉnh bậc lẻ là 2, chẳng hạn đó là các đinh xX gọi là một đỉnh và mỗi phần1 và xX gọi là một đỉnh và mỗi phần2 Hãy thêm vào mộtđỉnh mới xX gọi là một đỉnh và mỗi phần và hai cạnh (xX gọi là một đỉnh và mỗi phần, xX gọi là một đỉnh và mỗi phần1) U gọi là một cạnh của đồ thị G = <X, U> và (xX gọi là một đỉnh và mỗi phần, xX gọi là một đỉnh và mỗi phần2) U gọi là một cạnh của đồ thị G = <X, U> vào đồ thị G = <X, U> Ta có đồ thịmới G' = <X', U'>, ở đây X' = X X {xX gọi là một đỉnh và mỗi phần}, U' = U X {(xX gọi là một đỉnh và mỗi phần, xX gọi là một đỉnh và mỗi phần1) U gọi là một cạnh của đồ thị G = <X, U> , (xX gọi là một đỉnh và mỗi phần, xX gọi là một đỉnh và mỗi phần2) U gọi là một cạnh của đồ thị G = <X, U> } Rõ ràng là G'liên thông và mọi đỉnh đều có bậc chẵn Theo định lý về chu trình Euler đã nêu
ở trên thì trong G' có tồn tại chu trình Euler, cũng là đường Euler
Định lý 4: Cho đồ thị có hướng G = <X, U>, điều kiện cần và đủ để có đường
đi Euler từ xX gọi là một đỉnh và mỗi phần đến y (xX gọi là một đỉnh và mỗi phần, y X gọi là một đỉnh và mỗi phần X) U gọi là một cạnh của đồ thị G = <X, U> là G liên thông và đỉnh xX gọi là một đỉnh và mỗi phần có bậc ra lớn hơn bậcvào 1 đơn vị, đỉnh y có bậc vào lớn hơn bậc ra 1 đơn vị, còn tất cả các đỉnh khácđều có bậc vào bằng bậc ra
2.2 Thuật toán tìm đường Euler
Bước 1: Kiểm tra xX gọi là một đỉnh và mỗi phầnem đồ thị G có liên thông hay không Nếu có thì chuyển
sang bước 2 Ngược lại, thì dừng thuật toán và khẳng định rằng không cóđường Euler
Bước 2: Kiểm tra xX gọi là một đỉnh và mỗi phầnem mọi đỉnh trong G đều có bậc chẵn hay không Nếu có
chuyển sang bước 4 Nếu không chuyển sang bước 3
Bước 3: Kiểm tra xX gọi là một đỉnh và mỗi phầnem số đỉnh bậc lẻ có bằng 2 hay không Nếu có chuyển sang
bước 4 Nếu không thì dừng lại và kết luận không có đường Euler
Bước 4: Xây dựng đường Euler trong G.
II CHU TRÌNH VÀ ĐƯỜNG ĐI HAMILTON
37
a
b
c k
Trang 30a) U gọi là một cạnh của đồ thị G = <X, U> b) U gọi là một cạnh của đồ thị G = <X, U>
Hơn nữa nếu a' là một đỉnh kề nào đó của a (khác với y) U gọi là một cạnh của đồ thị G = <X, U> và b' là đỉnh nối tiếp
ngay a' trong chu trình P (hình 2.1.b) U gọi là một cạnh của đồ thị G = <X, U> thì b' không thể là đỉnh kề của b (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) U gọi là một cạnh của đồ thị G = <X, U>
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ố đỉnhkhô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 n/2 + k) U gọi là một cạnh của đồ thị G = <X, U> Mặt khác, theo giả thiết, số đỉnh kề với b cũng không nhỏ hơn n/2+ 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ủaG' không ít hơn 2.(n/2 + k) U gọi là một cạnh của đồ thị G = <X, U> = n + 2k, mâu thuẫn với giả thiết là số đỉnh của G'bằng n + k, (k > 0) U gọi là một cạnh của đồ thị G = <X, U> Định lý được chứng minh
Ví dụ: Đồ thị trong hình 2.1.a có 8 đỉnh, đỉnh nào cũng có bậc 4 Vậy G có chu
trình Hamilton Có thể thấy một chu trình Hamilton a-g-c-k-d-h-b-e-a
Nếu trong đường sơ cấp mà tất cả các đỉnh trong X đều có mặt thì chính làđường Hamilton Còn nếu có những đỉnh trong X nhưng chưa có mặt trong thì
ta có thể bổ sung hết những đỉnh đó vào đường sơ cấp để nó trở thành đườngHamilton theo nguyên tắc sau đây:
Giả sử xX gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần X mà xX gọi là một đỉnh và mỗi phần không nằm trên đường sơ cấp Các trường hợp sau đâyxX gọi là một đỉnh và mỗi phầnảy ra do tính đầy đủ của đồ thị G:
- Nếu xX gọi là một đỉnh và mỗi phần có cung tới xX gọi là một đỉnh và mỗi phầni1 thì bổ sung xX gọi là một đỉnh và mỗi phần vào đầu và nó có dạng:
xX gọi là một đỉnh và mỗi phần xX gọi là một đỉnh và mỗi phầni1 xX gọi là một đỉnh và mỗi phầni2 xX gọi là một đỉnh và mỗi phầnik xX gọi là một đỉnh và mỗi phầnik+1 xX gọi là một đỉnh và mỗi phầnim - 1 xX gọi là một đỉnh và mỗi phầnim
Trang 31- Nếu từ xX gọi là một đỉnh và mỗi phầnik có cung tới xX gọi là một đỉnh và mỗi phần và từ xX gọi là một đỉnh và mỗi phần có cung tới xX gọi là một đỉnh và mỗi phầnik+1 thì ta bổ sung xX gọi là một đỉnh và mỗi phần vào giữa haiđỉnh xX gọi là một đỉnh và mỗi phầnik và xX gọi là một đỉnh và mỗi phầnik+1 Khi đó có dạng:
xX gọi là một đỉnh và mỗi phầni1 xX gọi là một đỉnh và mỗi phầni2 xX gọi là một đỉnh và mỗi phầnik xX gọi là một đỉnh và mỗi phần xX gọi là một đỉnh và mỗi phầnik+1 xX gọi là một đỉnh và mỗi phầnim - 1 xX gọi là một đỉnh và mỗi phầnim
- Nếu từ xX gọi là một đỉnh và mỗi phầnik và xX gọi là một đỉnh và mỗi phầnik+1 có cung đi tới xX gọi là một đỉnh và mỗi phần và từ xX gọi là một đỉnh và mỗi phần lại cung đi tới xX gọi là một đỉnh và mỗi phầnik+2 thì ta bổ sung xX gọi là một đỉnh và mỗi phầnvào giữa hai đỉnh xX gọi là một đỉnh và mỗi phầnik + 1 và xX gọi là một đỉnh và mỗi phầnik+2 ta được có dạng:
xX gọi là một đỉnh và mỗi phầni1 xX gọi là một đỉnh và mỗi phầni2 xX gọi là một đỉnh và mỗi phầnik xX gọi là một đỉnh và mỗi phầnik+1 xX gọi là một đỉnh và mỗi phần xX gọi là một đỉnh và mỗi phầnik + 2 xX gọi là một đỉnh và mỗi phầnim - 1 xX gọi là một đỉnh và mỗi phầnim
- Nếu mọi k X gọi là một đỉnh và mỗi phần [1, m - 1] mà từ xX gọi là một đỉnh và mỗi phầnik và xX gọi là một đỉnh và mỗi phầnik+1 có cung sang xX gọi là một đỉnh và mỗi phần thì ta bổ sung xX gọi là một đỉnh và mỗi phần vàocuối, khi đó nó có dạng:
xX gọi là một đỉnh và mỗi phầni1 xX gọi là một đỉnh và mỗi phầni2 xX gọi là một đỉnh và mỗi phầnik xX gọi là một đỉnh và mỗi phầnik+1 xX gọi là một đỉnh và mỗi phần xX gọi là một đỉnh và mỗi phầnik + 2 xX gọi là một đỉnh và mỗi phầnim - 1 xX gọi là một đỉnh và mỗi phầnim xX gọi là một đỉnh và mỗi phần
Bằng cách đó ta có thể bổ sung vào các đỉnh trong đồ thị mà chưa có mặt trong
3 Thuật toán liệt kê tất cả các chu trình Hamilton
Thuật toán được xX gọi là một đỉnh và mỗi phầnây dựng dựa trên cơ sở thuật toán quay lui cho phép liệt kêtất cả các chu trình Hamilton của đồ thị
Procedure Hamilton(k) U gọi là một cạnh của đồ thị G = <X, U> ;
{Liệt kê các chu trình Hamilton thu được bằng việc phát triển dãy đỉnh xX gọi là một đỉnh và mỗi phần[1], ,xX gọi là một đỉnh và mỗi phần[k-1] của đồ thị G = <X, U> cho bởi danh sách kề Ke(v) U gọi là một cạnh của đồ thị G = <X, U> , v X gọi là một đỉnh và mỗi phần X
}
Begin
For y X gọi là một đỉnh và mỗi phần Ke(xX gọi là một đỉnh và mỗi phần[k-1]) U gọi là một cạnh của đồ thị G = <X, U> do
if (k = n +1) U gọi là một cạnh của đồ thị G = <X, U> and (y = v0) U gọi là một cạnh của đồ thị G = <X, U> then GhiNhan(xX gọi là một đỉnh và mỗi phần[1], ,xX gọi là một đỉnh và mỗi phần[n],v0) U gọi là một cạnh của đồ thị G = <X, U>
Else if ChuaXet[y] then Begin
Trang 32Hamilton(k+1) U gọi là một cạnh của đồ thị G = <X, U> ;
ChuaXet[y] := True;
End;
End;
BEGIN
For v X gọi là một đỉnh và mỗi phần X do ChuaXet[v] := True;
xX gọi là một đỉnh và mỗi phần[1] := v0; {v0 là một đỉnh nào đó của đồ thị}ChuaXet[v0] := False;
Hamilton(2) U gọi là một cạnh của đồ thị G = <X, U> ;
END
Trang 33
I ĐƯỜNG ĐI NGẮN NHẤT TRONG ĐỒ THỊ KHÔNG CÓ TRỌNG SỐ
1 Định nghĩa: Đồ thị không có trọng số là đồ thị hữu hạn trên các cạnh
không có trọng số Bài toán tìm đường đi ngắn nhất giữa hai đỉnh a,b trong đồthị không có trọng số G = <X, U> là tìm đường đi giữa hai đỉnh a, b sao cho có
số các cạnh (cung) U gọi là một cạnh của đồ thị G = <X, U> là ít nhất
và tồn tại y X gọi là một đỉnh và mỗi phần A(i) U gọi là một cạnh của đồ thị G = <X, U> sao cho từ y có cạnh (cung) U gọi là một cạnh của đồ thị G = <X, U> tới xX gọi là một đỉnh và mỗi phần} Do tính hữu hạn của đồthị, sau một số hữu hạn các bước, thuật toán dừng lại và cho kết quả là tập cácđỉnh có chứa b được đánh số bởi m là A(m) U gọi là một cạnh của đồ thị G = <X, U>
Trang 34Bước 2: Do bước 1 thì đỉnh b được đánh số bởi m, điều này chứng tỏ đường đi
từ a đến b có m cạnh (cung) U gọi là một cạnh của đồ thị G = <X, U> và là đường ngắn nhất đi từ a đến b Để tìm tất cảcác đường có độ dài m ngắn nhất đi từ a đến b, ta xX gọi là một đỉnh và mỗi phầnuất phát từ b đi ngược về atheo đúng nguyên tắc sau đây:
- Tìm tất cả các đỉnh có cạnh (cung) U gọi là một cạnh của đồ thị G = <X, U> tới b được ghi số m - 1, giả sử đó là xX gọi là một đỉnh và mỗi phầnik (k
= 1, 2, ) U gọi là một cạnh của đồ thị G = <X, U>
- Với mỗi đỉnh xX gọi là một đỉnh và mỗi phầnik tìm tất cả các đỉnh có cạnh (cung) U gọi là một cạnh của đồ thị G = <X, U> với xX gọi là một đỉnh và mỗi phầnik (k = 1, 2, ) U gọi là một cạnh của đồ thị G = <X, U> đượcghi số m -2
Bằng cách lùi dần trở lại, đến một lúc nào đó gặp đỉnh ghi số 0, đó chính là đỉnh
a Tất cả các đường xX gọi là một đỉnh và mỗi phầnác định theo các bước trên là đường đi từ a đến b có độ dàingắn nhất là m cần tìm
Hình 1.1
Ví dụ đồ thị như hình 1.1 xX gọi là một đỉnh và mỗi phầnây dựng đường đi ngắn nhất theo thuật toán trên:
Bước 1: Đỉnh a được đánh số 0 và có A(0) U gọi là một cạnh của đồ thị G = <X, U> = {a}
A(1) U gọi là một cạnh của đồ thị G = <X, U> = {xX gọi là một đỉnh và mỗi phần1, xX gọi là một đỉnh và mỗi phần6, xX gọi là một đỉnh và mỗi phần7}
A(2) U gọi là một cạnh của đồ thị G = <X, U> = {xX gọi là một đỉnh và mỗi phần2, xX gọi là một đỉnh và mỗi phần5, xX gọi là một đỉnh và mỗi phần8}
A(3) U gọi là một cạnh của đồ thị G = <X, U> = {xX gọi là một đỉnh và mỗi phần3, b, xX gọi là một đỉnh và mỗi phần9}
Bước 2: Từ bước 1 ta có b X gọi là một đỉnh và mỗi phần A(3) U gọi là một cạnh của đồ thị G = <X, U> nên từ a đến b là đường đi ngắn nhất có 3cung Tiếp theo ta xX gọi là một đỉnh và mỗi phầnác định tất cả các đường đi ngắn nhất có độ dài 3:
Đỉnh có cung về b được đánh số 2 là xX gọi là một đỉnh và mỗi phần5
Đỉnh có cung tới xX gọi là một đỉnh và mỗi phần5 được đánh số 1 là xX gọi là một đỉnh và mỗi phần6
Đỉnh có cung về xX gọi là một đỉnh và mỗi phần6 được đánh số 0 là a
Vậy đường cần tìm là a - xX gọi là một đỉnh và mỗi phần6 - xX gọi là một đỉnh và mỗi phần5 - b
II ĐƯỜNG ĐI NGẮN NHẤT TRONG ĐỒ THỊ CÓ TRỌNG SỐ
1 Các khái niệm
Cho đồ thị hữu hạn G = <X, U> với mỗi cạnh u X gọi là một đỉnh và mỗi phần U ta đặt tương ứng với sốdương l(u) U gọi là một cạnh của đồ thị G = <X, U> gọi là trọng số của u
Đồ thị có cạnh như trên được gọi là đồ thị có trọng số
Gọi là một đường đi nào đó trong G = <X, U>
Giả sử = xX gọi là một đỉnh và mỗi phầni1ui 1xX gọi là một đỉnh và mỗi phầni2ui2 xX gọi là một đỉnh và mỗi phầnin - 1uin-1xX gọi là một đỉnh và mỗi phầnin, xX gọi là một đỉnh và mỗi phầnij X gọi là một đỉnh và mỗi phần X , uij X gọi là một đỉnh và mỗi phần U (j = 1, 2, ,n) U gọi là một cạnh của đồ thị G = <X, U>
3
3 2
1
Trang 35Khi đó ký hiệu gọi là trọng số của đường
Ta ký hiệu D(a,b) U gọi là một cạnh của đồ thị G = <X, U> là tập tất cả các đường đi nối đỉnh a với đỉnh b trong đồ thị G.Đường đi giữa a và b là ngắn nhất nếu thoả mãn l() U gọi là một cạnh của đồ thị G = <X, U> = min {l() U gọi là một cạnh của đồ thị G = <X, U> / X gọi là một đỉnh và mỗi phần D(a,b) U gọi là một cạnh của đồ thị G = <X, U> }
Bài toán: Cho đơn đồ thị G = <X, U> liên thông có trọng số, và a, b X gọi là một đỉnh và mỗi phần X Tìmcác đường đi ngắn nhất giữa 2 đỉnh a, b
2 Thuật toán tìm đường đi ngắn nhất cho đồ thị có trọng số
2.1 Cơ sở thuật toán tìm đường đi ngắn nhất
Cho G = <X, U> tìm đường đi ngắn nhất từ đỉnh a tới đỉnh b
Với xX gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phầnX nếu độ dài đường đi từ đỉnh xX gọi là một đỉnh và mỗi phầnuất phát tới đỉnh xX gọi là một đỉnh và mỗi phần có trọng số là l() U gọi là một cạnh của đồ thị G = <X, U> thì (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = l() U gọi là một cạnh của đồ thị G = <X, U> gọi là trọng số của đỉnh xX gọi là một đỉnh và mỗi phần Cơ sở của tất cả các thuật toán tìmđường đi ngắn nhất là xX gọi là một đỉnh và mỗi phầnác định được các trọng số nhỏ nhất cho tất cả các đỉnh từ
đó tìm đường đi ngắn nhất
Bước 1: Đánh trọng số các đỉnh, trọng số của đỉnh xX gọi là một đỉnh và mỗi phầnuất phát là (a) U gọi là một cạnh của đồ thị G = <X, U> = 0
Tại các đỉnh còn lại ta ghi một số dương nào đó sao cho nó đủ lớn hơn trọng sốcủa các đỉnh từ a tới
Bước 2: Thực hiện việc giảm trọng số các đỉnh Giả sử tại đỉnh xX gọi là một đỉnh và mỗi phần được ghi
trọng số (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> Nếu tồn tại đỉnh y có trọng số (y) U gọi là một cạnh của đồ thị G = <X, U> từ y sang xX gọi là một đỉnh và mỗi phần mà (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> > (y) U gọi là một cạnh của đồ thị G = <X, U> + l(y,xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> thì ta thay trọng số của (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> bởi trọng số '(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> = (y) U gọi là một cạnh của đồ thị G = <X, U> + l(y, xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> Trường hợp (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> <
(y) U gọi là một cạnh của đồ thị G = <X, U> + l(y, xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> , trọng số của xX gọi là một đỉnh và mỗi phần giữ nguyên là (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> Quá trình thực hiện cho tới khitrọng số của tất cả các đỉnh trong G = <X, U> đạt cực tiểu, tức là xX gọi là một đỉnh và mỗi phần X gọi là một đỉnh và mỗi phần X khôngtồn tại y X gọi là một đỉnh và mỗi phần X kề với xX gọi là một đỉnh và mỗi phần mà (y) U gọi là một cạnh của đồ thị G = <X, U> + l(y, xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> <(xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U>
Bước 3: Xác định đường từ a đến b có trọng số ít nhất.
Từ bước 3 ta xX gọi là một đỉnh và mỗi phầnác định được trọng số của đỉnh b Xuất phát từ b đi về đỉnh kề với
b, chẳng hạn đó là đỉnh xX gọi là một đỉnh và mỗi phầni n có tính chất (b) U gọi là một cạnh của đồ thị G = <X, U> = (xX gọi là một đỉnh và mỗi phần) U gọi là một cạnh của đồ thị G = <X, U> + l(xX gọi là một đỉnh và mỗi phầni n, b) U gọi là một cạnh của đồ thị G = <X, U> Nếu không có đỉnh
kề với xX gọi là một đỉnh và mỗi phầni n như vậy thì ta đi về đỉnh kề với b có trọng số cạnh (cung) U gọi là một cạnh của đồ thị G = <X, U> từ đỉnh đó
Thật vậy l() U gọi là một cạnh của đồ thị G = <X, U> = l(a,xX gọi là một đỉnh và mỗi phầni 1) U gọi là một cạnh của đồ thị G = <X, U> + l(xX gọi là một đỉnh và mỗi phầni 1,xX gọi là một đỉnh và mỗi phầni 2) U gọi là một cạnh của đồ thị G = <X, U> + + l(xX gọi là một đỉnh và mỗi phầni n-1,xX gọi là một đỉnh và mỗi phầni n) U gọi là một cạnh của đồ thị G = <X, U> + l(xX gọi là một đỉnh và mỗi phầni n,b) U gọi là một cạnh của đồ thị G = <X, U> = [(xX gọi là một đỉnh và mỗi phầni 1) U gọi là một cạnh của đồ thị G = <X, U> - (a) U gọi là một cạnh của đồ thị G = <X, U> ] + [(xX gọi là một đỉnh và mỗi phầni 2) U gọi là một cạnh của đồ thị G = <X, U>
-(xX gọi là một đỉnh và mỗi phầni 1) U gọi là một cạnh của đồ thị G = <X, U> ] +
+ [(xX gọi là một đỉnh và mỗi phầni n) U gọi là một cạnh của đồ thị G = <X, U> - (xX gọi là một đỉnh và mỗi phầni n-1) U gọi là một cạnh của đồ thị G = <X, U> ] + [(b) U gọi là một cạnh của đồ thị G = <X, U> - (xX gọi là một đỉnh và mỗi phầni n) U gọi là một cạnh của đồ thị G = <X, U> ] = (b) U gọi là một cạnh của đồ thị G = <X, U> (1) U gọi là một cạnh của đồ thị G = <X, U>
(
n j ij
u l
l
Trang 36Giả sử X gọi là một đỉnh và mỗi phần D(a, b) U gọi là một cạnh của đồ thị G = <X, U> là 1 đường bất kỳ từ a đến b và có dạng:
= aj 1xX gọi là một đỉnh và mỗi phầnj 2 xX gọi là một đỉnh và mỗi phầnj k-1xX gọi là một đỉnh và mỗi phầnj kb Theo bước 2 ta có bất đẳng thức sau:
l(a, xX gọi là một đỉnh và mỗi phầnj 1) U gọi là một cạnh của đồ thị G = <X, U> thì trong G tồn tại ít nhất một chu trình. (xX gọi là một đỉnh và mỗi phầnj 1) U gọi là một cạnh của đồ thị G = <X, U> - (a) U gọi là một cạnh của đồ thị G = <X, U> = (xX gọi là một đỉnh và mỗi phầnj 1) U gọi là một cạnh của đồ thị G = <X, U>
l(xX gọi là một đỉnh và mỗi phầnj 1, xX gọi là một đỉnh và mỗi phầnj 2) U gọi là một cạnh của đồ thị G = <X, U> thì trong G tồn tại ít nhất một chu trình. (xX gọi là một đỉnh và mỗi phầnj 2) U gọi là một cạnh của đồ thị G = <X, U> - (xX gọi là một đỉnh và mỗi phầnj 1) U gọi là một cạnh của đồ thị G = <X, U>
l(xX gọi là một đỉnh và mỗi phầnj k-1,xX gọi là một đỉnh và mỗi phầnj k) U gọi là một cạnh của đồ thị G = <X, U> thì trong G tồn tại ít nhất một chu trình. (xX gọi là một đỉnh và mỗi phầnj k) U gọi là một cạnh của đồ thị G = <X, U> - (xX gọi là một đỉnh và mỗi phầnj k-1) U gọi là một cạnh của đồ thị G = <X, U>
l(xX gọi là một đỉnh và mỗi phầnj k, b) U gọi là một cạnh của đồ thị G = <X, U> thì trong G tồn tại ít nhất một chu trình. (b) U gọi là một cạnh của đồ thị G = <X, U> - (xX gọi là một đỉnh và mỗi phầnj k) U gọi là một cạnh của đồ thị G = <X, U>
Cộng 2 vế ta có:
l() U gọi là một cạnh của đồ thị G = <X, U> = l(a, xX gọi là một đỉnh và mỗi phầnj 1) U gọi là một cạnh của đồ thị G = <X, U> + l(xX gọi là một đỉnh và mỗi phầnj 1, xX gọi là một đỉnh và mỗi phầnj 2) U gọi là một cạnh của đồ thị G = <X, U> + + l(xX gọi là một đỉnh và mỗi phầnj n-1, xX gọi là một đỉnh và mỗi phầnj k) U gọi là một cạnh của đồ thị G = <X, U> + l(xX gọi là một đỉnh và mỗi phầnj k, b) U gọi là một cạnh của đồ thị G = <X, U> thì trong G tồn tại ít nhất một chu trình. (b) U gọi là một cạnh của đồ thị G = <X, U> (2) U gọi là một cạnh của đồ thị G = <X, U>
So sánh (1) U gọi là một cạnh của đồ thị G = <X, U> và (2) U gọi là một cạnh của đồ thị G = <X, U> ta có:
l() U gọi là một cạnh của đồ thị G = <X, U> = min{ l() U gọi là một cạnh của đồ thị G = <X, U> / X gọi là một đỉnh và mỗi phầnD(a, b) U gọi là một cạnh của đồ thị G = <X, U> }
2.2 Thuật toán Dijkstra
Có thể khái quát thuật toán bằng thủ tục sau:
Procedure Dijikstra(G: đồ thị liên thông có trọng số dương) U gọi là một cạnh của đồ thị G = <X, U> }
{G: có các đỉnh a = v 0 , v 1 , , v n = b và trọng số l(v i , v j ) = nếu (v i , v j ) U của G}
For i:=1 to n (vi) U gọi là một cạnh của đồ thị G = <X, U> := ;
(a) U gọi là một cạnh của đồ thị G = <X, U> := 0;
For tất cả các đỉnh v không thuộc S
if (u) U gọi là một cạnh của đồ thị G = <X, U> + l(u,v) U gọi là một cạnh của đồ thị G = <X, U> < (v) U gọi là một cạnh của đồ thị G = <X, U> then (v) U gọi là một cạnh của đồ thị G = <X, U> := (u) U gọi là một cạnh của đồ thị G = <X, U> + l(u,v) U gọi là một cạnh của đồ thị G = <X, U>
{thêm vào S đỉnh có trọng số nhỏ nhất và sửa đổi trọng số của các đỉnhkhông thuộc S}
End;
{l() U gọi là một cạnh của đồ thị G = <X, U> = l(a, b) U gọi là một cạnh của đồ thị G = <X, U> = độ dài đường đi ngắn nhất từ a đến b}
Độ phức tạp của thuật toán là O(n2) U gọi là một cạnh của đồ thị G = <X, U> , tức là phải dùng O(n2) U gọi là một cạnh của đồ thị G = <X, U> phép cộng và sosánh đường đi ngắn nhất giữa 2 đỉnh trong đồ thị đơn vô hướng liên thông cótrọng số
2.3 Thuật toán Ford - Bellman