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

lý thuyết đồ thị và các giải thuật trên một số bài toán cơ bản

57 466 0
Tài liệu được quét OCR, nội dung có thể không chính xác

Đ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 57
Dung lượng 4,79 MB

Nội dung

Trang 1

LỜI MỞ Đầu

Trong nhiều tình huống, do thĩi quen người ta thường vẽ lên giấy những điểm biểu thị cho các cá thể, khu dân cư, các đơn vị hành chính, các nút giao thơng, các hố chất .và nối các điểm đĩ với nhau bằng những nét hoặc những mũi tên tượng trưng cho một mối liên hệ nào đĩ Các sơ đồ này dùng ở khắp mọi

nơi với các tên gọi khác nhau.Trong tâm lí học gọi nĩ là xã hội đồ Trong kinh

tế gọi là sơ đồ tổ chức Trong giao thơng vận tải gọi là mạng giao thơng Chính D.Konig là người đầu tiên đề nghị gọi các sơ đồ như trên là “đồ thị”, đồng thời đề nghị nghiên cứu một cách cĩ hệ thống các tính chất của nĩ

Một điều rất đáng quan tâm là nhiều nghành khoa học hồn tồn khác nhau

lại dùng những định lí giống nhau; chẳng hạn, khái niệm ” ma trận liên thuộc”, do G.R.Kirchhoof đưa ra để nghiên cứu mạch điện, song đã được Henri Poincare dùng lại trong tơpơ học để xây dựng ”analysis sictus” của nĩ Khái

niệm “điểm khớp” đã xuất hiện từ lâu trong xã hội học, đến gần đây lại xuất hiện trong ngành điện tử Những thí dụ như trên nhiều vơ kể Điều này chứng tỏ lí thuyết đồ thị được hình thành từ thực tế nĩ rất cĩ nhiều ứng dụng trong xã hội

Vì vậy tác giả đã chọn lý thuyết đồ thị để làm đề tài tốt nghiệp cuối khố Khố luận của tác giả gồm hai phần:

Phần I: Lý thuyết

Phần này trên cơ sở của tài liệu [1] và [2] tác giả trình bày các khái niệm và

định lý cơ bản trong các bài sau đây: §1 Các khái niệm cơ bản

§ 2 Xích, chu trình và đồ thị liên thơng

§ 3 Hàm GRANDI, chu số và cây § 4 Các tập hợp trên đồ thị

§5 Đồ thị EULER và đồ thị HAMILTON

Trang 2

Phần II: Các giải thuật của các bài tốn cơ bản về lý thuyết đồ thị trên ngơn

ngữ lập trình Pascal

Phần này trên cơ sở của tài liệu [2] tác giả trình bày mười bốn thuật tốn và

các chương trình viết bằng ngơn ngữ Pascal kèm theo

Để hồn thành khố luận này tơi đã tham khảo nhiều tài liệu khác nhau và nhận được nhiều ý kiến đĩng gĩp của các thầy cơ giáo đặc biệt là sự hướng dẫn tận tình, chu đáo của thầy giáo hướng dẫn khoa học Nhân dịp này tơi xin bày tỏ lời cảm ơn chân thành tới thây giáo Trần Văn Hữu và cùng tồn thể các thây cơ đã tận tình giúp đỡ

Mặc dù đã cố gắng nhiều nhưng do trình độ cịn hạn chế khố luận này khơng tránh khỏi những hạn chế, thiếu sĩt Rất mong nhận được sự gĩp ý chân thành

và được lượng thứ

Trang 3

PHAN I: LY THUYET

§1 CAC KHAI NIEM CO BAN 1.1 Định nghiã đơ thị

Tập hợp X # Ø các đối tượng và bộ E các cặp sắp thứ tự và khơng sắp thứ tự các phần tử của X được gọi là một đồ thị, đồng thời được kí hiệu bằng G(X,E) hoặc bằng G = (X,E) hay là G(X) Các phần tử của X được gọi là các đỉnh Cặp đỉnh khơng sắp thứ tự được gọi là cạnh Cặp đỉnh sắp thứ tự được gọi là

cạnh cĩ hướng hay cung

Đồ thị chỉ chứa các cạnh được gọi là đồ thị vơ hướng, cịn đồ thị chỉ chứa các cung gọi là đồ thị cĩ hướng Nếu đồ thị chứa cả cạnh lẫn cung thì nĩ được gọi là đồ thị hỗn hợp

Một cặp đỉnh cĩ thể được nối với nhau bằng hai hay nhiều hơn hai cạnh (hai hoặc nhiều hơn hai cung cùng một hướng) Các cạnh hay cung này được gọi là các cạnh hay cung bội

Một cung hay một cạnh cĩ thể bắt đầu và kết thúc tại cùng một đỉnh Cung hay cạnh loại này được gọi là khuyên hay nút

Cặp đỉnh x, y được nối với nhau bằng cạnh hay cung a, thi x,y được gọi là các đỉnh hay hai đầu của cạnh hay cung a và a được gọi là cạnh hay cung thuộc đỉnh x, đỉnh y

Nếu cung b xuất phát từ đỉnh u và đi vào đỉnh v thì u được gọi là đỉnh đầu, cịn v được gọi là đỉnh cuối của cung b

