1. Trang chủ
  2. » Giáo án - Bài giảng

Giáo án Bài giảng về: Toán rời rạc trong cách giải bài tập (Trường đại học sư phạm kỹ thuật )

110 1,6K 3

Đ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 110
Dung lượng 847,75 KB

Nội dung

Bài tập tự giải ...22 Bài 5: Thảo luận cài ñặt ñồ thị, các thuật toán liệt kê chu trình Euler và Hamilton... Mỗi ñại biểu này lại có một số lẻ người quen ñến họp, nên trong ñồ thị liên t

Trang 1

TRƯỜNG ðẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN

KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

LỜI NÓI ĐẦU

Có thể nói toán học rời rạc là môn tiên quyết và hiệu quả nhất ñể người học nâng cao tư duy toán học trong phân tích, thiết kế thuật toán và rèn luyện kỹ năng lập trình với những thuật toán phức tạp Không những thế nó còn là “cửa ngõ” ñể người học có thể tiếp cận với rất nhiều modul trong khoa học máy tính (như Chương trình dịch, lý thuyết tính toán, Trí tuệ nhân tạo, ) Bài tập ñể củng cố

và nâng cao kiến thức trong môn học này

Về nội dung, bám sát với chương trình của nhà trường và hệ thống bài tập cũng ñược biên soạn theo các chương lý thuyết Với mỗi chương sẽ ñược chia thành

Hưng Yên, tháng 7 năm 2010

Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Trường ñại học sư phạm kỹ thuật Hưng Yên

Trang 3

MỤC LỤC

Bài 1: Các khái niệm cơ bản của Lý thuyết ñồ thị 5

Mục tiêu 5

a Nhắc lại lý thuyết 5

b ðề bài tập 5

c Hướng dẫn giải 6

d Bài tập tự giải 7

Bài 2: Biểu diễn ñồ thị trên máy tính 10

Mục tiêu 10

a Nhắc lại lý thuyết 10

b ðề bài tập 10

c Hướng dẫn giải 10

d Bài tập tự giải 14

Bài 3: ðồ thị Euler 15

Mục tiêu 15

a Nhắc lại lý thuyết 15

b ðề bài tập 16

c Hướng dẫn giải 16

d Bài tập tự giải 19

Bài 4: ðồ thị hamilton 20

Mục tiêu 20

a Nhắc lại lý thuyết 20

b ðề bài tập 20

c Hướng dẫn giải 20

d Bài tập tự giải 22

Bài 5: Thảo luận cài ñặt ñồ thị, các thuật toán liệt kê chu trình Euler và Hamilton Thảo luận về bài tập lớn 23

Mục tiêu 23

a Nhắc lại lý thuyết 23

b ðề bài tập 23

c Hướng dẫn giải 23

d Bài tập tự giải 31

Bài 6 Thuật toán tìm kiếm trên ñồ thị và ứng dụng 34

Mục tiêu 34

a Nhắc lại lý thuyết 34

b ðề bài tập 34

c Hướng dẫn giải 34

d Bài tập tự giải 51

Bài 7: Cây và cây khung 52

Mục tiêu 52

a Nhắc lại lý thuyết 52

b ðề bài tập 53

c Hướng dẫn giải 54

d Bài tập tự giải 55

Bài 8: Thảo luận về cài ñặt thuật toán tìm cây khung nhỏ nhất trên ñồ thị 58

Mục tiêu 58

Trang 4

a Nhắc lại lý thuyết 58

b ðề bài tập 58

c Hướng dẫn giải 58

d Bài tập tự giải 70

Bài 9, 10: Bài toán tìm ñường ñi ngắn nhất 71

Mục tiêu 71

a Nhắc lại lý thuyết 71

b ðề bài tập 71

c Hướng dẫn giải 73

d Bài tập tự giải 92

Bài 12: Bài toán luồng cực ñại trong mạng 97

Mục tiêu 97

a Nhắc lại lý thuyết 97

b ðề bài tập 98

c Hướng dẫn giải 99

