Tải bản đầy đủ (.docx) (11 trang)

Lý thuyết đồ thị giải bài tập giải thuật toán prim giải thuật toán kruskal

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (844.01 KB, 11 trang )

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN – HỆ VB2 ĐÀO TẠO TỪ XA


BÁO CÁO
BÀI TẬP TUẦN 3
GVHD Lý Thuyết: Đặng Trần Minh Hậu
GDHD Thực hành: Nguyễn Ngọc Thảo
LỚP: Lý Thuyết Đồ Thị - CSC00008
NHÓM 32




MỤC LỤC
A. Bài tập lý thuyết...................................................................................... 3
Câu 1.............................................................................................................. 3
Câu 2.............................................................................................................. 4
B. Bài tập cài đặt.......................................................................................... 5


A. Nội dung bài tập lý thuyết
Cho đồ thị như hình bên dưới

Câu 1: Áp dụng giải thuật Prim lên đồ thị đã cho ở trên để tìm cây khung nhỏ nhất bắt đầu tại
đỉnh A.
a

Quá trình thực hiện
Các cạnh e = (v,w) ứng viên tại lần
lặp thứ i



Lặp
Khởi tạo
Lặp
lần 1

Lặp
lần 2

Lặp
lần 3
Lặp
lần 4
Lặp
lần 5
Lặp
lần 6
Lặp
lần 7

Lặp
lần 8

Lặp
lần 9

Đầu lặp

{(A,B),(A,D)}


{(A,B),(D,B),(D,H),(D,J)}

Cuối lặp
Đầu lặp

{(D,H),(D,J),(B,C),(B,J)}

Cuối lặp
Đầu lặp
Cuối lặp
Đầu lặp
Cuối lặp
Đầu lặp

{(D,H),(D,J),(B,J),(C,E),(C,F)}
{(D,H),(D,J),(B,J),(C,E),(F,G),(F,I)}
{(D,H),(D,J),(B,J),(F,G),(F,I),(E,G)}

Cuối lặp
Đầu lặp

{(D,H),(D,J),(B,J),(F,I),(G,I),(G,J)}

Cuối lặp
Đầu lặp

{(D,H),(D,J),(B,J),(G,J),(I,J)}

Cuối lặp
Đầu lặp

Cuối lặp

V/Y

{(D,H),(J,H)}

T ( giữ nguyên thứ tự)


{v}

Cuối lặp
Đầu lặp

Y ( giữ nguyên thứ tự)

{A}

{B,C,D,E,F,G,H,I,J}



{A,D}

{B,C,E,F,G,H,I,J}

{(A,D)}

{A,D}


{B,C,E,F,G,H,I,J}

{(A,D)}

{A,D,B}

{C,E,F,G,H,I,J}

{(A,D),(D,B)}

{A,D,B}

{C,E,F,G,H,I,J}

{(A,D),(D,B)}

{A,D,B,C}

{E,F,G,H,I,J}

{(A,D),(D,B),(B,C)}

{A,D,B,C}
{A,D,B,C,F}
{A,D,B,C,F}
{A,D,B,C,F,E}
{A,D,B,C,F,E}

{E,F,G,H,I,J}
{E,G,H,I,J}

{E,G,H,I,J}
{G,H,I,J}
{G,H,I,J}

{A,D,B,C,F,E,G}

{H,I,J}

{A,D,B,C,F,E,G}

{H,I,J}

{A,D,B,C,F,E,G,I}

{H,J}

{A,D,B,C,F,E,G,I}

{H,J}

{A,D,B,C,F,E,G,I,J}

{H}

{A,D,B,C,F,E,G,I,J}

{H}

{A,D,B,C,F,E,G,I,J,H}




