1. Trang chủ
  2. » Khoa Học Tự Nhiên

Chu trình hamilton, đường đi hamilton, đồ thị hamilton lê minh hoàng

4 422 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Nội dung

Lý thuyết đồ thị \ 53 [ §7 CHU TRÌNH HAMILTON, ĐƯỜNG ĐI HAMILTON, ĐỒ THỊ HAMILTON I ĐỊNH NGHĨA Cho đồ thị G = (V, E) có n đỉnh Chu trình (x1, x2, , xn, x1) gọi chu trình Hamilton xi ≠ xj với ≤ i < j ≤ n Đường (x1, x2, , xn) gọi đường Hamilton xi ≠ xj với ≤ i < j ≤ n Có thể phát biểu cách hình thức: Chu trình Hamilton chu trình xuất phát từ đỉnh, thăm tất đỉnh lại đỉnh lần, cuối quay trở lại đỉnh xuất phát Đường Hamilton đường qua tất đỉnh đồ thị, đỉnh lần Khác với khái niệm chu trình Euler đường Euler, chu trình Hamilton đường Hamilton có đỉnh xuất phát thăm tới lần Ví dụ: Xét đơn đồ thị G1, G2, G3 sau: b c e d a b a b g d c d c e a G1 G2 f G3 Đồ thị G1 có chu trình Hamilton (a, b, c, d, e, a) G2 chu trình Hamilton deg(a) = có đường Hamilton (a, b, c, d) G3 chu trình Hamilton lẫn đường Hamilton II ĐỊNH LÝ Đồ thị vô hướng G, tồn k đỉnh cho xoá k đỉnh với cạnh liên thuộc chúng đồ thị nhận có nhiều k thành phần liên thông Thì khẳng định G chu trình Hamilton Mệnh đề phản đảo định lý cho ta điều kiện cần để đồ thịchu trình Hamilton Định lý Dirac (1952): Đồ thị vô hướng G có n đỉnh (n ≥ 3) Khi đỉnh v G có deg(v) ≥ n/2 G có chu trình Hamilton Đây điều kiện đủ để đồ thịchu trình Hamilton Đồ thị có hướng G liên thông mạnh có n đỉnh Nếu deg+(v) ≥ n / deg-(v) ≥ n / với đỉnh v G có chu trình Hamilton III CÀI ĐẶT Dưới ta cài đặt chương trình liệt kê tất chu trình Hamilton xuất phát từ đỉnh 1, chu trình Hamilton khác có cách hoán vị vòng quanh Lưu ý nay, người ta chưa tìm phương pháp thực hiệu phương pháp quay lui để tìm dù chu trình Hamilton đường Hamilton trường hợp đồ thị tổng quát Input: file văn HAMILTON.INP • Dòng ghi số đỉnh n (≤ 100) số cạnh m đồ thị cách dấu cách • m dòng tiếp theo, dòng có dạng hai số nguyên dương u, v cách dấu cách, thể u, v hai đỉnh kề đồ thị Output: file văn HAMILTON.OUT liệt kê chu trình Hamilton Minh Hoàng Lý thuyết đồ thị \ 54 [ HAMILTON.INP 5 PROG07_1.PAS * Thuật toán quay program All_of_Hamilton_Circuits; const max = 100; var f: Text; a: array[1 max, max] of Boolean; Free: array[1 max] of Boolean; X: array[1 max] of Integer; n: Integer; HAMILTON.OUT 1 lui liệt kê chu trình Hamilton {Ma trận kề đồ thị: a[u, v] = True ⇔ (u, v) cạnh} {Mảng đánh dấu Free[v] = True chưa qua đỉnh v} {Chu trình Hamilton tìm là; 1=X[1]→X[2] → →X[n] →X[1]=1} procedure Enter; {Nhập liệu từ thiết bị nhập chuẩn Input} var i, u, v, m: Integer; begin FillChar(a, SizeOf(a), False); ReadLn(n, m); for i := to m begin ReadLn(u, v); a[u, v] := True; a[v, u] := True; end; end; procedure PrintResult; {In kết tìm thấy chu trình Hamilton} var i: Integer; begin for i := to n Write(X[i], ' '); WriteLn(X[1]); end; procedure Try(i: Integer); {Thử cách chọn đỉnh thứ i hành trình} var j: Integer; begin for j := to n {Đỉnh thứ i (X[i]) chọn đỉnh} if Free[j] and a[x[i - 1], j] then {kề với X[i - 1] chưa bị qua } begin x[i] := j; {Thử cách chọn X[i]} if i < n then {Nếu chưa thử chọn đến X[n]} begin Free[j] := False; {Đánh dấu đỉnh j qua} Try(i + 1); {Để bước thử không chọn phải đỉnh j nữa} Free[j] := True; {Sẽ thử phưng án khác cho X[i] nên bỏ đánh dấu đỉnh vừa thử} end else {Nếu thử chọn đến X[n]} if a[j, X[1]] then PrintResult; {và X[n] lại kề với X[1] ta có chu trình Hamilton} end; end; Minh Hoàng Lý thuyết đồ thị \ 55 [ begin {Định hướng thiết bị nhập/xuất chuẩn} Assign(Input, 'HAMILTON.INP'); Reset(Input); Assign(Output, 'HAMILTON.OUT'); Rewrite(Output); Enter; FillChar(Free, n, True); {Khởi tạo: Các đỉnh chưa qua} x[1] := 1; Free[1] := False; {Bắt đầu từ đỉnh 1} Try(2); {Thử cách chọn đỉnh kế tiếp} Close(Input); Close(Output); end Bài tập: Lập chương trình nhập vào đồ thị chu trình Hamilton có Lập chương trình nhập vào đồ thị đường Hamilton có Trong đám cưới Péc-xây An-đrơ-nét có 2n hiệp sỹ Mỗi hiệp sỹ có không n - kẻ thù Hãy giúp Ca-xi-ô-bê, mẹ An-đrơ-nét xếp 2n hiệp sỹ ngồi quanh bàn tròn cho hiệp sỹ phải ngồi cạnh kẻ thù Mỗi hiệp sỹ cho biết kẻ thù họ đến sân rồng 100 000 Gray code: Một hình tròn chia thành 2n hình quạt đồng tâm Hãy xếp 101 001 tất xâu nhị phân độ dài n vào hình quạt, xâu vào hình 111 011 quạt cho hai xâu hai hình quạt cạnh khác bít Ví dụ với n = hình vẽ bên 110 010 * Thách đố: Bài toán mã tuần: Trên bàn cờ tổng quát kích thước n x n ô vuông (n chẵn ≤ n ≤ 20) Trên ô có đặt quân mã Quân mã ô (X1, Y1) di chuyển sang ô (X2, Y2) X1-X2.Y1-Y2 = (Xem hình vẽ) Hãy tìm hành trình quân mã từ ô xuất phát, qua tất ô bàn cờ, ô lần Ví dụ: 45 43 16 47 30 61 14 18 97 72 41 16 79 36 39 14 11 Với n = 8; 42 17 44 46 31 48 60 37 15 64 56 13 29 62 71 42 17 96 83 40 15 12 33 38 ô xuất phát (3, 3) 18 35 20 41 34 36 19 50 59 40 33 22 32 49 58 39 57 38 25 52 28 63 54 11 55 12 27 24 Với n = 10; 100 43 19 70 98 95 73 84 80 93 35 82 78 75 37 34 10 59 13 32 21 51 10 23 26 53 ô xuất phát (6, 5) 20 69 86 45 99 44 21 24 68 85 88 63 81 94 67 90 74 89 64 49 76 91 66 92 65 61 77 60 57 52 56 31 58 55 30 22 87 26 47 62 51 28 54 25 46 23 50 27 48 53 29 Gợi ý: Nếu coi ô bàn cờ đỉnh đồ thị cạnh nối hai đỉnh tương ứng với hai ô mã giao chân dễ thấy hành trình quân mã cần tìm đường Hamilton Ta xây dựng hành trình thuật toán quay lui kết hợp với phương pháp duyệt ưu tiên Warnsdorff: Nếu gọi deg(x, y) số ô kề với ô (x, y) chưa qua (kề theo nghĩa Minh Hoàng Lý thuyết đồ thị \ 56 [ đỉnh kề ô kề cạnh) từ ô ta không thử xét hướng có thể, mà ta ưu tiên thử hướng tới ô có deg nhỏ trước Trong trường hợp có tồn đường đi, phương pháp hoạt động với tốc độ tuyệt vời: Với n chẵn khoảng từ tới 18, với vị trí ô xuất phát, trung bình thời gian tính từ lúc bắt đầu tới lúc tìm nghiệm < giây Tuy nhiên trường hợp n lẻ, có lúc không tồn đường đi, phải duyệt hết khả nên thời gian thực thi lại tồi tệ (Có xét ưu tiên hay xét thứ tự trước Không tin thử với n lẻ: 5, 7, ô xuất phát (1, 2), sau ngồi xem máy tính toát mồ hôi) Minh Hoàng ... X[1] ta có chu trình Hamilton} end; end; Lê Minh Hoàng Lý thuyết đồ thị 55 [ begin {Định hướng thiết bị nhập/xuất chu n} Assign(Input, 'HAMILTON. INP'); Reset(Input); Assign(Output, 'HAMILTON. OUT');... tiếp} Close(Input); Close(Output); end Bài tập: Lập chương trình nhập vào đồ thị chu trình Hamilton có Lập chương trình nhập vào đồ thị đường Hamilton có Trong đám cưới Péc-xây An-đrơ-nét có 2n hiệp... Integer; n: Integer; HAMILTON. OUT 1 lui liệt kê chu trình Hamilton {Ma trận kề đồ thị: a[u, v] = True ⇔ (u, v) cạnh} {Mảng đánh dấu Free[v] = True chưa qua đỉnh v} {Chu trình Hamilton tìm là; 1=X[1]→X[2]

Ngày đăng: 27/08/2017, 14:31

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w