Cặp đỉnh x,y được gọi là hai đỉnh kề nhau nếu xzy và là hai đầu của cùng

một cạnh hay một cung

Hai cạnh hay cung a,b được gọi là kề nhau, nếu: 1) Chúng khác nhau

1i) Chúng cĩ đỉnh chung (nếu a, b là cung, thì khơng phụ thuộcvào đỉnh chung đĩ là đỉnh đầu hay đỉnh cuối của cung a, đỉnh đầu hay đỉnh cuối của

cung b)

Trang 4

XE[{XI, X;, Xạ, Xạ, Xs, Xĩ, X;}, Tap cạnh và cung: E={X), X23 Xp, X35 X4, Xo 3X5, X6; X3, X3; XỊ, X6 ; Xs, Xs } ={ a 3 4 ay as bị bạ }, Trong đĩ a,, a;, a; ,a,, as là các cạnh; bạ, by là các cung, cung b, cĩ x; là đỉnh đầu, x„ là đỉnh cuối 1.2 Một số dạng đơ thị đặc biệt

Trong những trường hợp khơng cần phân biệt giữa cạnh và cung ta quy ước

dùng cạnh thay cho cả cung Đồ thi G(X,E) khơng cĩ nút và một cặp đỉnh được nối với nhau bằng khơng quá một canh Được gọi là đồ thị đơn hay đơn đồ thị và thơng thường được gọi là đồ thị

Đồ thị G (X, E) khơng cĩ nút và cĩ ít nhất một cặp đỉnh được nối với nhau

bằng từ hai cạnh trở lên được gọi là đa đồ thị

Đồ thị (đa đồ thị) G (X, E) được gọi là đồ thị đầy đủ nếu mỗi cặp đỉnh được nối với nhau bằng đúng một cạnh (một cung với chiều tuỳ ý)

Đa đồ thị vơ hướng (cĩ hướng) G(X,E) được gọi là đồ thị k- đầy đủ, nếu mỗi cặp đỉnh được nối với nhau bằng đúng k cạnh (k cung với chiều tuỳ ý)

Đồ thị (đa đồ thị) G(X,E) được gọi là đồ thị (đa đồ thị) hai mảng nếu tập đỉnh X của nĩ được phân thành hai tập con rời nhau X,,X; (X, U X;=X và

X,đnX;, z Ø) và mỗi cạnh đều cĩ một đầu thuộc X, cịn đầu kia thuộc X,

Trang 5

Đồ thị (đa đồ thị) GŒX,E) được gọi là đồ thị (đa đồ thị) phẳng, nếu cĩ ít

nhất một dạng biểu diễn hình học trải trên một mặt phẳng nào đĩ mà các

cạnh của đồ thị chỉ cắt nhau ở đỉnh

D6 thi (da d6 thi) G(X,E) được gọi là hữu hạn nếu số đỉnh của nĩ là hữu

hạn Tức tập X cĩ lực lượng hữu hạn

Đồ thị (đa đồ thị) với tập đỉnh vơ hạn được gọi là Đồ thị (đa đồ thị) vơ hạn Đồ thị (đa đồ thị) với số cạnh thuộc mỗi đỉnh đều hữu hạn được gọi là Đồ thị (đa đồ thị) hữu hạn địa phương

Hiển nhiên rằng, một đồ thị hay đa đồ thị hữu hạn, thì nĩ cũng hữu hạn địa phương Trong các phần tiếp theo, nếu khơng cĩ chú ý gì thêm, thì các đồ thị, đa đồ thị được xét đều hữu hạn

Cho YcX, Y#0; HCE,F=EN(YxY) va V= (XxX) /E

Đồ thị G,(Y,F) được gọi là đồ thị con, cịn G,(X,H) là đồ thị bộ phận của đồ

thi G(X, E)

Đồ thị G’(X,V) được gọi là đồ thị bù của đồ thị G (X, E)

1.3 Biểu diễn đồ thị

1.3.1 Định nghĩa

Ma trận vuơng M(n, n) chỉ gồm các phần tử 0,1 gọi là ma trận kề của đồ thị

Trang 6

Giả sử đồ thị cĩ n đỉnh Khi đĩ tồn tại đường đi từ đỉnh a đến đỉnh b khi và chỉ khi tồn tại đường đi từ đỉnh a đến đỉnh b với độ dài < n -I

§2_XÍCH, CHU TRINH VA DO THI LIEN THONG

Đối với đồ thị (đa đồ thị) vơ hướng cĩ khái niệm xích (dây chuyền) và chu trình, cịn đối với đồ thị (đa đồ thị) cĩ hướng tồn tại khái niệm đường và vịng Tuy vậy, người ta vẫn dùng khái niệm đường cho cả đồ thị và đa đồ thị vơ hướng

2.1 Xích, Chu trình

Giả sử G(X, E) là một đồ thị hay đa đồ thị vơ hướng

Dấy (œ) các đỉnh của G(X,E): (œ)=[X,X;_ „X;X;¡; X„¡.X„]

được gọi là một xích hay một dây chuyền, nếu V ¡(1<¡ <n-1) cặp đỉnh x,„x,, kề nhau Tổng số vị trí của tất cả các cạnh xuất hiện trong xích (œ), được gọi là độ dài của xích œ và được ký hiệu bằng /œ /

Các đỉnh xạ và x„ được gọi là hai đỉnh đầu của xích (ơ) Ngồi ra cịn nĩi rằng xích œ nối giữa các đỉnh x, và x„ Dé chỉ rõ đỉnh đầu và đỉnh cuối ta cịn ký hiệu œ bằng œ[x,„x,]

Một xích với hai đầu trùng nhau được gọi là một chu trình

Xích (chu trình) œ được gọi là xích (chu trình) đơn (sơ cấp hay cơ bản), nếu

nĩ đi qua mỗi cạnh (mỗi đỉnh) khơng quá một lần 2.2 Định nghĩa

Đối với đồ thị vơ hướng cĩ khái niệm liên thơng cịn đối với đồ thị cĩ hướng

đưa ra khái niệm liên thơng mạnh

Hai đỉnh x, y được gọi là hai đỉnh liên thơng nêu hoặc giữa x và y cĩ ít nhất một xích nối với nhau, hoặc tồn tại ít nhất một đường đi từ x sang y hoặc từ y sang X

Đồ thị vơ hương G (X, E) được gọi là đồ thị liên thơng nếu mọi cặp đỉnh của nĩ đều liên thơng

Trang 7

Giả sử a là đỉnh bất kỳ thuộc đồ thị G, dùng Ca để ký hiệu tập con các đỉnh của G, gồm đỉnh a và tất cả các đỉnh liên thơng với a trong đồ thị G

Đồ thị con của G cĩ tập đỉnh là Ca được gọi là một thành phần liên thơng của đồ thị G

Đỉnh x trong đồ thị liên thơng G được gọi là điểm khớp, nếu đồ thị con G, nhận được từ G bằng cách bỏ đỉnh x là đồ thị khơng liên thơng Điểm khớp x mà nĩ được nối với một thành phần liên thơng của G, bằng đúng một cạnh, được gọi là điểm khớp đơn

Ví dụ: Cho đồ thị G cĩ 4 thành phần liên thơng

Các đồ thị con G, G; G, liên thơng, đồ thị con G, liên thơng mạnh ° Oo) a Le OW G2 G, G, 2.3 Một vài tính chất Ta gọi bậc của một đỉnh là số cung kề với đỉnh đĩ 2.3.1 Định lý

Ký hiệu S () là bậc của đỉnh ¡, m là số cung của đồ thị Khi đĩ tổng của SŒ)

Trang 8

2.3.5 Định lý G liên thơng khi và chỉ khi số thành phần liên thơng của nĩ bằng 1 2.3.6 Hệ quả Nếu G cĩ n đỉnh và số cung > (n-1) (n-2) / 2 thì G liên thơng 2.3.7 Hệ quả

Trong đồ thị liên thơng mạnh m = n — 1 khi và chỉ khi nĩ khơng cĩ chu trình §3 HAM GRANDI, CHU SO VA SAC SO: 3.1 HAM GRANDI 3.1.1 Dinh nghia Ký hiéu s6 nguyén khéng 4m 1a N={0,1,2, .} Ham g: A > N được gọi là hàm Grandi của đồ thị G = ( A,F ) nếu VxeA: g(x) = min{N\g( F(x) )}

Tw dinh nghia suy ra 2 tinh chat dac trung cua ham Grandi a) Vx,yeA, nếu yeF(x) thi g(x) # g(y)

b)Vu < g(x), uEN

3.1.2 Nhan xét

+Đồ thị cĩ đỉnh nút khơng thể cĩ hàm Grandi +Néu F(x) tréng thi g(x)=0

+Néu x ké y thi g(x) #g(y)

+g(x) <| F(x) | (ky hiệu | | là số phần tử của tap hợp)

3.1.3 Định lý

Nếu G khơng cĩ chu trình thì tồn tại duy nhất một hàm Grandi 3.1.4 Định nghĩa

Với u, v eN ta biểu diển các số đĩ dưới dạng nhị phân Ug, Ug, ves Uy, Up Ves Vite «+9 Vis Vo

Cĩ thể xem độ dài khai triển của hai số bằng nhau (nếu khơng thì thêm số 0

vào phía trước)

Trang 9

Số w cĩ khai triển nhị phân là w,, w,¡, , w¡, wạ gọi là d- tổng của v và u

ký hiệu là : v@u

* Nhận xét:

+ d- tổng cĩ tính giao hốn, kết hợp

+ v@u =0 < v=u

* Khái niêm về tổng hai đồ thị

Cho hai dé thi G,(A,,F,) va G,(A,,F,)

Đồ thị G(A,F) được gọi là tổng của G, và G,, ký hiệu G,+G, trong đĩ A =AxA; ( tích đề các )

(x,y)eF((a,b)) © x = a và yeF;(b) hoặc xeF;(a) và y = b

3.1.5 Định lý

Néu g, la ham Grandi cla G,, g, 1a ham Grandi cua G,

thì g(x,y)=g,(x) @g,(y) la ham Grandi cua dé thi tng ~G=G,+G, 3.2 Chu số

3.2.1 Định nghĩa

Trang 10

Ta nĩi rằng đồ thị G tơ được k màu nếu tồn tại hàm f:A—>{0,1, ,k-1} sao cho nếu hai đỉnh x,y kề nhau thì f (x) # £ (y)

3.3.2 Định nghĩa

Số k gọi là sắc số của đồ thị G nếu :

a)G tơ được k màu

b)G khơng tơ được k-I màu 3.3.3 Định lý

Giả sử G cĩ ít nhất một cung G cĩ sắc số bằng 2 khi và chỉ khi G khơng cĩ chu trình vơ hướng độ dài lẻ

3.3.4 Định lý

G tơ được k màu khi và chỉ khi tồn tai ham Grandi g<k-1

3.3.5 Định lý

Giả sử đồ thị G tơ được k+1 màu, đồ thị H tơ được k+lI màu Khi đĩ đồ thị tổng G+H tơ được r+1 màu,trong đĩ r= max{k’@q’| k’<k, q’ <q} 3.3.6 Định lý Nếu mỗi đỉnh của G cĩ bậc <r thì sắc số của G< r+1 3.3.7 Định lý Nếu G cĩ n đỉnh thì: n< s(G).s(G) và s(G)+s(G,) < n+1, trong đĩ s ký hiệu sắc số của đồ thị §4 CÁC TẬP HỢP TRÊN ĐỒ THỊ 4.1 Tập ổn định trong 4.1.1 Định nghĩa

Cho đồ thị G (A, F) Tập BC A gọi là ổn định trong của G

nếu V x € B: BO F(x)=$ Nghia la trong B khơng cĩ hai đỉnh kề nhau Cĩ thể xem tập rỗng là tập ổn định trong

Trang 11

4.1.2 Định nghĩa Đồ thị G'(A,F') được gọi là đồ thị bù của đồ thị G(A,F) nếu V x,y e A, yeF(x)c©y øe F() Tập B được gọi là ổn định trong cực đại nếu thêm bất cứ đỉnh nào cũng mất tính ổn định trong 4.1.3 Định lý Nếu mỗi đỉnh của G đều cĩ bậc < r, n là số đỉnh thì mỗi tập ổn định trong cực đại sẽ cĩ số phần tử > n / (r+1) 4.1.4 Định lý Nếu G cĩ n đỉnh và sắc số s thì tập ổn định trong lớn nhất của G sẽ cĩ sơ phần tử k > n/ s 4.1.5 Số ổn định trong

Dùng H (G) để ký hiệu họ gồm tất cả các cặp ổn định trong của đồ thị G Định nghĩa: Số phần tử của một trong những tập ổn định trong cĩ lực lượng lớn nhất được gọi là số ổn định trong của đồ thị G, đồng thời được ký hiệu

bằng œ (G), nghĩa là: ơ (G)= max {|A|/A e H(G) }

Chú ý: Đối với khái niệm ổn định trong, người ta quan niệm trước hết đến

các tập ổn định trong cĩ lực lượng cực đại, tức những tập ổn định trong cĩ số

phần tử bằng số ổn định trong của đồ thị

Ví dụ (Gauss): Bài tốn cĩ 8 con hậu chính là một trường hợp của bài tốn: Trên bàn cờnxn cĩ thể đặt tối đa bao nhiêu con hậu ( tương tự xe, mã, tượng) để chúng khơng ăn lẫn nhau? Cĩ bao nhiêu cách đặt?

Khi n = 8 số đồ thị G, cĩ số ổn định trong bằng 8 nên chỉ cĩ thể đặt tốiđa 8

con hậu trên bàn cờ 8 x 8, thì chúng khơng thể ăn lẫn nhau

Cịn về cách đặt lúc đâu Gauss cho rằng cĩ 76 cách Năm 1954 tờ báo về cờ ở Béclin “Schaczeitung” đưa ra 40 cách, nhưng trên thực tế đồ thị G, cĩ 92 tập

ổn định trong lực lượng bằng 8, nên cĩ tất cả 92 cách đặt 8 con hậu trên bàn

Trang 12

(72631485) (61528374) (58417263) (35841726) (46152837) (57263148) (16837425) (57263184) (48157236) (51468273) (42751863) (35281746) 72631485

Mỗi sơ đồ như trên tương ứng với một hốn vị và từ mỗi sơ đồ ta suy ra 8 cách đặt khác nhau: 3 cách đặt bằng cách quay 900, 1800, 270 Các lời giải khác suy được bằng cách đối xứng mỗi sơ đồ nhận được qua đường chéo chính Hốn vị cuối cùng chỉ cho 4 lời giải vì sơ đồ tương ứng sẽ trùng với chính nĩ sau khi quay 180°

4.2 Tap 6n dinh ngoai

4.2.1 Dinh nghia:

Cho đồ thị G( A,F ).Tap BCA goi là ổn định ngồi cia G néu: Vx¢B:

BOF(x) # 6, néi cach khac V x ¢B: 5 y €B sao cho ye F(x)

Hién nhién néu tap B 6n dinh ngoai thi B’ > B cũng ổn định ngồi 4.2.2 Số ổn định ngồi:

Dùng P (G) để ký hiệu họ gồm tất cả các cặp ổn định ngồi của đồ thị G Định nghĩa: Số phần tử của một trong những tập ổn định ngồi cĩ lực lượng bé nhất được gọi là số ổn định ngồi của đồ thị G, đồng thời đượcký hiệu

bằng B (G), nghĩa là: B (G)= min {| Al/A € PG) }