d Bài tập tự giải 101

Trang 5

Bài 1: Các khái niệm cơ bản của Lý thuyết ựồ thị

Mục tiêu

- Lưu trữ ựược ựồ thị trên máy tắnh theo những phương pháp khác nhau

- Cài ựặt ựược chương trình chuyển ựổi giữa các phương pháp

- Sinh viên có khả năng tự học

- đồ thị có hướng G(V,E) ựược gọi là ựồ thị liên thông mạch, nếu mọi cặp ựỉnh của

nó ựều liên thông

- Biểu diễn dạng hình học: Giả sử có ựồ thị G(V,E)

Biểu diễn ựỉnh: lấy các ựiểm trên mặt phẳng hay trên không gian tương ứng với các phần tử của tập V và dùng ngay ký hiệu các phần tử này ựẻ ghi trên các ựiểm tương ứng

Biểu diễn cạnh: Nếu cạnh a với hai ựỉnh ựầu là x,y thì nó ựược biểu diễn bằng ựoạn thẳng hay một ựoạn cong nối giữa hai ựiểm x, y và không ựi qua các ựiểm tương ứng trong không gian

Biểu diễn cung: nếu cung a có ựỉnh ựầu là x, ựỉnh cuối là y, thì nó ựược biểu diễn bằng một ựoạn thẳng hoặc ựoạn cong ựược ựịnh hướng ựi từ x sang y và không qua các ựiểm tương ứng trung gian khác

Hình nhận ựược gọi là dạng biểu diễn hình học của ựồ thị G(V, E) đôi khi người ta cũng gọi dạng biểu diễn hình học là một ựồ thị

b đề bài tập

Bài 1 Cho G ựồ thị gồm 4 phần G1, G2, G3 và G4 như sau:

a Chỉ ra tập ựỉnh, cạnh(vô hướng,có hướng, khuyên, ) của mỗi ựồ thị ựã cho? Chỉ loại ựồ thị ựó?

b đồ thị G, G1, G2, G3, G4 và G5 có liên thông ko? Nếu ựồ thị ko liên thông hãy chỉ ra các thành phần liên thông?

Trang 6

c ðồ thị G, G1, G2, G3, G4 và G5 có chu trình ko? Chỉ ra các chu trình của ñồ thị (nếu có)?

7 6

Trang 7

Bài 1 Một quần ñảo có n( n ) hòn ñảo và hai hòn ñảo bất kì thuộc quần ñảo ñều

có số ñầu mối ñường ngầm tới một trong nhưng hòn ñảo nầy ñều nhỏ hơn n Chứng minh rằng từ một hòn ñảo tùy ý thuộc quần ñảo ta có thể ñi ñến một hòn ñảo bất kì khác của quần ñảo bằng ñường ngầm

Bài 2 Khi về nghỉ hè mỗi bạn học sinh của lớp 11A trường Lê Hồng Phong ñều trao ñổi ñịa chỉ với ít nhất một nửa số bạn trong lớp Chứng minh rằng trong thời gian nghỉ hè mỗi bạn của lớp 11A ñều có thể báo tin trực tiếp hay gián tiếp cho các bạn trong lớp

Bài 3 Trong một cuộc họp có ñúng hai ñại biểu không que nhau và mỗi ñại biểu này

có một số lẻ người que ñến dự Chứng minh rằng luôn luôn có thể xếp một số ñại bieetr ngồi chen giữa hai ñại biể nói trên , ñể người ngồi giữa hai người mà anh( chị) ta quen

Hướng ñẫn:

Trang 8

ðể giải ñược bài toán trên trước hết ta xây dựng các ñồ thị tương ứng, sau ñó vận dụng kết quả của ñịnh lý 4.1, hệ quả 4.1 và ñịnh lý 4.2 mà suy ra kết luận

Xuây dựng ñồ thị

• ðỉnh: Lấy các ñiểm trong mặt phẳng hay trong không gian tương ứng với các hòn ñảo thuộc quần ñảo ( các bạn học sinh trong lớp 11A, các ñại biểu ñến họp)

