Định nghĩa Cho đồ thị G=V,E, V là tập hợp các đỉnh, E là tập hợp các cạnh Chu trình Euler là chu trình qua mọi cạnh và mọi đỉnh đồ thị, mỗi cạnh không đi quá 1 lần.. Đường đi Euler là đư
Trang 1GIỚI THIỆU
Lý thuyết đồ thị là ngành khoa học được phát triển từ lâu nhưng lại có nhiều ứng dụng hiện đại Những ý tưởng cơ bản của nó được đưa ra từ thế
kỷ XVIII bởi nhà toán học Thụy sĩ tên là Leonhard Euler
Lý thuyết đồ thị được dùng để giải các bài toán trong nhiều lĩnh vực khác nhau Chúng ta có thể xác định hai máy tính trong mạng có thể trao đổi thông tin được với nhau hay không nhờ mô hình đồ thị của mạng máy tính Đồ thị có trọng số trên các cạnh có thể sử dụng để giải các bài toán như: Tìm đường đi ngắn nhất giữa hai thành phố trong mạng giao thông Chúng ta cũng còn sử dụng đồ thị để giải các bài toán về lập lịch, thời khóa biểu, và phân bố tần số cho các trạm phát thanh và truyền hình…
Ngày nay Lý thuyết đồ thị đã phát triển thành một ngành Toán học ứng dụng có vị trí đặc biệt quan trọng về mặt lý thuyết cũng như ứng dụng Trong nội dung cuốn tiểu luận này nhóm chúng tôi xin trình bày về
“Chu trình Euler và bài toán người đưa thư”.
Đồng Hới, tháng 05 năm 2012
Trang 2- Đề tài: Chu trình Euler và bài toán người đưa thư
- Nhóm: 6 người
STT Họ tên Công việc(theo mục
Nhận xét của giáo viên
1 Nguyễn Duy Linh
2 Nguyễn Thị Hà Phương
3 Nguyễn Trần Sỹ
4 Võ Phi Thanh
5 Hoàng Công Tiến
6 Hoàng Đình Tuyền
Trang 3CHƯƠNG 1 ĐẠI CƯƠNG VỀ ĐỒ THỊ
(Sỹ)
Trang 4CHƯƠNG 2
CHU TRÌNH EULER VÀ BÀI TOÁN NGƯỜI ĐƯA THƯ
(Thanh+ Phương)
2.1 Định nghĩa
Cho đồ thị G=(V,E), V là tập hợp các đỉnh, E là tập hợp các cạnh
Chu trình Euler là chu trình qua mọi cạnh và mọi đỉnh đồ thị, mỗi
cạnh không đi quá 1 lần
Đường đi Euler là đường đi qua mọi cạnh và mọi đỉnh đồ thị, mỗi
cạnh không đi quá 1 lần
Cho đồ thị có hướng G=(V,E)
Chu trình có hướng Euler là chu trình có hướng qua mọi cung và mọi
đỉnh đồ thị, mỗi cung không đi quá 1 lần
Đường đi có hướng Euler là đường đi có hướng qua mọi cung và mọi
đỉnh đồ thị, mỗi cung không đi quá 1 lần
Đồ thị chứa chu trình Euler gọi là Đồ thị Euler.
Ví dụ Đồ thị
Có chu trình Euler khởi đầu từ đỉnh 1, đi qua tất cả các cạnh và dỉnh của đồ thị, mỗi cạnh không quá 1 lần và về lại đỉnh 1: (1, 3, 6, 5, 2, 4, 3,
2, 1)
1
4
Trang 52.2 Điều kiện cần và đủ
2.2.1 Định lý 1 (Định lý Euler)
Đồ thị G có chu trình Euler khi và chỉ khi G liên thông và mọi đỉnh có bậc chẵn khác 0
Chứng minh
(i) (): Giả sử G có chu trình Euler và v là đỉnh bất kỳ của G Khi đó chu trình Euler đến v theo cạnh e thì ra khỏi v bằng cạnh e’ e Do đó bậc của v phải là số chẵn G hiển nhiên là liên thông
(ii) (): Giả sử G liên thông và mọi đỉnh có bậc chẵn khác 0 Ta chứng minh G có chu trình Euler quy nạp theo số cạnh m của G
m = 1: Vì G liên thông và mọi đỉnh bậc chẵn nên G chỉ có 1 đỉnh và
1 khuyên Khuyên đó cũng tạo thành chu trình Euler
Giả sử G có m cạnh, số đỉnh n > 0 và mọi đồ thị liên thông có số cạnh nhỏ hơn m với mọi đỉnh bậc chẵn đều có chu trình euler
+ Trường hợp n = 1 hoặc 2 thì hiển nhiên tồn tại chu trình Euler
+ Trường hợp n > 2 Vì bậc của các đỉnh chẵn 2, bao giờ cũng chọn được 3 đỉnh a, b, c với các cạnh x = (a,b), y = (a,c)
- Giả sử G chứa cạnh z = (b,c)
Xét đồ thị G’ thu được từ G bằng cách loại bỏ ba cạnh x,y,z Sẽ xảy ra
1 trong ba khả năng sau:
G’ liên thông Vì số cạnh của G’ nhỏ hơn m và các đỉnh vẫn có bậc
chẵn nên theo giả thiết quy nạp tồn tại chu trình Euler C’ của G’ Nối chu trình con (x,y,z) với C’ ta thu được chu trình Euler C của G
G’ có 2 thành phần liên thông G 1 và G 2 Không mất tính tổng quát giả sử G1 chứa a, G2 chứa b và c G1 có chu trình Euler C1, G2 có chu trình Euler C2 Ta xây dựng chu trình Euler C của G như sau Xuất phát từ đỉnh a đi theo chu trình C1 quay về a, sau đó đi theo cạnh x = (a,b) đến đỉnh b, từ b đi theo chu trình C2 quay về b, sau đó đi theo cạnh z = (b,c) và
y = (c,a) quay về a
Trang 6 G’ có 3 thành phần liên thông G 1 , G 2 và G 3 Không mất tính tổng
quát giả sử G1 chứa a, G2 chứa b và G3 chứa c G1 có chu trình Euler C1,
G2 có chu trình Euler C2 , G3 có chu trình Euler C3 Ta xây dựng chu trình Euler C của G như sau Xuất phát từ đỉnh a đi theo chu trình C1 quay về a, sau đó đi theo cạnh x=(a,b) đến đỉnh b, từ b đi theo chu trình C2 quay về b, sau đó đi theo cạnh z=(b,c) đến đỉnh c, từ c đi theo chu trình C3 quay về c, sau đó đi theo cạnh y=(c,a) quay về a
- Giả sử G không chứa cạnh z = (b,c)
Xét đồ thị G’ thu được từ G bằng cách loại bỏ 2 cạnh x,y và thêm cạnh z Sẽ xảy ra 1 trong hai khả năng sau:
G’ liên thông Vì số cạnh của G’ nhỏ hơn m và các đỉnh vẫn có bậc
chẵn nên theo giả thiết quy nạp tồn tại chu trình Euler C’ của G’ Thay cạnh z C’ bằng cạnh x và y ta thu được chu trình Euler C của G
G’ có 2 thành phần liên thông G1 và G2 Không mất tính tổng
quát giả sử G1 chứa a, G2 chứa b và c G1 có chu trình Euler C1, G2 có chu trình Euler C2 Ta xây dựng chu trình Euler C của G như sau Thay cạnh zC2 bằng các cạnh x và y ta có chu trình C2’ Nối C2’ với C1 ta thu được
chu trình Euler C của G (đpcm)
2.2.2 Định lý 2
Cho đồ thị G có k đỉnh bậc lẻ Khi đó số đường đi tối thiểu phủ G là
k/2.
Chứng minh.
Ta đã biết số đỉnh bậc lẻ là chẵn, k=2n Chứng minh quy nạp theo n.
(i) n=1: Nối 2 đỉnh bậc lẻ với nhau bằng cạnh z ta thu được đồ thị G’ thoả định lý Euler Như vậy G’ có chu trình Euler C’ Bỏ cạnh z trên C’
ta thu được đường đi Euler phủ G
(ii)Giả sử G có số đỉnh bậc lẻ là 2n và định lý đúng với k<2n Nối 2 đỉnh bậc lẻ a,b nào đó với nhau bằng cạnh z ta thu được đồ thị G’ có 2n-2 đỉnh bậc lẻ Theo giả thiết quy nạp G’ có n-1 đường đi phủ G’ Gọi P là đường đi qua cạnh z Hiển nhiên a, b không phải đỉnh đầu hoặc cuối của P,
vì vậy nếu bỏ cạnh z ta thu được 2 đường đi P1 và P2 cùng với n-2 đường đi
còn lại phủ đồ thị G (đpcm)
Trang 7Bây giờ xét đồ thị có hướng G = (V, A) Ký hiệu
R = {u V : dI(v) = dO(v)}
S = {u V : dI(v) > dO(v)}
T = {u V : dI(v) < dO(v)}
Từ bổ đề bắt tay ta có
V
v
O v
d ( ) =
V v
I v
d ( )
S v
O
I v d v
T v
I
O v d v
d ( ) ( )
Ta ký hiệu
S v
O
I v d v
d ( ) ( ) =
T v
I
O v d v
d ( ) ( )
2.2.3 Định lý 3
(i) Đồ thị có hướng G có chu trình có hướng Euler khi và chỉ khi G liên thông yếu và mọi đỉnh có nửa bậc vào bằng nửa bậc ra, tức S = và T
=
(ii) Nếu S , thì số đường đi có hướng tối thiểu phủ G là k Các
đường đi này nối các đỉnh của T đến các đỉnh của tập S
Ví dụ: Đồ thị
Đồ thị trên có chu trình Euler: (A,B,C,D,A)
Ví dụ: Đồ thị
Không có chu trình Euler Ta có
R={u V | dI(v) = dO(v) = }
C D
C D
Trang 8S= {u V | dI(v) > dO(v) } = {C, D}
T= { u V | dI(v) < dO(v) } = {A, B}
Và
S v
O
I v d v
d ( ) ( ) =
T v
I
O v d v
d ( ) ( ) = 2 Vậy số đường đi có hướng tối thiểu phủ đồ thị là k=2, ví dụ 2 đường
đi sau
(A,C,D,A,B,C) và (B,D)
2.3 Các thuật toán tìm chu trình Euler
2.3.1 Thuật toán 1
+ Đầu vào Đồ thị G , không có đỉnh cô lập.
+ Đầu ra Chu trình Euler C của G, hoặc kết luận G không có chu
trình Euler
+ Phương pháp.
(1) Xuất phát: Đặt H := G, k := 1, C := Chọn đỉnh v G bất kỳ (2) Xuất phát từ v, xây dựng chu trình bất kỳ Ck trong H
Nếu tồn tại Ck , nối Ck vào C, C := C Ck Sang bước (3)
Nếu không tồn tại Ck , thì kết luận không có chu trình Euler, kết
thúc.
(3) Loại khỏi H chu trình Ck Nếu H chứa các đỉnh cô lập thì loại chúng khỏi H Sang bước (4)
(4) Nếu H = , thì kết luận C là chu trình Euler, kết thúc Ngược
lại sang bước (5)
(5) Nếu H và C không có đỉnh chung, thì kết luận không có chu
trình Euler, kết thúc.
Nếu H và C có đỉnh chung Chọn v là đỉnh chung của H và C Đặt
k := k+1 Quay lại bước (2)
+ Ví dụ
Cho G là đồ thị Thanh mã tấu Mohammed.
e
f
k h i j
g
b a
Trang 9
Ta áp dụng thuật toán 1 để tìm chu trình Euler
(1) Đặt H := G, k := 1, C := , v := f
(2) Ta xây dựng chu trình C1 trong H:
C 1 = (f,g,k,h,i,e,b,c,d,f)
Đặt C = C C1 = (f,g,k,h,i,e,b,c,d,f)
(3) Loại C1 ra khỏi H, ta được đồ thị H như sau
Các đỉnh c và k là các đỉnh cô lập, vì thế ta loại chúng ra khỏi H và nhận được đồ thị H sau
(5) Chọn đỉnh chung của H và C là v := f Đặt k := k+1 = 2 Quay lại bước (2)
(2) Ta xây dựng chu trình C2 trong H:
e
j
g d
b a
e
f
k h i j
g
b a
Trang 10C2 = (f,i,j,h,g,d,b,a,e,f) Nối C2 vào C ta được chu trình C sau
C = C C2 = (f,g,k,h,i,e,b,c,d,f) (f,i,j,h,g,d,b,a,e,f)
= (f,g,k,h,i,e,b,c,d,f,i,j,h,g,d,b,a,e,f)
(3) Loại C2 ra khỏi H, ta được đồ thị H gồm toàn các đỉnh cô lập Loại nốt các đỉnh cô lập ta có H =
(4) Vì H = , ta kết luận C là chu trình Euler, kết thúc.
2.3.2 Thuật toán 2 (Fleury)
+ Đầu vào Đồ thị G , không có đỉnh cô lập.
+ Đầu ra Chu trình Euler C của G, hoặc kết luận G không có chu
trình Euler
+ Phương pháp.
(1) Chọn đỉnh xuất phát bất kỳ v0 Đặt v1 := v0 , C := (v0) H := G (2) Nếu H = , thì kết luận C là chu trình Euler, kết thúc Ngược
lại sang bước (3)
(3) Chọn cạnh đi tiếp:
- Trường hợp đỉnh v1 là đỉnh treo: Tồn tại duy nhất đỉnh v2 kề v1 Chọn cạnh (v1 , v2 ) Sang bước (4)
- Trường hợp đỉnh v1 không là đỉnh treo:
Nếu mọi cạnh liên thuộc v1 là cầu, thì không có chu trình Euler, kết
thúc.
Ngược lại, chọn cạnh (v1 , v2 ) bất kỳ không phải là cầu trong H Thêm vào đường đi C đỉnh v2 Sang bước (4)
(4) Xoá cạnh vừa đi qua, và xoá đỉnh cô lập:
Loại khỏi H cạnh (v1 , v2 ) Nếu H có đỉnh cô lập, thì loại chúng khỏi
H
Đặt v1 := v2 Sang bước (2)
Trang 111
2
6
5
+ Ví dụ
Cho G là đồ thị hình sau
Đồ thị liên thông và có các đỉnh bậc chẵn Ta có chu trình Euler sau
(v6, v4, v7, v5, v1, v3, v4, v2, v1, v4, v5, v2, v3, v6)
+ Ví dụ
Domino là một hình chữ nhật chia thành 2 hình vuông mỗi hình mang một trong các số 0,1,2,3,4,5,6 Hai hình vuông trên một domino có thể mang cùng một số Ví dụ
Có tất cả 28 quân Dômino khác nhau Chứng minh rằng ta có thể sắp xếp các domino thành hình tròn sao cho hai hình vuông kề nhau trên 2 domino khác nhau sẽ mang cùng số
Giải:
Ta lập đồ thị 7 đỉnh
v0, v1, v2, v3, v4, v5, v6
Mỗi đỉnh vi ứng với số i, i=0, ,6 Mỗi đỉnh có thể nối với các đỉnh còn lại và chính nó để tạo thành domino
Ta có đồ thị sau
v3
7
v5
v4
v2
v1
Trang 12Liên thông với tất cả các đỉnh có bậc chẵn bằng 6 Do vậy tồn tại chu trình Euler Mỗi chu trình Euler sẽ cho tương ứng một cách xếp
2.4 Thiết kế cấu trúc dữ liệu và giải thuật tìm đường đi, chu trình Euler
Chương trình được thiết kế bằng ngôn ngữ tựa Pascal
Cấu trúc dữ liệu:
- Biểu diễn đồ thị G bằng cấu trúc dữ liệu bởi một ma trận trọng số
Anxn Trong đó n là số đỉnh
- Sử dụng một ngăn xếp Stack[max] để lưu các đỉnh đã đi qua
- Sử dụng một ngăn xếp CE[max] để lưu chu trình Euler tìm được
Giải thuật :
Bước 1: Kiểm tra đồ thị có phải là đồ thị liên thông hay không, nếu là
đồ thị liên thông thì chuyển sang bước 2
Hàm lienthong(): Boolean trả về kết quả đúng (True) nều dồ thị liên
thông, sai (False) nếu đồ thị không liên thông
Bước 1 : Kiểm tra đồ thị là đồ thị Euler hay không phải là đồ thị Euler (dựa vào bậc của mỗi đỉnh)
Hàm kiemtraEuler() : Boolean để kiểm tra đồ thị Euler.
- Tìm bậc của tất cả các đỉnh của đồ thị G, nếu đều là bậc chẵn thì G là
đồ thị Euler, ngược lại thì không phải
Bước 2 : Nếu là đồ thị Euler ta đi tìm chu trình Euler
Thủ tục EULER(dothi G) dùng để tìm chu trình Euler, sau khi tìm thì chu trình Euler được lưu trong ngăn xếp CE
Thủ tục EULER (G: Matran) được thiết kế như sau.
Procedure EULER(G: Matran, CE: Nganxep);
Begin
v, x, top: Int //bien top: dinh stack
top=1;
stack[top]=u; // tim chu trinh bat dau tu dinh u
Do
Trang 13Begin
V := stack[top]; // v la dinh dau stack
x:=1;
While (x<=n && A[v][x]==0) // tim dinh x ke v
x:=x+1;
if (x>n) // neu khong dinh x nao ke dinh v
Begin
//lay dinh v ra khoi stack va dua dinh v vao ngan xep CE
dCE :=dCE+1; //
CE[dCE] :=v;
top :=top-1;
End
Else // co dinh x ke dinh v
Begin
// dua dinh x vao stack dong thoi xoa canh (v,x) ra khoi do thi.
top:=top+1;
stack[top]:=x;
A[v,x]:=A[x,v]:=0;
End
End while(top<>0); // Ham Euler thuc hien trong khi stack chua rong.
End.
2.5 Bài toán người đưa thư
Trang 14CHƯƠNG III CÀI ĐẶT BÀI TOÁN NGƯỜI ĐƯA THƯ
(Linh+Tuyền)
Trang 15KẾT LUẬN
Trên cơ sở nghiên cứu kiến thức từ giáo trình “Toán ứng dụng” của Thầy giáo PGS.TSKH Trần Quốc Chiến và một số tài liệu liên quan, nhóm chúng tôi thực hiện đề tài “Chu trình Euler và bài toán người đưa thư ” đã đạt được những kết quả sau:
- Tìm hiểu thuật toán tìm chu trình Euler và thuật toán tìm chu trình ngắn nhất đi qua tất cả các cạnh của một đồ thị cho trước của bài toán người đưa thư
- Đề xuất cấu trúc dữ liệu biểu diễn hai bài toán.
- Cài đặt hoàn chỉnh thuật toán bài toán người đưa thư trên ngôn ngữ Pascal
Chúng tôi xin chân thành cảm ơn Thầy giáo PGS.TSKH Trần Quốc Chiến đã tận tình giúp đỡ chúng tôi hoàn thành tiểu luận này
Do trình độ và thời gian hạn chế nên không tránh khỏi khiếm khuyết, rất mong nhận được sự góp ý của Thầy, Cô và các bạn để tiểu luận được hoàn thiện hơn
Trang 16TÀI LIỆU THAM KHẢO
Giáo trình Toán ứng dụng, Đại học Đà Nẵng 2010.
Giáo trình Lý thuyết đồ thị, Đại học Đà Nẵng 2005.
Thành Toán rời rạc Nhà xuất bản Giáo dục, 1999