{(A,D),(D,B),(B,C)}
{(A,D),(D,B),(B,C),(C,F)}
{(A,D),(D,B),(B,C),(C,F)}
{(A,D),(D,B),(B,C),(C,F),(C,E)}
{(A,D),(D,B),(B,C),(C,F),(C,E)}
{(A,D),(D,B),(B,C),(C,F),(C,E),
(E,G)}
{(A,D),(D,B),(B,C),(C,F),(C,E),
(E,G)}
{(A,D),(D,B),(B,C),(C,F),(C,E),
(E,G),(G,I)}
{(A,D),(D,B),(B,C),(C,F),(C,E),
(E,G),(G,I)}
{(A,D),(D,B),(B,C),(C,F),(C,E),
(E,G),(G,I),(I,J)}
{(A,D),(D,B),(B,C),(C,F),(C,E),
(E,G),(G,I),(I,J)}
{(A,D),(D,B),(B,C),(C,F),(C,E),
(E,G),(G,I),(I,J),(J,H)}

Bảng 1.1 Bảng quá trình chạy thuật tốn Prim


b. Danh sách cạnh của cây khung tìm được và trọng số tương ứng
- Cây khung tìm được : Cây khung {(A,D),(D,B),(B,C),(C,F),(C,E),(E,G),(G,I),(I,J),(J,H)}
- Trọng số cây khung
Cạnh
Trọng số


-

AD
DB
BC
CF
CE
EG
1
4
4
1
2
2
Bảng 1.2 Bảng cạnh của cây khung và trọng số tương ứng

GI
3

IJ
3

JH
2

Tổng trọng số = 1+4+4+1+2+2+3+3+2 = 22

Câu 2: Áp dụng giải thuật Kruskal lên đồ thị đã cho ở trên để tìm cây khung nhỏ nhất
a


Quá trình thực hiện
Danh sách cạnh E đã sắp xếp kèm theo trọng số tương ứng

Danh sách cạnh

AD

CF

CE

EG

HJ

FG

GI

IJ

AB

DB

GJ

BC


DH

FI

DJ

BJ


E đã sắp xếp
Trọng số

Lặp
Lặp lần 1
Lặp lần 2
Lặp lần 3
Lặp lần 4
Lặp lần 5
Lặp lần 6
Lặp lần 7
Lặp lần 8
Lặp lần 9
Lặp lần 10
Lặp lần 11
Lặp lần 12

1

1
2

2
2
3
3
3
4
4
4
5
Bảng 2.1 Danh sách cạnh E đã sắp xếp kèm trọng số tương ứng

Cạnh e
được lấy
AD
CF
CE
EG
HJ
FG
GI
IJ
AB
DB
GJ
BC

5

5


6

10

T ∪ {e} có tạo thành chu
T
trình khơng?
Khơng
{(A,D)}
Khơng
{(A,D),(C,F)}
Khơng
{(A,D),(C,F),(C,E)}
Khơng
{(A,D),(C,F),(C,E) ,(E,G)}
Khơng
{(A,D),(C,F),(C,E) ,(E,G) ,(H,J)}

{(A,D),(C,F),(C,E) ,(E,G) ,(H,J)}
Khơng
{(A,D),(C,F),(C,E) ,(E,G) ,(H,J), (G,I)}
Khơng
{(A,D),(C,F),(C,E) ,(E,G) ,(H,J), (G,I), (I,J)}
Khơng
{(A,D),(C,F),(C,E) ,(E,G) ,(H,J), (G,I), (I,J),(A,B)}

{(A,D),(C,F),(C,E) ,(E,G) ,(H,J), (G,I), (I,J),(A,B)}

{(A,D),(C,F),(C,E) ,(E,G) ,(H,J), (G,I), (I,J),(A,B)}
Khơng

{(A,D),(C,F),(C,E) ,(E,G) ,(H,J), (G,I), (I,J),(A,B),(B,C)}
Bảng 2.2 Bảng q trình chạy thuật tốn Kruskal

b. Danh sách cạnh của cây khung tìm được và trọng số tương ứng
- Cây khung tìm được: Cây khung {(A,D),(C,F),(C,E),(E,G),(H,J),(G,I),(I,J),(A,B),(B,C)}
- Trọng số cây khung
Cạnh
Trọng số

