Professional Documents
Culture Documents
(Giáo Trình) BTH5 - Các Bài Toán Về Đường Đi (TT)
(Giáo Trình) BTH5 - Các Bài Toán Về Đường Đi (TT)
(Giáo Trình) BTH5 - Các Bài Toán Về Đường Đi (TT)
HCM
Khoa: CNTT BÀI 5
Bộ môn: Khoa học máy tính CÁC BÀI TOÁN VỀ ĐƯỜNG ĐI
TH CẤU TRÚC RỜI RẠC
A. MỤC TIÊU:
− Cài đặt thuật toán nhập đồ thị từ file
− Cài đặt thuật toán tìm đường đi ngắn nhất
− Các ứng dụng
B. TÓM TẮT LÝ THUYẾT
- Định nghĩa cây khung ngắn nhất:
Cho một đồ thị vô hướng G, trên mỗi cạnh của G được gán một trọng số c(i, j). Cây khung T
của G được gọi là cây khung ngắn nhất nếu tổng trọng số các cạnh của T là nhỏ nhất
Chọn cạnh bổ sung vào cây T sao cho khi thêm cạnh không tạo thành chu trình trong
cây T
Viết hàm in đường đi giữa 2 đỉnh khi tinh được mảng nhãn chi phí các đỉnh
Bài tập 2: Cho đồ thị G có trọng số, liên thông gồm n đỉnh được đánh số từ 1 đến n. Hãy áp
dụng thuật toán Kruskal tìm cây khung nhỏ nhất tương ứng cho đồ thị G.
Yêu cầu thực hiện:
Viết hàm đọc file nhập đồ thị, xuất đồ thị.
Khai báo cấu trúc tập cạnh (tập cạnh là mảng 1 chiều, mỗi phần tử là 1 cạnh, 1 cạnh là một
cấu trúc gồm 3 thành phần, đỉnh đầu và đỉnh cuối, trọng số cạnh)
Viết hàm tạo danh sách tập cạnh ban đầu (dựa vào ma trận A trong đồ thị g).
Viết hàm in ds tập cạnh
Viết hàm sắp xếp tập cạnh theo thứ tự không giảm của trọng số.
Viết hàm kiểm tra 1 cạnh không tạo thành chu trình khi thêm vào cạnh đó vào tập cạnh
(cây T)
Viết hàm tìm cây khung ngắn nhất theo thuật toán Kruskal
Hướng dẫn:
Bước 1. Xây dựng hàm đọc file lưu trữ đồ thị
Viết hàm tạo danh sách tập cạnh ban đầu (dựa vào ma trận A trong đồ thị g).
Viết hàm in ds tập cạnh
Viết hàm sắp xếp tập cạnh theo thứ tự không giảm của trọng số.
Bước 3. Kiểm tra 1 cạnh không tạo thành chu trình khi thêm vào
Bước 4. Thuật toán Kruskal
void Kruskal(Graph g)
{
Tạo tập cạnh C có nC cạnh từ đồ thị g
int dem=0;
for(int i=0; i<n_C; i++)
{
if(kt_chutrinh(C[i], D, g.n, socay)==1)
{
dem++;
Thêm cạnh c vào cây khung T
}
if(dem==g.n-1)
break;
}
}
Bài tập 3: Cho đồ thị G có trọng số, liên thông gồm n đỉnh được đánh số từ 0 đến n-1. Viết thuật toán
tìm đường đi giữa 2 đỉnh u, v bất kỳ.
Hướng dẫn:
Bước 1. Xây dựng hàm đọc file lưu trữ đồ thị
Bước 2. Xây dựng cấu trúc ngăn xếp Stack
- Cấu trúc Stack: