1. Trang chủ
  2. » Luận Văn - Báo Cáo

chu trình Hamilton

37 490 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 37
Dung lượng 447 KB

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

Nội dung

ĐỊNH NGHĨA CHU TRÌNH HAMILTON o Đường đi Hamilton là đường đi qua tất cả các đỉnh của đồ thị, mỗi đỉnh đúng một lần.. Định nghĩa 7.5: Đường Hamilton là đường đi qua mỗi đỉnh của đồ thị

Trang 1

GIÁO VIÊN CHẤM NHẬN XÉT ………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

Trang 2

GIÁO VIÊN HƯỚNG DẪN NHẬN XÉT

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

Trang 3

………

MỤC LỤC ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN NIÊN LUẬN 1Error: Reference source not found NHẬN XÉT Error: Reference source not found CHƯƠNG 01 : TỔNG QUAN ….5 Error: Reference source not found I GIỚI THIỆU 5 Error: Reference source not found II.MỤC TIÊU CẦN ĐẠT ĐƯỢC 5 Error: Reference source not found III.HƯỚNG GIẢI QUYẾT 5 Error: Reference source not found CHƯƠNG 02 : LÝ THUYẾT 5

1 NỘI DUNG TRÌNH BÀY .6

2 GIỚI THIỆU BÀI TOÁN Error: Reference source not found6 3 ĐỊNH NGHĨA CHU TRÌNH HAMILTON 6

4 VÍ DỤ VỀ CHU TRÌNH VÀ ĐƯỜNG ĐI HAMILTON .6

5 MÔ TẢ BÀI TOÁN (1) 6

6 MÔ TẢ BÀI TOÁN (1) 6

7 CÁC BƯỚC GIẢI QUYẾT BÀI TOÁN 6

8 THỦ TỤC MÔ TẢ THUẬT TOÁN ……… 7

9 CÁC THỦ TỤC KHỞI TẠO (1) 7

10 CÁC THỦ TỤC KHỞI TẠO (1) 8

11 THỜI GIAN THỰC HIỆN ……… 8

12 MỘT SỐ VÍ DỤ VÀ CÁC ĐỊNH LÝ MINH HỌA ……… 8

CHƯƠNG 03: ỨNG DỤNG 1 3 1 GIỚI THIỆU CHƯƠNG TRÌNH 33 Error: Reference source not found CHƯƠNG 04: KẾT LUẬN 34 Error: Reference source not found I NHẬN XÉT KẾT QUẢ ĐẠT ĐƯỢC 34 Error: Reference source not found II HẠN CHẾ 34 Error: Reference source not found III HƯỚNG PHÁT TRIỂN 34 Error: Reference source not found CHƯƠNG 05: CHƯƠNG TRÌNH DEMO 34 Error: Reference source not found I GIAO DIỆN 35 Error: Reference source not found II.HƯỚNG DẪN CHƯƠNG TRÌNH 37 Error: Reference source not found TÀI LIỆU THAM KHẢO 38

Trang 4

Chương 1

Tổng Quan

I GIỚI THIỆU

- Lý thuyết đồ thị là một lĩnh vực đã được nghiên cứu từ những năm đầu của thế kĩ

18 bởi nhà toán học Leonhard Euler người Thụy sĩ Đồ thị được sử dụng để giảinhiều bài toán trong nhiều lĩnh vực khác nhau, trong tin học là một trường hợp cụthể

- Lý thuyết đồ thị cung cấp một hình thức thuận tiện cho việc mô tả mối liên hệcủa các đối tượng được quan tâm, góp phần quan trọng vào việc giải các bài toánphức tạp

II.MỤC TIÊU ĐẠT ĐƯỢC

 về lý thuyết :

- Nắm vững kiền thức về toán rời rạc về cách tìm đường đi của chu trìnhHamilton

- Hiểu rỏ về ngôn ngữ lật trình c để giải quyết vấn đề đặt ra

- Cho phép nhập vào các ma trận kề và số đỉnh tự do để tạo ra một chu trình ,từ

đó áp dụng phương pháp về cách tìm chu trình Hamilton, để tìm ra đường đi củamột chu trình Hamilton từ các thuật toán

 về chương trình :

- Xây dựng giao diện thân thiện với người sử dụng

Dể sử dụng,kết quả tính toán chính xác

III.HƯỚNG GIẢI QUYẾT

Về lý thuyết:tìm hiểu các khái niệm về chu trình Hamilton , sự tồn tại

của chu trình Hamilton , điều kiện để có chu trình … và các kiến thức về lập trìnhtrên ngôn ngữ sử dụng để giải quyết yêu cầu đề tài

 về chương trình:sử dụng ngôn ngữ lập trình chính là C để viết chương trình ,cài đặt thuật toán theo yêu cầu đề tài ,nghiên cứu cài đặt các thủ tục hàm đồ họa để hỗ trợ giao diện thân thiện với người sử dụng

Chương 2

LÝ THUYẾT

1 NỘI DUNG TRÌNH BÀY

o Giới thiệu bài toán

o Định nghĩa Chu trình Hamilton

o Mô hình bài toán

o Các bước giải quyết bài toán

o Thủ tục mô tả thuật toán

o Thời gian thực hiện

Trang 5

2 GIỚI THIỆU BÀI TOÁN

o 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 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 đó A[i,j] = 1 nếu có đường đi giữa thành phố i và thành phố j, A[i,j] = 0 trong 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 đi hoặc không tồn tại đường đi

3 ĐỊNH NGHĨA CHU TRÌNH HAMILTON

o Đường đi Hamilton là đường đi qua tất cả các đỉnh của đồ thị, mỗi đỉnh đúng một lần

4 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

5 MÔ HÌNH BÀI TOÁN (1)

o 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

6 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

7 CÁC BƯỚC GIẢI QUYẾT BÀI TOÁN

o Gán đỉnh đầu tiên bằng 1

o Thử 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

Trang 6

 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

8 THỦ TỤC MÔ TẢ THUẬT TOÁN

o procedure Try (i: Integer);

Khai báo Const Max=50; Inputfilename=‘D:BPBININPUT.PAS’

Outputfilename=‘D:BPBINOUTPUT.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;

o Assign(fs, InputFilename); Reset(fs);

o FillChar(A, SizeOf(A), False);

o ReadLn(fs, n, m);

o for i := 1 to m do

o begin

o ReadLn(fs, u, v);

Trang 7

1 1 5 4 5 1 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

12 MỘT SỐ VÍ DỤ VÀ CÁC ĐỊNH LÝ MINH HỌA :

- Chu trình Hamilton : Năm 1857 W R Hamilton, nhà toán học người Ailen

đã đưa ra trò chơi sau đây: Trên mỗi đỉnh trong số 20 đỉnh của một khối đa diện

12 mặt ngũ giác đều có ghi tên một thành phố lớn của thế giới Hãy tìm cách đibằng các cạnh của khối này để đi qua tất cả các thành phố, mỗi thành phố đúngmột lần

Bài toán này đã dẫn tới những khái niệm sau đây

Định nghĩa 7.5: Đường Hamilton là đường đi qua mỗi đỉnh của đồ thị đúng một

lần Chu trình Hamilton là chu trình đi qua mỗi đỉnh của đồ thị đúng một lần

Trang 8

Hình 7.6 Đồ thị có và đồ thị không có chu trình Hamilton

Định lý 7.6 (Rédei): Đồ thị đầy đủ luôn có đường đi Hamilton.

Nếu trong G có cạnh (xn, a) thì đường < (H) , a > sẽ là đường Hamilton.

Nếu trong G có cạnh (a, x1) thì đường < a , (H) > sẽ là đường Hamilton.

Trong trường hợp ngược lại, đồ thị G phải có các cạnh (a, xn) và (x1, a) nghĩa là

có các cạnh ngược hướng nhau Khi đó sẽ phải có ít nhất một cặp cạnh sát nhau

nhưng ngược hướng nhau là (xi, a) và (a, xi+1).

Hình 7.7 Cách tìm đường đi Hamilton

Ta có đường < x1 , , xi , a , xi+1 , , xn > là một đường đi Hamilton của G 

Đồ thị G được gọi là đồ thị có bậc 1 nếu tại mỗi đỉnh có đúng một cạnh vào và

một cạnh ra Hiển nhiên, chu trình Hamilton là một đồ thị riêng bậc 1 của đồ thị đãcho

Định lý 7.7: Đồ thị G = (V, F) có đồ thị riêng bậc 1 khi và chỉ khi:

B V, | B | ≤ | F(B) |

∀ ⊆

Chứng minh: Ký hiệu tập đỉnh của đồ thị là V = {a1, a2, , an} Lập tập V’ = {b1,

Trang 9

b2, , bn} sao cho: V∩V’ = Ta xây dựng đồ thị hai phần H = (V, V’, F’) với:

bj F ∈ ’(ai) ⇔ aj F( ∈ ai)

Hình 7.8 Cách xây dựng đồ thị hai phầnNếu đồ thị G có đồ thị riêng bậc 1 là G1 = (V, F1) thì xét tập cạnh W của H như

sau: (ai, bj) W ⇔ aj F1(ai) Đó là một cặp ghép n cạnh trong H

Ngược lại, ứng với một cặp ghép n cạnh W trong H sẽ có một đồ thị riêng bậc 1

Suy ra: | B | ≤ | F(B) | Đó là điều phải chứng minh 

Ví dụ 7.8: Xét đồ thị có hướng G = (V, F) được cho trong hình vẽ dưới đây

Hình 7.9 Đồ thị định hướng và đồ thị hai phần tương ứng

Từ Hệ quả này chúng ta có thể khẳng định rằng: Nếu trong đồ thị có một tập con

B các đỉnh mà | B | > | F(B) | thì đồ thị này không có chu trình Hamilton

Hệ quả 7.9 : Giả sử đồ thị có hướng G có đường đi Hamilton.

Trang 10

Ký hiệu: d = max {| B | - | F(B) | B V} Khi đó, số ⏐ ⊆ d {0, 1}.

Chứng minh:

Giả sử đồ thị có hướng G có đường đi Hamilton < a , , b >.

Nếu trong đồ thị G có cạnh (b, a) thì G có chu trình Hamilton và theo Hệ quả 7.8 thì d = 0.

Ngược lại, giả sử đồ thị G không có cạnh (b, a) Xét đồ thị G’ xây dựng từ đồ thị G và thêm cạnh (b, a) Thế thì đồ thị G’ sẽ có d' = 0 Mặt khác, vì ta chỉ thêm một cạnh mà không thêm đỉnh, nên: d ≤ d' + 1 Từ đó suy ra d ≤ 1  Cũng theo Hệ quả này chúng ta có thể khẳng định rằng: Nếu đồ thị nào đó có d ≥ 2

thì đồ thị ấy không có đường đi Hamilton

Bổ đề 7.10 : Giả sử đồ thị G có đường đi đơn vô hướng cực đại < a0 , a1 , , aq>.

Nếu r(a0) + r(aq) ≥ q +1 thì đồ thị con G’ tạo bởi tập đỉnh {a0, a1, , aq} có chu

trình vô hướng Hamilton

Chứng minh:

Ký hiệu r'(a) là bậc của đỉnh a trong G’ Vì đường đơn đã cho là cực đại nên:

r'(a0) = r(a0), r'(aq) = r(aq).

Hình 7.10 Cách tìm chu trình Hamilton

Giả sử r(a0) = k, nghĩa là đỉnh a0 kề với k đỉnh trên đường đi là a1 , ai2 , , aik.

- Nếu a0 kề với aq thì G’ có chu trình vô hướng Hamilton.

- Nếu như aq không kề với a0 , ai2-1 , , aik-1 Đó là những đỉnh nằm bên trái

của dãy đỉnh trong đường đi nói trên

Thế thì: r(aq) ≤ q - k Do đó: r(a0) + r(aq) ≤ q, trái với giả thiết Vậy phải có ít nhất một đỉnh ai-1 sao cho a0 kề với ai và aq

kề với ai-1 Khi đó dãy các đỉnh [a0 , ai , , aq , ai-1, , a0] là một chu trình vô hướng của G’ 

Bổ đề 7.11 : Giả sử đồ thị G liên thông.

Nếu các đỉnh của đường đi đơn vô hướng dài nhất tạo nên một đồ thị con G’ có chu trình vô hướng Hamilton thì chu trình đó cũng chính là chu trình vô hướng

Hamilton của đồ thị G

Chứng minh:

Ta chỉ cần chứng minh rằng, đồ thị con G’ chính là đồ thị G Giả sử ngược lại, có đỉnh a thuộc G nhưng không thuộc đồ thị con G’ Vì đồ thị G liên thông nên với đỉnh b thuộc G’ sẽ có đường đi vô hướng trong G nối đỉnh b với đỉnh a là < b =

a0 , a1 , , a >.

Trang 11

Hình 7.11 Đường đi nối đỉnh a với chu trình

Đỉnh b thuộc G’ còn đỉnh a không thuộc G’ Do vậy, sẽ có đỉnh ai là đỉnh đầu tiên của đường đi không thuộc G’.

Xét đường đi sau đây trong đồ thị G: Lấy chu trình vô hướng Hamilton của G’, bỏ

đi một cạnh kề với ai-1 và thêm vào cạnh

(ai-1, ai) Đường đi này có độ dài bằng số đỉnh của G’, trong khi đó đường đi đơn dài nhất đã cho trong G chỉ có độ dài là số đỉnh của G’ bớt đi 1 Vậy trái với giả

thiết 

Định lý 7.12 : Giả sử đồ thị G có n đỉnh.

1) Nếu ∀a, b V, ∈ r(a) + r(b) ≥ n-1 thì G có đường đi vô hướng Hamilton.

2) Nếu ∀a, b V, ∈ r(a) + r(b) ≥ n thì G có chu trình vô hướng Hamilton.

Chứng minh:

1) Giả sử < x0 , , xq > là đường đi đơn vô hướng dài nhất của G Đường đi này

có độ dài là q.

- Nếu q = n-1 thì đó là đường đi Hamilton của đồ thị G.

- Nếu q ≤ n-2 thì r(x0) + r(xq) ≥ n-1 ≥ q +1 và theo Bổ đề 7.10 đồ thị con G’ tạo bởi tập đỉnh {x0 , , xq} có chu trình vô hướng Hamilton Giả sử chu trình vô hướng Hamilton đó là [y0 , y1 , , yq].

Vì q ≤ n-2 nên có ít nhất một đỉnh y của G nằm ngoài chu trình trên

Từ 1) suy ra đồ thị G liên thông Vậy đỉnh y phải nối được với một đỉnh yj nào đó

trong chu trình bằng một đường đi đơn vô hướng

Ta nhận được đường đi < y , , yj , yj-1 , , y0 , yq , , yj+2 , yj+1 > có độ dài lớn hơn q +1 Vậy mâu thuẫn với tính cực đại của đường đi < x0 , , xq > Do vậy

q = n-1 Đồ thị G luôn có đường đi vô hướng Hamilton.

2) Theo 1) thì trong đồ thị G có đường đi đơn vô hướng dài nhất chứa tất cả n đỉnh

là < y0 , y1 , , yn-1 >.

Hơn nữa, r(y0) + r(yn-1) ≥ n = (n-1) +1, nên theo Bổ đề 7.10 thì đồ thị con G’ sinh bởi tập đỉnh {y0, y1, , yn-1} có chu trình vô hướng Hamilton, và đó cũng chính

là chu trình Hamilton của đồ thị G 

Ví dụ 7.9: Xét đồ thị có hướng sau đây

Trang 12

Hình 7.12 Đồ thị có hướng có chu trình vô hướng Hamilton

Đồ thị thoả mãn điều kiện 2) nên nó có chu trình vô hướng Hamilton Nếu ta bỏ

cạnh (c, d) thì điều kiện 1) thoả mãn còn điều kiện 2) không thoả mãn nữa Đồ thị

chỉ có đường đi vô hướng Hamilton

Hệ quả 7.13 (Dirac):

Nếu ∀a V, ∈ r(a) ≥2n thì đồ thị G có chu trình vô hướng Hamilton.

Chứng minh: Suy ra từ phần 2) của Định lý 7.12 

Một số nhận xét:

1 Đồ thị có đỉnh có bậc ≤ 1 thì không có chu trình Hamilton

2 Đồ thị có các đỉnh đều có bậc ≥ 2 Nếu có đỉnh nào có bậc bằng 2 thì mọi chu

trình Hamilton (nếu có) phải đi qua hai cạnh kề với đỉnh này

3 Nếu trong đồ thị có đỉnh có ba đỉnh bậc 2 kề với nó thì đồ thị không có chu trình Hamilton

4 Nếu đỉnh a có hai đỉnh kề bậc 2 là b và c thì mọi cạnh (a, x), x { ∉ b, c} sẽ không

thuộc bất kỳ chu trình Hamilton nào

5 Đồ thị có đường đi vô hướng < a1 , a2 , , ak > Với chỉ số k < n và các đỉnh trên đường đi (trừ a1 và ak) đều có bậc 2 thì cạnh (a1,ak) sẽ không thuộc bất kỳ

chu trình Hamilton nào

6 Đồ thị hai phần G = (V1,V2, F) với | V1 | ≠ | V2 | sẽ không có một chu trình Hamilton nào

Trang 13

#define Max 100

#define bp(x) (x)*(x)

//#define path "E:\\TC\\BGI\\mouse.h"

#define path "E:\\TC\\BGI"

//==========Khai bao bien==================

typedef struct chitietdinh

if(chuaxet[y]){

spt++;

X[spt]=y;

chuaxet[y]=0;

Hamilton(y);

Trang 14

if(flag) return ;chuaxet[y]=1;

spt ;

}}

}

// -Cac ham lien quan den

chuot -//==================khoi tao ma tran ke=========

void khoi_tao_ke(int ke[Max][Max])

// -ham tinh toa do tam thoi ban dau cua moi

void tinhtoado(chitietdinh ctd[Max])

//Ve xong luu trong chi tiet dinh ctd[i]:i(1-n:so dinh)

// -ve mot

void ve_dinh(int chiso,int x, int y) //x,y la toa do cua dinh

Trang 15

void in_dinh(int chiso,int x,int y)

Trang 16

// -Them dinh

void them_dinh(long x,long y)

// -ham kiem tra toa do chuot co thuoc dinh nao

int xy_danhsachdinh(long x, long y, chitietdinh d[Max],int sodinh,int &chiso) {

//==============kiem tra xy thuoc canh============

int xy_danhsachcanh(long x,long y,int &chiso1,int &chiso2)

Trang 17

return 0;

}

// -cho su kien cua chuot||ban

void sukien(int &banphim,int &chuottrai,int &chuotphai)

// -ham di chuyen

void di_chuyen_dinh(chitietdinh ctd[Max],int chiso,float x, float y)

{

Trang 18

tentt[strlen(tentt)]=ch;

}

if (ch==8){

tentt[0]=27;

tentt[1]=NULL;

ch=13;

}setcolor(10);

Trang 19

outtextxy(30,110,"1.Nhap vao ten file co chua ma tran ke.");

outtextxy(30,130,"2.Kiem tra ma tran dau vao.");

outtextxy(30,150,"3.Mo phong dang do thi nhap vao.");

outtextxy(30,170,"4.Tim va in ra chu trinh hamilton neu co.");

delay(500);

}f=fopen(file,"r");

Trang 20

{outtextxy(30+textwidth("Exit ")+4*i,460,".");

delay(500);

}return;

}

else outtextxy(30+textwidth("Search "),220,"==> Da tim thay file ! ");

//Kiem tra ma tran ke nhap vao

outtextxy(30,240,"Kiem tra ma tran nhap vao ");

outtextxy(30+textwidth("Waiting ")+4*i,460,".");

delay(500);

}}

outtextxy(30+textwidth("Exit ")+4*i,460,".");

delay(500);

}

Ngày đăng: 25/01/2016, 15:36

HÌNH ẢNH LIÊN QUAN

Hình 7.7. Cách tìm đường đi Hamilton - chu trình Hamilton
Hình 7.7. Cách tìm đường đi Hamilton (Trang 8)
Hình 7.6. Đồ thị có và đồ thị không có chu trình Hamilton - chu trình Hamilton
Hình 7.6. Đồ thị có và đồ thị không có chu trình Hamilton (Trang 8)
Hình 7.8. Cách xây dựng đồ thị hai phần Nếu đồ thị G có đồ thị riêng bậc 1 là G1 = (V, F1) thì xét tập cạnh W của H như  sau: (ai, bj)  W   ∈⇔ aj  ∈  F1( ai) - chu trình Hamilton
Hình 7.8. Cách xây dựng đồ thị hai phần Nếu đồ thị G có đồ thị riêng bậc 1 là G1 = (V, F1) thì xét tập cạnh W của H như sau: (ai, bj) W ∈⇔ aj ∈ F1( ai) (Trang 9)
Hình 7.11. Đường đi nối đỉnh a với chu trình Đỉnh b thuộc G’ còn đỉnh a không thuộc G’ - chu trình Hamilton
Hình 7.11. Đường đi nối đỉnh a với chu trình Đỉnh b thuộc G’ còn đỉnh a không thuộc G’ (Trang 11)
Hình 7.12. Đồ thị có hướng có chu trình vô hướng Hamilton - chu trình Hamilton
Hình 7.12. Đồ thị có hướng có chu trình vô hướng Hamilton (Trang 12)

TỪ KHÓA LIÊN QUAN

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

w