AD
CF
CE
EG
HJ
GI
1
1
2
2
2
3
Bảng 2.3 Bảng cạnh của cây khung và trọng số tương ứng

- Tổng trọng số = 1+1+2+2+2+3+3+4+4 = 22

IJ
3

AB
4


BC
4


B. Nội dung bài tập cài đặt
Cho tập tin input.txt chứa ma trận kề của một đồ thị vô hướng liên thơng. Tập tin có định
dạng như sau:
▪ Dịng đầu tiên chứa số nguyên n (n > 2) thể hiện số đỉnh của đồ thị.
▪ n dòng tiếp theo chứa n số nguyên trên mỗi dòng, các số nguyên cách nhau bằng
khoảng trắng. Gọi [i, j] là giá trị tại dòng i cột j (i, j = 0,…,n-1). [i, j] = 0: khơng có cạnh nối
từ đỉnh i đến đỉnh j, [i, j] = x > 0: có cạnh nối từ i đến j với trọng số x.
a. Cài đặt giải thuật Prim để tìm cây khung nhỏ nhất trên đồ thị đã cho. Đỉnh bắt đầu do
người dùng nhập từ bàn phím. Xuất ra màn hình thơng tin của cây khung nhỏ nhất tìm được
- Danh sách cạnh thuộc cây khung nhỏ nhất theo thứ tự được phát hiện bởi giải thuật.
Quy ước: In mỗi cạnh trên một dòng riêng biệt theo mẫu <x>-<y>: <z>, với x và y là hai
đỉnh của cạnh và z là trọng số của cạnh.
- Trọng số của cây khung nhỏ nhất
b. Cài đặt giải thuật Kruskal để tìm cây khung nhỏ nhất trên đồ thị đã cho. Xuất ra màn
hình thơng tin của cây khung nhỏ nhất theo quy cách tương tự như ở câu a.
Chương trình được sử dụng cấu trúc dữ liệu cơ bản như stack, (priority) queue, vector, list,
v.v.
Không được sử dụng thư viện cài đặt cây khung nhỏ nhất có sẵn


1

Những lưu ý quan trọng
- Chương trinh gồm 1 class chính (Program.cs) nơi gọi file.txt và xuất kết quả và các class
chức năng.

- Chương trình hoạt động với các trọng số t trong file txt với t < 10.
- Lưu ý copy đường dẫn vào hàm main để chương trình truy xuất vào đúng file (bơi màu vàng
trong hình)*
*
ví dụ đường dẫn: @"D:\VB 2 KHTN\Lý thuyết đồ thị\Bai Tap\Bài tập tuần 03 - Có tính
điểm\N32-21880053,21880147-BTTuan03\SOURCE\testcase2.txt"


Hình 1.1 Vị trí đường dẫn

-

Các class và hàm chức năng gồm có
Class/Struct
Program
EdgeStruct
Graph Handler

QuickSort

Bao gồm/Chức năng
- Hàm Main: Hàm chính chạy chương trình
- Khởi tạo kiểu dữ liệu Edge
- Struct AdjacencyMatrix: Kiểu dữ liệu tự định nghĩa cho
AdjacencyMatrix
- Hàm InputAndStore : Đọc và trữ dữ liệu từ file txt
- Hàm OutputGraph: In ra ma trận kề
- Hàm Parting: Tìm điểm phân chia của quicksort
- Hàm Sort: hàm chính của quicksort



MinimumSpanningTree

2

Kết quả bài làm

- Hàm Prim : Hàm chạy thuật tốn Prim và xuất kết quả ra màn hình
- Hàm SortWeightInEdgeList: Hàm gọi Sort và tạo ra List các Edge đã
Sort
- Hàm checkCycle: Hàm check nếu thêm edge cần check vào thì có tạo
Cycle khơng
- Hàm refreshIndex: Refresh tất cả index có liên quan trong cùng 1 cycle
- Hàm Kruskal: Hàm chính thuật tốn Kruskal và xuất kết quả ra màn
hình


Hình 2.1 Kết quả testcase 1


Hình 2.1 Kết quả testcase 2



×