1. Trang chủ
  2. » Cao đẳng - Đại học

Chương 6 cấu trúc dữ liệu kiểu đồ thị

31 239 1

Đ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 31
Dung lượng 102,5 KB

Nội dung

6.1 Đồ thị có hướng 6.1.1 Khái niệm Đồ thị có hướng Directed graph gồm một tập hợp hữu hạn các phần tử gọi là nút hay đỉnh, cùng với một tập hợp hữu hạn các cạnh có hướng nối các cặp

Trang 1

Chương 6 Cấu trúc dữ liệu kiểu Đồ thị ( Graph )

Trong chương 5 chúng ta đã nghiên cứumột loại cấu trúc phi tuyến là cây Cây là mộttrường hợp đặc biệt của một loại cấu trúc dữliệu tổng quát hơn ,đó là đồ thị( Graph) Trongchương này, chúng ta sẽ nghiên cứu hai loại đồthị là đồ thị có hướng và đồ thị vô hướng

6.1 Đồ thị có hướng

6.1.1 Khái niệm

Đồ thị có hướng ( Directed graph ) gồm một tập hợp hữu hạn các phần tử gọi là nút hay đỉnh, cùng với một tập hợp hữu hạn các cạnh có hướng nối các cặp đỉnh với nhau

Chẳng hạn cho đồ thị sau đây:

Trang 2

2, và 4 đến 3

Cây có thể coi là trường hợp đặc biệt của

đồ thị có hướng và được đặc trưng bởi tínhchất là một trong các nút, nút gốc,không cócạnh nào hướng đến nó, và tất cả các nút cònlại có thể đạt đến từ nút gốc bằng một đường

Trang 3

duy nhất Nghĩa là ,chỉ đi theo một và chỉ một dãy các cạnh liên tiếp

Đồ thị trên đây có một nút "gần giống như nút gốc"

( Không có cạnh nào hướng đến nó) là nút 1, nhưng có nhiều đường khác nhau từ nút 1 đến nút 3

Ví dụ:

1→ 2 →3

1→ 4 →3

1→ 4 →2 →3

Sau đây là một ví dụ khác về đồ thị: 1

2

6

5 4 3

Trang 4

Trong trường hợp này ta có các đường đi nhưsau:

Ví dụ :

Đồ thị có hướng biểu diễn quá trình lập kếhoạch sản xuất trong một doanh nghiệp

Trang 5

3.1

1 2 3 3.2 4 5

3.3

1 § Æt môc tiªu kÕ ho¹ch

2 Nghiªn cøu thÞ tr êng

3 § ¸nh gi¸ c¸c tiÒm n¨ng cña danh nghiÖp

là thực hiện kế hoạch

6.1.2 Phương pháp cài đặt đồ thị có hướng

Một phương pháp rất thông dụng để cài

Trang 6

matrix) Để xây dựng ma trận kề ,trước hếtchúng ta đánh số các nút của đồ thị có hướng1,2,2 n Ma trận kề là ma trận Adj bậc n x ntrong đó thành phần ở hàng i, cột j có giá trị 1nếu có một cạnh từ i đến j ,và có giá trị o nếukhác

Ví dụ : Cho đồ thị có hướng sau đây:

Trang 7

0 1 1 0 1

0 0 1 0 0

Adj = 0 0 0 1 0

0 0 0 1 0

Trang 8

Cho đồ thị có hướng sau đây:

Trang 9

1

A 5 E

Trang 10

Một đồ thị có hướng được biểu diễnbởi một mảng các con trỏ V[1],V[2], V[n] ,mỗi con trỏ cho mỗi nút trong đồ thị cóhướng Mỗi phần tử mảng V[i] chỉ đến một nútđầu lưu trữ dữ liệu cho nút ấy và chứa một contrỏ chỉ đến một danh sách liên kết của các nút

kề ( Nút được nối với i theo hướng từ i đi ra).Mỗi nút kề có hai trường : trường số nguyên,lưu trữ dữ liệu của nút và một trường liên kếtchỉ đến nút tiếp thẻo trong danh sách kề này Cách biểu diễn đồ thị có hướng bằngdanh sách kề có thể được cài đặt với các khaibáo như sau:

Const

MaxVertices= ( Số các nút của đồ thị cóhướng)

Trang 11

V: ArrayOfPointer;

6.1.3 Các giải thuật xử lý danh sách kề

Để xây dựng các danh sách kề cho một đồ thị

có hướng chúng ta phải thực hiện các giải

thuật cơ bản xử lý danh sách kề

Giải thuật thiết lập danh sách kề

Gải thuật thiết lập danh sách kề được biểu diễnnhư sau:

Trang 12

For i:= 1 to MaxVertices thực hiện các bướcsau đây:

1 - Lấy một nút đầu được chỉ bởi V[i] và khởiđộng trường Next của nó tại giá trị Nil

2 - Đọc dữ liệu trong nút này vào trường dữliệu V[i]^.Data của nút đầu

3 - Với mỗi nút kề với nút i ( Có hướng từ i đira) thực hiện các bước sau đây:

a Đọc số của nút ấy

b Chèn số này vào danh sách liên kếtcủa các nút kề được chỉ bởi V[i]^.Next bằngcách dùng một trong các giải thuật chèn trongdanh sách đã xét trong chương 5

Giải thuật tìm theo chiều sâu

Để hiểu rõ bản chất của giải thuật tìmtheo chiều sâu ( Depth- First Search) chúng taxét đồ thị có hướng sau đây:

Trang 13

A,B,E

Ta tiếp tục thăm các nút con của Enhưng vì E không có các nút con nên ta trở lạithăm các nút con của nút B Ta thăm nút F vànút con của nó là H

Trang 14

A,B,E,F,H

Như vậy, chúng ta đã xem xét xong nút

B và các con cháu của nó Chúng ta trở lại nút

A và tiếp tục thăm các nút con ( C và D ) của

Trang 15

(* Quét danh sách kề tìm theo chiều sâu*)

CurrPtr:= V[Start]^.Next;

While CurrPtr <> Nil do

Begin

NewStart := CurrPtr^.Vertex;

if ( NewStart in Unvisited) then

DepthFirstSeach (V ,Unvisited, NewStart);CurrPtr:= CurrPtr^.Next

end;

end;

Trong giải thuật này Unvisited là một tập hợp

có kiểu SetOfVertices= Set of VertexNumber

Nó có thể được khởi động bằng lệnh:

Unvisited:= [1 NumVertices] trước khi gọithủ tục DepthFirstSearch, trong đóNumVertices là số các nút trong đồ thị cóhướng

Giải thuật tìm theo chiều rộng

Xét đồ thị có hướng:

Trang 17

Bước 1 Thăm nút xuất phát

Bước 2 Khởi động một Queue chỉ chứa nútxuất phát

Bước 3 While( Queue không rỗng) thực hiệncác bước sau đây:

b Thêm W vào hàng đợi

Giải thuật quét đồ thị có hướng

Giải thuật sau đây thực hiện việc quétmột đồ thị có hướng ,thăm mõi nút đúng mộtlần dựa trên cơ sở tìm kiếm theo chiều sâu:

1 Khởi động một tập hợp Unvisited chứa các

số của các nút trong đồ thị

2 While ( Unvisited khác rỗng) làm các bước

sau đây:

a Chọn một nút xuất phát từ tập Unvisited

Trang 18

b Dùng giải thuật tìm theo chiều sâu để thămtất cả các nút có thể đạt được từ nút xuất phátnày

6.2 Đồ thị vô hướng

6.2.1 Khái niệm

Đồ thị vô hướng gồm một tập hợp hữu hạn các phần tử gọi là nút hay đỉnh cùng với một tập hợp hữu hạn các cạnh nối các cặp đỉnh với nhau.

Như vậy , đồ thị vô hướng khác với đồthị có hướng ở chỗ các cạnh của nó khôngđược định hướng và không có một nút nàođược nối với chính nó

Trang 19

6.2.2 Phương pháp cài đặt đồ thị vô hướng

Có 3 phương pháp cài đặt đồ thị vô hướng:

- Dùng ma trận kề

- Dùng danh sách kề

Trang 20

Dùng ma trận kề

Cũng như đồ thị có hướng , chúng ta có thểbiểu diễn đồ thị vô hướng bằng ma trận kề Chẳng hạn , ma trận kề của đồ thị ở trên biểudiễn như sau:

Dùng danh sách kề

Trang 21

Bây giờ chúng ta dùng danh sách kề để biểu diễn đồ thị vô hướng trên đây:

Nót ® Çu C¸c nót kÒ V[1] A 2 4 5

V[2] B 1 4

V[3] C 4

V[4] D 1 2 3 5

V[5] E 1 4

Cách biểu diễn bằng danh sách kề đối với một

dồ thị vô hướng cũng khong hiệu quả cho lắm

vì phải lưu trữ các thông tin thừa Nếu một cạnh nối các nút i và J thì nút chứa i xuất hiện trong danh sách kề của nút i và nút chứa J xuấ hiện trong danh sách kề của nút I

Trang 22

Dùng danh sách các cạnh

Một cách cài đặt hiệu quả hơn đồ thị vô hướng

là dúng danh sách các cạnh Mỗi nútcạnh( Edge node) trong danh sách biểu diễnmột cạnh trong đồ thị và nó có dạng sau đây:

Trang 23

kết chỉ đến một nút cạnh có nút thứ i là mộttrong các điểm cuối của nó

Biểu diễn danh sách cạnh của đồ thị trên đâynhư sau:

Đồ thị vô hướng có nhiều ứng dụng trong việc

mô phỏng các sơ đồ mạng điện , các hệ thống

Trang 25

Câu hỏi và bài tập chương 6

Trang 28

- Biểu diễn bằng danh sách kề

- Biểu diễn bằng danh sách cạnh

Trang 30

0 1 1 1

1 0 1 1

Adj = 1 1 0 1

1 1 1 0

Bài 6 Với các danh sách kề sau đây ,hãy vẽ các đồ thị tương ứng:

v[1] A 2 3

v[2] B 1

v[4] C 4 1

v[3] D 3

Ngày đăng: 28/06/2018, 20:38

TỪ KHÓA LIÊN QUAN

w