Chu trinh Haminton de quy

12
Giáo viên hướng dẫn: TS. Hoàng Quang Nhóm 6: Nguyễn Mậu Quốc Hoàn Mai Văn Mười Trần Thị Phương Chi Trương Thị Hương Huyền

Transcript of Chu trinh Haminton de quy

Page 1: 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

Page 2: Chu trinh Haminton de quy

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

Page 3: Chu trinh Haminton de quy

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.

Page 4: Chu trinh Haminton de quy

ĐỊ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.

Page 5: Chu trinh Haminton de quy

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.

Page 6: Chu trinh Haminton de quy

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

Page 7: Chu trinh Haminton de quy

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

Page 8: Chu trinh Haminton de quy

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.

Page 9: Chu trinh Haminton de quy

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;

Page 10: Chu trinh Haminton de quy

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;

Page 11: Chu trinh Haminton de quy

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.

Page 12: Chu trinh Haminton de quy

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