1. Trang chủ
  2. » Công Nghệ Thông Tin

Chuyên đề Chu trình Đường đi Hamilton

3 181 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 3
Dung lượng 360,81 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chuyên đề Chu trình đường đi Hamilton Tin học các chuyên đề Tin học kỹ thuật lập trình. Cảm ơn mọi người đã xem. Hãy xem các tài liệu khác của Tài liệu học và thi. Chuyên đề Chu trình đường đi Hamilton Tin học các chuyên đề Tin học kỹ thuật lập trình. Cảm ơn mọi người đã xem. Hãy xem các tài liệu khác của Tài liệu học và thi

Trang 1

Đuờng đi và Chu trình Hamilton

I Định nghĩa:

Một đường đi Hamilton là một đường đi qua tất cả các đỉnh, mỗi đỉnh đúng một lần

Một chu trình đi Hamilton là một chu trình đi qua tất cả các đỉnh, mỗi đỉnh đúng một

lần

Vídụ:

Hình 1.a: Đồ thị không có đường đi hay chu trình Hamilton

Hình 1.b: Đồ thị có đường đi Hamilton nhưng không có chu trình Hamilton

Hình 1.c: Đồ thị có chu trình Hamilton

Lưu ý:

-Đồ thị có chu trình Hamilton được gọi là đồ thị Hamilton

-Đồ thị có đường đi Hamilton được gọi là đồ thị nửa Hamilton

II Định lý

Định lý 1 (Dirak 1952):

Trong đồ thị vô hướng G có n đỉnh (n≥3), nếu mọi đỉnh v của G đều có deg(v)≥n/2 thì G có chu trình Hamilton

Định lý 2:

Trong đồ thị có hướng G liên thông mạnh và có n đỉnh, nếu deg+(v)≥n/2 và deg-(v)≥n/2 với mọi đỉnh v thì G có chu trình Hamilton

Đồ thị đấu loại:

Đồ thị đấu loại là đồ thị có hướng mà trong đó 2 đỉnh bất kỳ được nối

với nhau bởi 1 cung

Tên gọi đấu loại xuất hiện vì đồ thị như vậy có thể biểu diễn kết quả thi

đấu bóng chuyền, bóng bàn hay bất cứ môn thể thao nào mà không cho

phép hòa Ví dụ: Đồ thị đấu loại ở hình 2

Định lý 3:

3.1 Mọi đồ thị đấu loại là nửa Hamilton

3.2 Mọi đồ thị đấu loại lên thông mạnh là Hamilton

III Cài đăt

Dưới đây ta sẽ dùng phương pháp quay lui để cài đặt một chương trình liệt kê tất cả chu trình Hamilton xuất phát từ đỉnh 1 Các chu trình Hamilton khác có thể có được bằng cách hoán vị vòng quanh

Input: HAMILTON.INP gồm:

Dòng 1 ghi số đỉnh n (2<n≤20) và số cạnh m cách nhau bởi dấu cách

M dòng tiếp theo, mỗi dòng ghi 2 số nguyên u,v thể hiện u,v là 2 đỉnh kề nhau trong đồ thị Output: HAMILTON.OUT liệt kê các chu trình Hamilton, mỗi chu trình trên 1 dòng

Ví dụ

HAMILTON.INP HAMILTON.OUT

5 6

1 2

1 3

2 4

3 5

1 3 5 2 4 1

1 4 2 5 3 1

Hình 1.a

3

1

Hình 2

Trang 2

4 1

5 2

Program All_of_Hamiltin_circuits; //

const

inputfile='HAMILTON.INP';

outputfile='HAMILON.OUT';

Max=20;

Var

fo:text;

a:Array[1 Max,1 Max]of boolean;

Free:array[1 Max]of Boolean;

X:array[1 Max]of integer;

n,m:integer;

Procedure Enter;

Var i,u,v:integer;

f:text;

begin

Assign(f,inputfile); Reset(f);

Fillchar(a,sizeof(a),false);

Readln(f,n,m);

For i:=1 to m do

begin Readln(f,u,v); a[u,v]:=true; a[v,u]:=true; end;

close(f);

end;

Procedure PrintResult;

var i:integer;

Begin

for i:=1 to n do Write(fo,X[i],' ');

Writeln(fo,X[1]);

end;

Procedure Try(i:integer); // ThỬ cac cach chon dinh thu i trong hanh trinh

var j:integer;

begin

For j:=1 to n do//Dinh X[i] duoc chon trong cac dinh j chua di qua va ke voi x[i-1]

if Free[j] and a[x[i-1],j] then

begin

x[i]:=j;

if i<n then

begin

Free[j]:=false;

Try(i+1);

Free[j]:=true;

end

else if a[j,x[1]] then PrintResult;//x[n] ke x[1] nen co chu trinh Hamilton

end;

end;

begin//mAIN

Trang 3

Enter;

Fillchar(Free,sizeof(Free),True);// Khoi tao tat cac dinh chua di qua

X[1]:=1; Free[1]:=false; // Bat dau di tu dinh 1

Assign(fo,outputfile); Rewrite(fo);

Try(2);

Close(fo);

end

Bài tập:

Bài toán Tưới cây

(Đề thi đề nghị OLYMPIC 30-4 của trường THPT Mạc Đỉnh Chi TPHCM)

Cù lao là một vùng đất nổi lên giữa vùng sông nước xung quanh

Trên một cù lao hình chữ nhật gồm MxN ô, tại một số ô Bờm có trồng cây Một số ô còn lại để đất trống

Mỗi lần tưới cây, Bờm lấy nước ở ngoài sông tại một vị trí bất kỳ rồi lần lượt tưới cho

đủ các ô có trồng cây và cuối cùng lại ra sông tại một vị trí bất kỳ Thời gian để tưới cây trong một ô không đáng kể Mỗi ô chỉ tưới một lần

Bờm di chuyển từ một ô sang ô kề cạnh mất 1 đơn vị thời gian Bờm có thể đi vào ô có cây (đã được tưới hoặc chưa được tưới) hoặc ô chưa có cây Bờm di chuyển từ dưới sông lên bờ (cù lao) hoặc ngược lại cũng mất 1 đơn vị thời gian

Yêu cầu:

Tìm thời gian T ngắn nhất để Bờm thực hiện một lần tưới cây theo mô tả ở trên

Dữ liệu vào: Cho trong file TuoiCay.inp

-Dòng đầu tiên ghi 3 số nguyên M N và K (0<N,M<=200) Trong đó K là số ô có trồng cây (0<K<=12)

-Trên K dòng tiếp theo, mỗi dòng ghi toạ độ của một ô có trồng cây

Dữ liệu ra : Ghi ra file TuoiCay.out

Gồm một số nguyên T duy nhất cần tìm

Ví dụ:

Tuoicay.inp TuoiCay.out

7 7 4

1 1

1 5

2 4

3 3

10

-oOo -

Ngày đăng: 02/11/2018, 21:39

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w