• Cạnh: Hai ñiểm x, y ñược nối bằng một cạnh khi và chỉ khi hai hòn ñảo x, y

có ñường ngầm trực tiếp với nhau( các bạn x, y trao ñổi ñịa chỉ cho nhau, các ñại biểu x, y quen nhau)

- ðồ thị nhân ñược ký hiệu bằng G1 , (G2 , G3)

- ðồ thị G1 mô tả toàn bộ lưới ñường ngầm trong quần ñảo

- ðồ thị G2 mô tả toàn bộ quan hệ trao ñổi ñịa chỉ trong lớp 11A

- ðồ thị G3 mô tả toàn bộ quen biết trong các ñại biểu trong các ñại biểu ñến

dự họp

Vận dụng kết quả các ñịnh lý ñể suy ra kết luận

- Do hai hòn ñảo bất kì ñều có tổng số ñầu mối ñường ngầm không nhỏ hơn n, nên hai ñỉnh bất kì của ñồ thị G1 ñều có tổng bậc không nhỏ hơn n Bởi vậy theo ñịnh lý 4.1 ñồ thị G1 liên thông, nên hai hòn ñảo bất kì có ñường hầm nối với nhau

- Vì mỗi bạn học sinh trong lớp 11A trao ñổi ñịa chỉ với ít nhất một nửa số bạn tron lớp, nên bậc của mỗi ñỉnh của G2 không nhỏ hơn một nửa số ñỉnh của ñồ thị Khi ñó , theo hệ quả 4.1 ñồ thị G2 liên thông Bởi vậy hai ñỉnh x, y ñều có xích nối với nhau Khi ñó thông qua các bạn tương ứng với các ñỉnh thuộc xích , mà bạn tương ứng với ñỉnh x báo tin ñược cho tương ứng với ñỉnh y và ngược lại

- Hai ñại biểu không quen nhau, thì hai ñỉnh tương ứng không kề nhau Mỗi ñại biểu này lại có một số lẻ người quen ñến họp, nên trong ñồ thị liên thông G3 có ñúng hai ñỉnh bậc lẻ và hai ñỉnh này lại không kề nhau Khi dó, theo ñịnh lý 4.2, hai ñỉnh này liên thông nên có ít nhất một xich nối giữa hai ñỉnh này Giả sử là một trong những mối xích nối giữa hai bậc lẻ này Dựa vào ta sắp xếp các ñại biểu tương ứng ngồi giữa hai người mà anh chị quen

Bài 4 Cho G ñồ thị như sau:

Chỉ ra tập ñỉnh, cạnh(vô hướng,có hướng, khuyên, ) của mỗi ñồ thị ñã cho? Chỉ loại ñồ thị ñó? ðồ thị có liên thông ko? Nếu ñồ thị ko liên thông hãy chỉ ra các

Trang 9

thành phần liên thông? ðồ thị có chu trình ko? Chỉ ra các chu trình của ñồ thị (nếu có)?

Trang 10

Bài 2: Biểu diễn ñồ thị trên máy tính

Mục tiêu

- Nêu ñược các cách biểu diễn ñồ thị và biểu diễn ñồ thị trên máy tính trên máy tính

- ðưa ra ñược ma trận kề, danh sách các cạnh, cung tương ứng với 1 ñồ thị cho trước

- Lưu trữ ñược ñồ thị trên máy tính theo những phương pháp khác nhau

- - Phân tích ñược bài toán thực tế tương ứng phần lý thuyết ñã học

- Sinh viên có khả năng tự học

a Nhắc lại lý thuyết

b ðề bài tập

Bài 1 Cho G ñồ thị gồm 4 phần G1, G2, G3 và G4 như sau:

a Biểu diễn các ñồ thị G,G1,G2,G3,G4 dưới dạng ma trận kề

b Biểu diễn các ñồ thị G,G1,G2,G3,G4 dưới dạng danh sách cạnh(cung)