Trang 13

Ví dụ: Bài tốn về 5 con hậu chính là trường hợp của bài tốn:

Trên bàn cờ n x n cĩ thể đặt tối đa bao nhiêu con hậu tương tự xe, mã, tượng,

để chúng khống chế được tất cả các ơ cịn lại trên bàn cờ? Cĩ bao nhiêu cách dat?

Khi n = 8 dé thi G,, c6 s6 6n dinh ngoai B = 5, nén chi can 5 con hau b6 tri trên các ơ tương ứng với một tập ổn định ngồi thì chúng sẽ khống chế được tất cả các ơ trên bàn cờ

Khi n= 8 đồ thị Gụ cĩ số ổn định ngồi B = 12, nên chỉ cần 12 con mã bố trí trên các ơ tương ứng với một tập ổn định ngồi thì chúng sẽ khống chế được tất cả các ơ trên bàn cờ

Khi n = 8 đồ thị G; cĩ số ổn định ngồi B = 8, nên chỉ cần 8 con tượng bố trí trên các ơ tương ứng với một tập ổn định ngồi thì chúng sẽ khống chế được tất cả các ơ trên bàn cờ

Khi n = 8 đồ thị Gv cĩ số ổn định ngồi B = 8, nên chỉ cần 8 con xe bố trí trên các ơ nằm trên đường chéo thì chúng sẽ khống chế được tất cả các ơ trên bàn cờ 4.3 Nhân 4.3.1 Dinh nghia Tap B c A goi 1a nhan cua d6 thi néu B vita 6n dinh trong vira 6n định ngồi, nghĩa là: Vx € B: BO F(x) =6 Vx € B:BO F(x) #0 * Hai điều kiện trên của nhân tương đương với: F'(B)=AXB Từ định nghĩa suy ra :

¡) Nhân khơng chứa đỉnh nút

Trang 14

* Chú ý: Nêú g là hàm Grandi của đồ thị G thì tâp B={x\ g(x) = 0} là một nhân của G 4.3.2 Định lý Nếu Blà nhân của G thì B củng là tập ổn định trong cực đại 4.3.3 Định lý Trong đồ thị vơ hướng khơng cĩ nút mọi tâp ổn định trong cực đại đều là nhân của đồ thị 4.3.4 Hệ quả Mọi đồ thị vơ hướng khơng cĩ nút luơn cĩ nhân 4.3.5 Định lý Mọi đồ thị khơng cĩ chu luơn cĩ nhân 4.3.6 Định lý Mọi đồ thị khơng cĩ chu trình độ dài lẻ luơn cĩ nhân 4.3.7 Bổ đề Mọi đồ thị G đều cĩ cơ sở 4.3.8 Định lý Nếu mỗi đồ thị con của G điều cĩ nhân thì G cĩ hàm Grandi 4.3.9 Hệ quả Đồ thị vơ hướng cĩ hàm Grandi khi và chỉ khi khơng cĩ đỉnh nút §5 ĐỒ THỊ EULER VÀ ĐỒ THỊ HAMILTON 5.1 Đơ thị Euler 5.1.1 Đỉnh nghĩa

Chu trình đơn trong G di qua mỗi cạnh một lần được gọi là chu trình Euler

Đường đi đơn trong G đi qua mỗi cạnh của nĩ một lần được gọi là đường đi

Euler Đồ thị được gọi là đị thị Euler nếu nĩ cĩ chu trình Euler và gọi là đồ thị nửa Euler nêu nĩ cĩ đường đi Euler

5.1.2 Dinh ly (Euler)

Trang 15

5.1.3 Bổ đề Nếu bậc của mỗi đỉnh của đồ thị G khơng nhỏ hơn 2 thì G chứa chu trình 5.1.4 Hệ quả Đồ thị vơ hướng liên thơng G là nửa Euler khi và chỉ khi nĩ cĩ khơng quá hai đỉnh bậc lẻ 5.1.5.Dinh ly.(Dirak 1952)

Da đồ thị liên hợp cĩ chu trình Euler khi và chỉ khi tại mỗi đỉnh a số

Trang 16

5.2 Đơ thị Hamilton

5.2.1 Định nghĩa

Đường đi qua tất các đỉnh của đồ thị mỗi đỉnh đúng một lần được gọi là đường đi Hamilton Chu trình bắt đầu từ một đỉnh v nào đĩ qua tất cả các đỉnh cịn lại mỗi đỉnh đúng một lần rồi quay trở về v được gọi chu trình Hamilton

Đồ thị G được gọi là đồ thị Hamilton nếu nĩ chứa chu trình Hamilton và gọi là

nửa Hamilton nếu nĩ chứa đường đi Hamilton 5.2.2 Dinh ly (Dirak)

Đơn đồ thị vơ hướng G với n >2 đỉnh, mỗi đỉnh cĩ bậc khơng nhỏ hơn n/2 là đồ thị Hamilton

§6 CÁC PHƯƠNG PHÁP TÌM KIẾM 6.1 Bài tốn tìm kiếm

Bài tốn tìm kiếm cĩ thể phát biểu vắn tắt như sau:

- Cho một tập hợp S, mỗi phần tử s e S gọi là một trạng thái

