Chu trinh Haminton de quy
-
Upload
hoang-chi-dung -
Category
Education
-
view
2.957 -
download
5
Transcript of Chu trinh Haminton de quy
Giáo viên hướng dẫn: TS. Hoàng QuangNhóm 6:
Nguyễn Mậu Quốc HoànMai Văn MườiTrần Thị Phương ChiTrương Thị Hương Huyền
NỘI DUNG TRÌNH BÀY
Giới thiệu bài toánĐịnh nghĩa Chu trình HamiltonMô hình bài toánCác bước giải quyết bài toánThủ tục mô tả thuật toánThời gian thực hiện
GIỚI THIỆU BÀI TOÁN
Một người khách du lịch muốn đi thăm n Một người khách du lịch muốn đi thăm n thành phố được đánh số từ 1 đến n. Mạng thành phố được đánh số từ 1 đến n. Mạng lưới giao thông giữa n thành phố này là 2 lưới giao thông giữa n thành phố này là 2 chiều và được cho bởi ma trận A[i,j] trong chiều và được cho bởi ma trận A[i,j] trong
đó A[i,j] = đó A[i,j] = 1 1 nếu có đường đi giữa thành nếu có đường đi giữa thành
phố i và thành phố j, A[i,j] = phố i và thành phố j, A[i,j] = 0 0 trong trong
trường hợp ngược lại. Thiết lập đường đi trường hợp ngược lại. Thiết lập đường đi cho người khách thông báo tồn tại đường cho người khách thông báo tồn tại đường đi hoặc không tồn tại đường đi.đi hoặc không tồn tại đường đi.
ĐỊNH NGHĨA CHU TRÌNH HAMILTON
Cho đồ thị G=(V, E) có n đỉnh1. Chu trình (x1, x2, …, xn, x1) được gọi là Chu
trình Hamilton nếu xi <>xj với 1<=i<j<=n
2. Đường đi (x1, x2, …, xn) được gọi là Đường đi Hamilton nếu xi <>xj với 1<=i<j<=n
Chu trình Hamilton là chu trình xuất phát từ một đỉnh, đi thăm tất cả những đỉnh còn lại, mỗi đỉnh đúng một lần, cuối cùng quay lại đỉnh xuất phát.
Đường đi Hamilton là đường đi qua tất cả các đỉnh của đồ thị, mỗi đỉnh đúng một lần.
VÍ DỤ VỀ CHU TRÌNH VÀ ĐƯỜNG ĐI HAMILTON
Một đồ thị đầy đủ có nhiều hơn hai đỉnh là đồ thị Hamilton.
Mọi đồ thị vòng là Hamilton.
Đồ thị khối ba chiều là đồ thị Haminton.
MÔ HÌNH BÀI TOÁN (1)
Ta có file:Input: Là file văn bản Input.pas
Dòng 1 ghi số đỉnh n<=50 và số cạnh m của đồ thị cách nhau một dấu cách.
m dòng tiếp theo, mỗi dòng có dạng 2 số nguyên dương u, v cách nhau một dấu cách, thể hiện u, v là 2 đỉnh kề nhau trong đồ thị.
Output: là file văn bản Output.pas Liệt kê tất cả các chu trình Hamilton
MÔ HÌNH BÀI TOÁN (2)
1 5
4
2
3
Input.pas Output.pas
5 7
1 2
1 4
2 3
2 5
3 4
3 5
4 5
1 2 3 5 4 1
1 2 5 3 4 1
1 4 3 5 2 1
1 4 5 3 2 1
CÁC BƯỚC GIẢI QUYẾT BÀI TOÁN
Gán đỉnh đầu tiên bằng 1Thử các cách chọn đỉnh thứ i trong hành trình
với i>=2 và i<=n.Chọn tất cả các đỉnh j để tìm đỉnh thứ i X[i] kề
với X[i-1] và chưa bị đi qua Nếu tìm thấy đỉnh j thỏa mãn điều kiện trên thì gán
X[i] = j. Nếu i < n thì
Đánh dấu đỉnh j là đã đi qua để cho các bước tiếp theo không chọn j nữa.
Sau đó chọn đỉnh thứ i+1 trong hành trình Thử phương án khác cho X[i] nên sẽ bỏ đánh dấu
đỉnh vừa thử Ngược lại, nếu đã thử chọn đến X[n] thì kiểm tra
nếu X[n] lại kề với X[1] thì ta có chu trình Hamilton.
THỦ TỤC MÔ TẢ THUẬT TOÁNprocedure Try(i: Integer);var j: Integer;begin
for j := 1 to n do if Mask[j] and A[X[i - 1], j] then begin X[i] := j; if i < n then begin Mask[j] := False; Try(i + 1); Mask[j] := True; end else if A[j, X[1]] then Print; end;
end;
Khai báoConst
Max=50;Inputfilename=‘D:\BP\BIN\INPUT.PAS’Outputfilename=‘D:\BP\BIN\OUTPUT.PAS’
var
ft: Text;
A: array[1..max, 1..max] of Boolean;
Mask: array[1..max] of Boolean;
X: array[1..max] of Integer;
n: Integer;
CÁC THỦ TỤC KHỞI TẠO (1)
Nhập dữ liệu vàoprocedure Inputdata;var i, u, v, m: Integer; fs: Text;begin Assign(fs, InputFilename);
Reset(fs); FillChar(A, SizeOf(A), False); ReadLn(fs, n, m); for i := 1 to m do begin ReadLn(fs, u, v); a[u, v] := True; a[v, u] := True; end; Close(fs);end;
In kết quả
procedure Print;
var
i: Integer;
begin
for i := 1 to n do
Write(ft, X[i], ' ');
WriteLn(ft, X[1]);
writeln;
end;
CÁC THỦ TỤC KHỞI TẠO (2)Chương trình chính
BEGIN Inputdata; FillChar(Mask, SizeOf(Mask), True); X[1] := 1; Mask[1] := False; Assign(ft, Outputfilename); Rewrite(ft); Try(2); Close(ft); readln;
END.
THỜI GIAN THỰC HIỆN
1 5
4
2
3
3
1
2 4
5
3
2
1
31
2
3
5
2
1
51
2
5
4
1 3
3
4
11
5
451
4
Đồ thị có 5 đỉnh và 7
cạnh Cây liệt kê chu trình Hamilton của đồ thị theo thuật toán quay lui
T(n) = O(n*m) trong đó n là số đỉnh và m là số cạnh giữa các đỉnhT(n) = O(n*m) trong đó n là số đỉnh và m là số cạnh giữa các đỉnh