c Biểu diễn các ñồ thị G,G1,G2,G3,G4 dưới dạng danh sách kề

Bài 2 Cài ñặt chương trình nhập danh sách kề của ñồ thị từ bàn phím và ñưa danh sách ñó ra màn hình

7 6

Trang 12

Phân tích bài toán :

Trong rất nhiều thuật toán làm việc với ñồ thị chúng ta thường xuyên phải thực hiện các thao tác: Thêm hoặc bớt một số cạnh Trong trường hợp này Cấu trúc dữ liệu dùng ở trên là không thuận tiện Khi ñó nên chuyển sang sử dụng danh sách kề liên kết (Linked Adjancency List) như mô tả trong chương trình nhập danh sách kề của

Trang 13

new(t); t^.v:=x, t^.next:=Ke[y]; Ke[y]:=t;

new(t); t^.v:=y, t^.next:=Ke[x]; Ke[x]:=t;

Trang 14

while t^.next<>nil do begin

Trang 15

Bài 3: ðồ thị Euler

Mục tiêu

- Kiểm tra ñược một ñồ thị bất kỳ có là ñồ thị euler hay không

- Áp dụng ñược thuật toán tìm chu trình Euler, ñường Euler, với 1 ñồ thị cho trước

- Lưu trữ ñược ñồ thị trên máy tính theo những phương pháp khác nhau Cài ñặt

ñược chương trình chuyển ñổi giữa các phương pháp

- Cài ñặt ñược thuật toán Tìm chu trình Euler

- Cài ñặt ñược thuật toán duyêt ñồ thị duyệt theo chiều sâu hoặc duyệt theo chiều

rộng

- Sinh viên có khả năng tự học

a Nhắc lại lý thuyết

- Chu trình (t.ư ñường ñi) ñơn chứa tất cả các cạnh (hoặc cung) của ñồ thị (vô

hướng hoặc có hướng) G ñược gọi là chu trình (t.ư ñường ñi) Euler Một ñồ thị

liên thông (liên thông yếu ñối với ñồ thị có hướng) có chứa một chu trình (t.ư

ñường ñi) Euler ñược gọi là ñồ thị Euler (t.ư nửa Euler)

Trang 16

Xuất phát từ một ñỉnh bất kỳ của G và tuân theo hai quy tắc sau:

1 Mỗi khi ñi qua một cạnh nào thì xoá nó ñi; sau ñó xoá ñỉnh cô lập (nếu có);

2 Không bao giờ ñi qua một cầu, trừ phi không còn cách ñi nào khác

Trang 17

ðồ thị G1 là ñồ thị nửa Euler

Thật vây, các ñỉnh a,b,e có bậc là 2,4,4 là bậc chẵn, các ñỉnh c và d có bậc là 3 là bậc lẻ

a

d

b

c G2

Trang 19

Xuất phát từ u, ta có thể ñi theo cạnh (u,v) hoặc (u,x), giả sử là (u,v) (xoá (u,v)) Từ v có thể ñi qua một trong các cạnh (v,w), (v,x), (v,t), giả sử (v,w) (xoá (v,w)) Tiếp tục, có thể ñi theo một trong các cạnh (w,s), (w,y), (w,z), giả sử (w,s) (xoá (w,s)) ði theo cạnh (s,y) (xoá (s,y) và s) Vì (y,x) là cầu nên có thể ñi theo một trong hai cạnh (y,w), (y,z), giả sử (y,w) (xoá (y,w)) ði theo (w,z) (xoá (w,z) và w)

và theo (z,y) (xoá (z,y) và z) Tiếp tục ñi theo cạnh (y,x) (xoá (y,x) và y) Vì (x,u) là cầu nên ñi theo cạnh (x,v) hoặc (x,t), giả sử (x,v) (xoá (x,v)) Tiếp tục ñi theo cạnh (v,t) (xoá (v,t) và v), theo cạnh (t,x) (xoá cạnh (t,x) và t), cuối cung ñi theo cạnh (x,u) (xoá (x,u), x và u)