- Với mỗi trạng thái se S_ xác định một tập cuss (s) gọi là tập kế thừa của s - Tại mỗi thời điểm cĩ thể đi từ trạng thái s e S đến một trong các trạng

trang thai thudc cuss (s)

- Một phần tử sạ e S gọi là trạng thái xuất phát - Một trạng thái q € S gọi là đích

Từ trạng thái xuất phát sạ hãy tìm cách đi đến đích 6.2 Thuật tốn fìm kiếm

Trang 17

Dua hết trạng thái của cuss (s) vào DS Hết vịng lặp

Thơng báo khơng tìm thấy đích (tức là khi DS = ®)

6.3 Tìm kiếm theo chiều sâu

Nếu trong thuật tốn tìm kiếm nĩi trên danh sách DS tổ chức theo kiểu LIFO thì ta cĩ phương pháp tìm kiếm theo chiều sâu trước

Trong phương pháp này mỗi lần duyệt đến tận cùng mỗi nhánh rồi mới sang nhánh khác

6.4 Tìm kiếm theo chiều rộng

Nếu trong thuật tốn tìm kiếm nĩi trên danh sách DS tổ chức theo kiểu FIFO thì ta cĩ phương pháp tìm kiếm theo chiều rộng trước

Trang 18

PHẦN 2: CÁC GIẢI THUẬT CỦA MỘT SỐ BÀI TỐN CƠ BẢN TRÊN ĐỒ THỊ

Viết bằng ngơn ngữ lập trình Pascal PROGRAM chuong_ trinh do_ thi uses crt,graph; type cung=record dau, cuoi, dai:integer; end;

mangs= array[0 1000] of string[30];

mangint= array[0 1000]of integer; var dinh:mangs;sd:integer; dau, cuoi,v:mangint; mtke:mangint; sc:integer; r,x0,y0,1:integer;chon:char; { sd : so dinh, sc : so cung}

Bài tốn 1 Nháp đồ thị theo danh sách cung vào một tệp văn bản

Tên các đỉnh là xâu ký tự, mơi đỉnh ghỉ trên một dịng của tệp Thuật tốn Dùng các tệp kiểu TEXT Dùng hàm LAPTEPQ Đọc xâu w chừng nào xâu w cịn khác ký tự / thì cịn đưa w vào tệp (đỉnh đầu của cung) đọc tiếp w

đưa w vào tệp (đỉnh cuối của cung)

Trang 19

write('cung ',i,':'"); write('dau: `); Readln(s); while s<>'/' do begin writeln(f,s); write('cuoi: '); readln(s); writeln(f,s); i:=itl; write('cung',i,':'); write('dau: '); readln(s); end; close (f); end; Bài tốn 2 Đọc một tệp đã được lập như 6 bai 1 đưa vào mảng và in lại danh sách cung Thuật tốn: Dùng mảng dinh để ghi tên các đỉnh Dùng hàm DANHSO(w) Vừa đánh số vừa đếm số đỉnh n Dãy dinh[0], ,dinh[n-1 ] là các đỉnh đã cĩ Duyệt các đỉnh ¡ từ 0 đến n-]

Nếu cĩ dinh[i] = w thì hàm cho ¡ (là số hiệu đinh w đã cĩ)

Nếu tên đỉnh w cha cĩ trong dãy nĩi trên thì

Cho dinh[n] = w Tăng n

Và hàm cho n-1(là số hiệu đỉnh mới) Dùng hàm DOCTEPO

Trang 20

procedure doc tep

Trang 21

Bài tốn 3 Nhập đồ thị theo danh sách cung Xét xem cĩ hay khơng một đường đi từ định xp đến đỉnh đích Thuật tốn: Gọi hàm DOCTEPO Cho các phần tử của ma trận kề a khởi đầu bằng 0 Duyệt các cung ¡ từ 0 đến m-1 Gan a[dau[i],cuoi[i]] =1 A sẽ là ma trận kề Tính ma trận tổng t = ata’+ +a™!,

Vì ta chỉ quan tâm đến việc cĩ hay khơng một đường đi cho nên trong các

phép tốn cĩ thể thay phép + bằng | (tốn tử bit “hoặc là”) và thay phép *

bằng &(tốn tir bit “và”)

Nhập xp, dich

T[xp,dich]=l<© cĩ đường từ xp đến dich Chương trình

procedure doc _tep

Trang 24

chừng nào cịn cĩ thể thì cịn tang k duyệt các cung từ 0 đến m-1 nếu đỉnh đầu thuộc Pk và đỉnh cuối chưa thuộc lớp nào thì cho đỉnh cuối vào tập P(k+1)

nếu v[dich] = 0 thì khơng cĩ đường ngược lại in đường bằng cách sau:

cho x =dich

chừng nào x cịn khác xp thì cịn

k=v[x]

in x

tìm cung cĩ đỉnh cuối = x và đỉnh đầu thuộc P(k-1)

cho x = đỉnh đầu của cung đĩ

Trang 26

b) Thuát tốn Thêm mảng DAI ghi độ dài mỗi cung Khơng dùng được các hàm lập tệp và đọc tệp của đồ thị khơng cĩ trọng số Dùng thuật tốn gán mỗi đỉnh bằng một số nguyên số này cĩ thể thay đổi trong

quá trình thực hiện việc gán, mảng v để lưu giá trị này

Khởi dầu cho các phần tử của v =-1(chưa gán),

V[xp] =0

Chừng nào cịn cĩ thể thì cịn duyệt các cung t 0 đến m-I nếu đỉnh đầu đã được

gán và đỉnh cuối chưa được gán, hoặc đã được gán nhưng v[cuoi] > v[dau] + độ dài cung đĩ thì gán v[cuọ] = v[dau] + độ dài cung đĩ

Néu v[dich] =-1 (cuối cung vẫn khơng được gán) thì khơng cĩ đường, ngược lại thì in đường bằng cách sau :

¡= dich

tim c là cung cĩ đỉnh cuối là ¡ và trên đĩ xảy ra đẳng thức

Trang 27

clrscr; write('moibannhaptentep muon tao:’); readln(s); assign(f,s); rewrite (f);

writeln('Moi nhap danh sach cung:

dinhdau ->dinhcuoi->dodai : "ngung go" /'); i:=1; write('cung ',i,' :'); write(' dau: '); readln(s); while s<>'/' do begin writeln(f,s); write(' cuoi: '); readln(s); writeln(f,s); write(' do dai: ');readln(s); writeln(f,s); 1:=i11; write('cung ',i,' :'); write(' dau: '); readln(s); end; close(f); end; Bài tốn 5 Nháp đồ thị theo danh sách cung Xét tính liên thơng của đồ thị Thuật tốn: Mảng v để lưu tập đỉnh liên thơng, VỊK] = I© k thuộc tập hợp Ham THEM( để xét điều kiện mở rộng liên thơng và bổ sung một phần tử mới, biến h để đếm số phần tử

Khởi đầu cho các phần tử của v = 0

Chừng nào hàm THEMQ) cịn cho giá trị đúng thì vịng lặp cịn tiếp tục Nếu h =n thì liên thơng, ngược lại thì khơng liên thơng

Chương trình:

Procedure tinh lien thong cua do_ thi;

var h,i,l:integer;dai,v:mangint;

Trang 28

var k:integer; begin for k:=0 to sc-1 do if (v[dau[k]]+wv[cuoi[k]]=1) then begin v{[dau[k]]:=1; v[cuoi[k]]:=1; inc(h); them: =1; exit; end; them:=0; end; begin clrscr; doctep; ve; writeln('Do thi co ',sd,' dinh'); for i:=0 to sd-1 do begin write(itl,' : ',dinh[i],' v[i]:=0; end; V[1]:=1;h:=1l; 1:=them; while (1=1) do 1:=them; if h=sd then

writeln(' Do thi lien thong ')

Trang 29

v[h] =c Tang h Nhập đỉnh xp Khởi dau v[0] = xp, h=1

Duyét cdc dinh c tir 0 dén n-1

Trang 30

inc(h); end; begin clrscr; doctep; repeat writeln('Do thi co ',sd,' dinh'); for j:=0 to sd-1 do write(j+l,' : ',dinh[j],' ; '); writeln; write('Nhap so hieu dinh xuat phat:xp='); readin (xp); dec (xp); v[0O]:=xp; h:=1; for c:=0 to sd-1 do if ktra=1 then tien; writeln('Nhancuadothivohuongchuadinh', dinh[xp],' la:'); for c:=0 to h-2 do writeln(dinh[v[c]]); writeln(dinh[v[h-1]]); writeln('Banmuontieptuckhong c/k'); ch:=readkey; until ((ch='k')or(ch='K')); end; Bài tốn 7 Từm nhân đơ thị cĩ hướng Thuát tốn: Mảng v để lưu tập ổn định trong

Hàm ISIN(&) xét điều kiện đỉnh k thuộc dãy v[0], .v[h-l ]

Trang 31

duyệt các đỉnh ¡ tir 0 dén n-1

nếu ISIN(i) = sai thi

duyệt các cung từ 0 đến m-1

nếu cĩ cung k sao cho đỉnh đầu = ¡ và đỉnh cuối thuộc dãy v{0], .v[h-1] thì tiếp

tục xét, ngược lại hàm cĩ giá trị sal Dùng t để lần lượt gán các đỉnh xuất phát Khởi đầu cho tiếp = đúng, T=0 vịng lặp chừng nào t cịn < n và tiếp cịn đúng thì cịn khởi đầu v[0] = t, h=1 c=0 chừng nào h cịn > = 0 và tiếp cịn đúng thì cịn nếu c >n-l thì

nếu KTRANHANQ)=đdúng thì tiếp = sai ngược lại tăng c

tang t

hết vịng lặp

Nếu tiếp = đúng thì khơng cĩ nhân

Trang 33

kt:=0; for k:=0 to sc-l do if ((dau[k]=i) and(isin(cuoi[k])=1))then kt:=1; if kt=0 then begin ktranhan:=0; exit; end; end; ktranhan:=1; end; begin clrscr; repeat doctep; ve; writeln('Do thi co ',sd,' dinh'); for j:=0 to sd-1 do write(j+1,' : ",đinh[j],' ; '); writeln; tiep:=1; J:=0; while (( j<sd) and (tiep=l)) do begin v[0]:=j; h:=1; c:=0; while ((h>=0) and(tiep=1)) do if (c>sd-2) then begin if (ktranhan=1) then tiep:=0 else lui; end else

if (ktra=1) then tien

Trang 34

write(dinh[v[c]],' '); write(dinh[v[h-1]],' '); end; writeln('Ban muon tiep tuc khong c/k’); ch:=readkey; until ((ch='k')or(ch='K')); end; Bài tốn 8 Nhdp dé thi theo danh sách cung.xem xét sắc số của đồ thị cĩ bằng 2 hay khơng? Thuật tốn:

Mảng v lưu hai tập mang hai màu của đồ thị (v[ï] = 1 nếu đỉnh ¡ cĩ màu thứ

nhất, v[i] =3 nếu đỉnh ¡ cĩ màu thứ 2)

Ham TIM() tim một đỉnh chưa cĩ màu (đỉnh của mảng liên thơng mới)

Ham BOSUNG(k) sơn màu một đỉnh k và xét trong mảng liên thơng chứa k, chừng nào cịn cĩ thể:

Duyệt các cung từ 0 đến m-1

Nếu đỉnh đầu và đỉnh cuối cĩ cùng một màu thì sắc số khơng thể bằng 2 Nếu một đỉnh đã cĩ màu và đỉnh kia chưa cĩ màu thì cho đỉnh chưa cĩ màu lấy màu khác Trong chương trình chính : Gọi hàm DOCTEPQ Khởi đầu gán các phần tử của v đều = 0 K=TIM()

Ching nao k cịn khác —1 (cịn mảng liên thơng chưa xét)

Goi ham BOSUNG (k) K=TIM()

Các đỉnh cĩ v =l sẽ cĩ màu 1 Các đỉnh cịn lại cĩ màu thứ 2 Chương trình:

Procedure sac so cua do_ th;

Trang 36

begin repeat clrscr; doctep; ve; u:=0; for j:=0 to sd-1 do v[3]:=0; k:=tim; while (k<>-1) do begin bosung(k); k:=tim; if u=1 then break; end; 1F u<>1 then begin writeln(' Sac so bang 2'); writeln; readin; writeln('cac dinh to mau 1'); for j:=0 to sd-1 do if (v[j]=1) then write(' ',dinh[j],' '); writeln; writeln('cac dinh to mau 2'); for j:=0 to sd-1 do if (v[j]=3) then write(' ',dinh[j],' '); writeln; end; writeln('Ban muon tiep tuc khong?c/k’); ch:=readkey; until ((ch='k"')or(ch='K')); end; Bài tốn 9 Nhập đơ thị theo danh sách cung.tìm chu trình Hamiliton Thuật tốn:

Dùng thuật tốn tìm kiếm theo chiều sâu

Mảng v để lưu đường đi từ đỉnh 0

Trang 37

v[h-l] vớic Hàm TIENQ v[h] =c tang h, c=0 Hàm LUIQ giảm h c= v[h+1] Khởi đầu v [0] = 0 Biến tiếp = đúng (biến này để cho vịng lặp dừng khi đã cĩ chu trình Hamiltơn) h=l, c=0 Chừng nào h cịn > 0 và tiếp cịn đúng thì cịn

Nếu c >n —I1 thì LUIQ

Ngược lại nếu hàm KTRA = đúng thì

TIENO

Nếu h=n và cĩ cung nối v[h-l] với đỉnh 0 thì cho tiếp = sai Ngược lại tăng c

Nếu tiếp = đúng thì khơng cĩ chu trình Hamilton

Nguoc lai chu trinh Hamilton 14 day v[0], ,v[h-1]

Chuong trinh:

procedure chu_trinh_ Hamilton

Var tiep,h,c:integer;v:mangin; ch:char

Trang 39

if ((h=sd)and(a(v[h-1],0)=1)) then tiep:=0; end else inc(c); if (tiep=1) then begin writeln; writeln('Khong co chu trinh Hamilton'); end else begin writeln; writeln('Chu trinh Hamilton la:'); for c:=0 to h-1 do write (dinh[v[c]],' -> '); writeln(dinh[0]); end; writeln('Ban co muontieptuc khong?c/k'); ch:=readkey; until (( ch='k')or (ch='K')); end; Bài tốn 10 Nhập đồ thị vơ hướng theo danh sách cung Vẽ đường một nét của hình theo đồ thị Thuật tốn

Giả sử cĩ đồ thị vơ hướng là hình cần vẽ một nét.Ta sẽ tìm chu trình Euler hoặc đường Euler của đồ thị

Trước hết tìm đỉnh xuất phát y cĩ bậc lẻ Nếu khơng cĩ đỉnh bậc lẻ thì lấy y = đỉnh đầu của cung 0

Xuất phát từ y tìm một dãy cung nối tiếp cho đến khi khơng đi tiếp được nữa Khơng lấy đỉnh lặp lại

Chừng nào chưa hết các cung thì cịn

Trang 40

dãy này vào dãy lớn đã cĩ

Dịch y đến đỉnh tiếp theo trong dãy lớn Nếu cuối cùng ta được một dãy chứa tất cả các cung của đồ thị được cách vẽ một nét, ngược lại khơng vẽ được một nét

Chương trình:

Procedure ve_duong_mot_ net;

var

p,t,g,i kl,j,n :nteger; v:mangint;

Ngày đăng: 18/11/2014, 09:34

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w