d Bài tập tự giải

Trang 20

Bài 4: ðồ thị hamilton

Mục tiêu

- Kiểm tra ñược một ñồ thị bất kỳ có là ñồ thị Hamilton hay không

- Áp dụng ñược thuật toán tìm chu trình Hamilton, ñường Hamilton, với 1 ñồ thị cho trước

- Lưu trữ ñược ñồ thị trên máy tính theo những phương pháp khác nhau Cài ñặt ñược chương trình chuyển ñổi giữa các phương pháp

- Cài ñặt ñược thuật toán Tìm chu trình Halmiton

- Cài ñặt ñược thuật toán duyêt ñồ thị duyệt theo chiều sâu hoặc duyệt theo chiều rộng

- Sinh viên có khả năng tự học

Trang 21

a

d

b

c G2

Trang 23

Bài 5: Thảo luận cài ñặt ñồ thị, các thuật toán liệt kê chu trình Euler và Hamilton Thảo luận về bài tập lớn

Mục tiêu

- Lưu trữ ñược ñồ thị trên máy tính theo những phương pháp khác nhau

- Chuyển ñổi giữa các kiểu biểu diễn ñồ thị trên máy tính

- Nâng cao khả năng làm việc nhóm

- Rèn luyện tư duy sáng tạo

- Phân tích ñược bài toán thực tế tương ứng phần lý thuyết ñã học

- Sinh viên có khả năng tự học

a Nhắc lại lý thuyết

Xem lại trong bài 3 và bài 4

b ðề bài tập

Bài 1 Tìm chu trình Euler trong ñồ thị G

Bài 2 Tìm chu trình Halmiton trong ñồ thị G

c Hướng dẫn giải

Bài 1 ðề bài : Cài ñặt chương trình tìm chu trình Euler trong ñồ thị G

Cho ñồ thị G=(X,E) tồn tại chu trình Euler Hãy tìm chu trình (chi trình Euler là chu trình ñi qua tất cả các cạnh của ñồ thị, mỗi cạnh ñi qua ñúng một lần)

Phân tích bài toán :

Trang 24

Khi xoá cạnh bắc cầu thì phải loại hết các ñỉnh trơ trọi (nghĩa là không kề với bất cứ ñỉnh nào thuộc ñồ thị)

Cấu trúc dữ liệu:

Biểu diễn ñồ thị bằng ma trận kề a(i,j), do ñó lưu ý khi xoá ñi một cạnh ta chỉ việc gán a(i,j)=a(j,i)=0, ñồng thời phải lưu cạnh vừa xoá vào một mảng khác: Mảng Ctr Mảng lt: array [1…Nmax] of integer dùng trong thủ tục tìm thành phần liên thông (giống như một thuật toán tìm thành phần liên thông trình bày ở trên)

Mảng dd: array [1…Nmax] of Boolean, giá trị dd[i] cho biết ñỉnh i bị loại khỏi ñồ thị hay chưa Nếu bị lại thì dd[i]=True; ngược lại dd[i]=False;

Y:=dinh dau tien trong danh sach Ke(x);

STACK← y;

(* loai bo canh (x,y) khoi do thi *) Ke(x):=Ke(x)\ { y} ;

Ke(y):=Ke(y)\{ x} ;

Trang 25

End Else

Trang 26

For i=1 to N do

If dd[i] and (lt[i]=0) and(a[i,k]=1)then

Begin lt[i]:=sotp;

Trang 27

If sotp=1 then KTLT=True Else

Bengin (*nếu không có cạnh bắc cầu thì khi khôi phục lại cạnh (u,v)*)

a[u,v]:=1 a[v,u]:=1 KTLT:=False End;

For i=1 to N do

If a[u,i]=1 then

Trang 28

Begin (*xoá cạnh (u,i) khỏi ñồ thị *)

a[u,i]:=0 a[i,u]:=0 (*Loại ñỉnh u khỏi ñồ thị*) dd[u]:=False;

(*ðua cạnh (u,i) vào chu trình*)

(*Ngược lại nếu còn nhiều cạnh nối với u ta tìm một cạnh không phải là cạnh bắc cầu và xoá cạnh ñó ñồng thời ñưa nó vào chu trình*)

Begin (*ðoạn mã sau xoá cạnh (u,i) và ñưa cạnh này

Trang 29

vào chu trình*)

a[u,i]:=0 a[i,u]:=0 inc(solC);

Trang 30

Docfile;

Timchutrinh;

Ghifile;

END

Bài 2 ðề bài : Liệt kê tất cả các chu trình Hamilton của ñồ thị

Phân tích bài toán :

Thuật toán sau ñây ñược xây dựng dựa trên cơ sở thuật toán quay lui cho phép liệt

kê tất cả các chu trình Hamilton của ñồ thị

Hình dưới ñây mô tả cây tìm kiếm theo thuật toán vừa mô tả

ðồ thị và cây liệt kê chu trình Hamilton của nó theo thuật toán quay lui

Trong trường hợp ñồ thị có không quá nhiều cạnh thuật toán trên có thể sử dụng ñể kiểm tra ñồ thị có phải là Hamilton hay không

Chương trình minh họa :

Procedure Hamilton(k);

(* liet ke cac chu trinh Hamilton thu duoc bang viec phat trien day dinh (X[1], , X[k-1]) cua do thi G=(V,E) cho boi danh sach ke: Ke(v), v∈ V *)

begin

Trang 31

for y ∈ Ke(X[k-1]) do

if (k =N+1) and (y=v0) then Ghinhan(X[1], , X[n], v0) else

if Chuaxet[y] then begin

Trang 32

ngồi cạnh nhau ñược Thông tin về quan hệ giữa các tổ chức ñược cho dưới dạng cặp số nguyên i, j nếu giữa 2 tổ chức này có quan hệ căng thẳng

Hãy lập trình giúp Tổng thư ký Liên hợp quốc bố trí chỗ ngồi quanh bàn họp Các

tổ chức ñược ñánh số từ 1 tới N, 0 < N <= 500

Dữ liệu vào: từ file CONF.INP, dòng ñầu tiên chứa số nguyên N, các dòng sau, mỗi dòng một cặp số i, j cho biết các ñại diện i và j không ngồi cạnh nhau ñược Kết thúc là một dòng chứa 2 số 0

Kết quả: ñưa ra file CONF.OUT Nếu không có cách bố trí thỏa mãn yêu cầu thì ñưa ra thông báo KHONG CO, trong trường hợp ngược lại – ñưa ra dãy N

số nguyên xác ñịnh vị trí ai ngồi cạnh ai quanh bàn tròn

Một trạm quảng ñường giao thông phải chịu trách nhiêm về tình trạng của một mạng lưới giao thông nối giữa các ñiểm dân cư Hàng tháng, họ phải cử một ñội ñi kiểm tra một vòng qua khắp mạng lưới ñể xem xét tình trạng hiện thời của các ñường giao thông nhằm báo sửa chữa kịp thời nếu có nhu cầu Hãy viết chương trình nhập vào mạng lưới giao thông và giúp trạm quyết ñịnh lộ trình của ñội kiểm tra sao cho có thể thăm tất cả các con ñường mà tổng chiều dài ñoạn ñường ñi qua

là nhỏ nhất

Bài tập 3: Mã ñi tuần

Hãy cài ñặt chương trình xác ñịnh lộ trình của con mã trên bàn cờ 8x8 ô bắt ñầu từ ô (i, j) ñi qua tất cả các ô của bàn cờ vàmỗi ô chỉ 1 lần duy nhất

Mở rộng với trường hợp bàn cờ kích thước NxN

Bài tập 4: Hội nghị bàn tròn

Có 12 người ngồi chung 1 bàn tiệc tròn Mỗi người có ít nhất 6 người quen Hãy chỉ ra cách sắp xếp sao cho mỗi người ñều ngồi cạnh người mình quen Tổng

Trang 33

quát, hãy sắp N người ngồi chung quanh bàn tròn sao cho mỗi người ñều ngồi cạnh người mình quen Biết mỗi người có ít nhất (N + 1)/2 người quen.

Trang 34

Bài 6 Thuật toán tìm kiếm trên ñồ thị và ứng dụng

Mục tiêu

- Trình bày ñược ý tưởng, cách cài ñặt và cài ñặt ñược thuật toán BFS, DFS

- Nêu ưu nhược của từng thuật toán ñối với từng loại ñồ thị

- Phân tích ñược bài toán thực tế tương ứng phần lý thuyết ñã học

- Sinh viên có khả năng tự học

- Rèn luyện tư duy sáng tạo

Bài 3 Thuật toán tìm ñường ñi theo chiều sâu (thuật toán duyệt theo chiều sâu) Bài 4 Thuật toán tìm ñường ñi theo chiều rộng (thuật toán duyệt theo chiều rộng)

c Hướng dẫn giải

Bài 1 Dùng cây ñể mô tả kết quả duyệt chiều sâu và duyệt theo chiều rộng trên ñồ thị sau:

Trang 35

Duyệt rộng

Duyệt sâu:

Bài 2 Thuật toán tìm số thành phần liên thông

Cho ñồ thị G=(X,E) với tập các ñỉnh X và tập các cung E Xét xem ñồ thị có bao nhiêu thành phần liên thông, mỗi thành phần liên thông bao gồm những ñỉnh nào?

Phân tích bài toán :

Trang 37

+ Duyệt các ñỉnh kề của 4, gặp ñỉnh 1 ñánh số rồi nên bỏ qua Gặp ñỉnh 2 ñánh

số rồi nên bỏ qua Gặp ñỉnh 3 chưa ñánh số nên ñánh số 1, lt[3]:=1 sang bước tiếp theo

+ Duyệt các ñỉnh kề của 3 gặp toàn các ñỉnh ñánh số rồi nên không ñánh số nữa dừng việc ñánh số

Như vậy ta ñã tìm ñược 1 thành phần liên thông

Lấy ra một ñỉnh chưa ñánh số ví dụ ta lấy ñỉnh 6

Ta lại làm như trên ta lại tìm ñược thành phần liên thông khác

Như vậy ta rút ra ñược Cấu trúc dữ liệu của bài toán này

ðối với ñồ thị và các cạnh thì ta có thể dùng ma trận kề hoặc danh sách kề, và nên ñọc từ file ñể ñơn giản hoá

Dùng một mảng lt[1…n] biểu diễn TPLT lt[i]:=K nếu ñỉnh i thuộc thành phần liên thông

Chương trình minh họa :

Trang 39

Begin lt[k]:=sotp;

(*Duyệt qua các ñỉnh của ñồ thị *) For i:=1 to N do

(*Nếu ñỉnh i kề với k và chưa ñánh dấu thì ta gọi thủ tục ñệ quy Tìm

LT nghĩa là lại ñánh dấu và duyệt các ñỉnh kề của i *)

(*Nếu có một ñỉnh chưa thuộc thành phần liên thông nào lt[i]=0 nghĩa

là tìm ra một thành phần mới nên ta tăng số lượng thành phần và bắt ñầu ta ñi tìm thành phần liên thông mới ñó bằng thủ tục ñệ quy TimLT(i)*)

lf lt[i]=0 then Begin

Trang 40

Procedure Ghifile;

Var i,j: integer;

Begin

Writeln(‘so thanh phan lien thong cua do thi lµ: ;sotp);

For i:=1 to sotp do

Begin Writeln(‘TPLT’, i ,’bao gom cac dinh:’);

For j:=1 to N do (*nếu j thuộc thành phần liên thông thứ i thì in ra *)

b Biểu diễn ñồ thị bằng danh sách cạnh

Ma trận của chúng ta (ở ví dụ trên) ñược viết dưới dạng:

Ngày đăng: 25/04/2014, 10:13

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

TÀI LIỆU LIÊN QUAN

w