CÀI ĐẶT THUẬT TOÁN AKT CHO BÀI TOÁN THÁP HÀ NỘI pptx

3 2.8K 41
CÀI ĐẶT THUẬT TOÁN AKT CHO BÀI TOÁN THÁP HÀ NỘI pptx

Đang tải... (xem toàn văn)

Thông tin tài liệu

Tài liệu hướng dẫn thực hành 1 CÀI ĐẶT THUẬT TOÁN A KT CHO BÀI TOÁN THÁP NỘI 1. Thuật toán A KT Bước 1 Mởđỉnh đầu tiên S, gán g(S) = 0 Sử dụng tri thức bổ sung để ước tính hàm h(S) Tính f(S) = g(S) + h(S) Bước 2 Chọn đỉnh mở có f là nhỏ nhất và gọi đỉnh đólàN Nếu N là đích: đường đi từđỉnh ban đầu đến đỉnh N là ngắn nhất và bằng g(N). Dừng (Success). Nếu không tồn tại đỉnh mở nào: cây biểu diễn vấn đề không tồn tại đường đi tới mục tiêu. Dừng (Fail). Nếu có 2 đỉnh mở trở lên có cùng giá trị f nhỏ nhất: ta phải kiểm tra xem những đỉnh đó có đỉnh nào là đích hay không. Nếu có: Đường đi từđỉnh ban đầu đến đỉnh N là ngắn nhất và bằng g(N). Dừng. Nếu không có: chọn ngẫu nhiên một trong các đỉnh đóvàgọi đólàđỉnh N. Bước 3 Đóng đỉnh N, mở mọi đỉnh sau N. Với mỗi đỉnh sau N, tính: g(S) = g(N) + gt(S->N) Sử dụng tri thức bổ sung để tính h(S). f(S) = g(S) + h(S). Bước 4 Quay lại Bước 2. 2. Cấu trúc dữ liệu typedef struct { char Dia[MAXDIA]; int SoDia; }COT; typedef struct { COT Cot[MAXCOT]; int SoCot; int TrangThai; int DinhTruoc; int g, h; }DINH; DINH O[MAX]; int nO; Ý nghĩa: ¾ O: Là tập các đỉnh trên cây tìm kiếm. ¾ nO: Số lượng đỉnh trên cây tìm kiếm. ¾ DINH. Cot: Sự phân phối các đĩa trên tháp. ¾ DINH. SoCot: Số tháp ban đầu. ¾ DINH. TrangThai: Tài liệu hướng dẫn thực hành 2 = 0 : Nếu là đỉnh mở. = 1 : Nếu là đỉnh đóng. ¾ DINH. DinhTruoc: Trả về thứ tự của đỉnh trước đó. ¾ DINH. g, h: Lượng giá 1 đỉnh. 3. Hướng dẫn cài đặt 3.1 Hàm lượng giá Dữ liệu vào: 1 đỉnh P trên cây tìm kiếm. Dữ liệu ra: Giá trị Hcủa đỉnh P. int TinhH(DINH P) { Trả về giá trị h của 1 đỉnh. } 3.2 Hàm tìm kiếm void Solve() { DINH O[MAXDINH]; int nO; int Thoat; // Thoat = 1: Tìm thành công. // Thoat = 2: Tìm thất bại. // Thoat = 3: Không có lời giải. // Thoat = 0: Đang trong quá trình tìm kiếm Khởi tạo mảng đỉnh O O[0].Cot O[0].SoCot O[0].DinhTruoc = -1 O[0].TrangThai = 0 O[0]. g = 0 O[0]. h = TinhH(O[0]) nO = 1 Thoat = 0; while (Thoat == 0) { t = chỉ số đỉnh mở trong O có f (lấy g + h) nhỏ nhất. Nếu không tìm được t thì Thoat = 3 Thuật giải dừng, không có lời giải cho bài toán Đóng đỉnh O[t]. (O[t].TrangThai = 1) Gọi S1[0 k] là tập đỉnh sau O[t] không nằm trong O. Với mỗi S1[i]: i=0 k Nếu nO>MAX Thoat = 2 Thuật giải dừng, không đủ không gian để tìm lời giải. Đưa S1[i] vào O nO++ Tài liệu hướng dẫn thực hành 3 O[nO-1] ← S1[i] O[nO-1].TrangThai = 0 O[nO-1].DinhTruoc = t Nếu S1[i] là đích thì Nho = nO-1 Thoat = 1 Thuật giải dừng, thành công } Nếu Thoat = 1 Dựa vào thông tin đỉnh trước in ra các cách biến đổi Ngược lại Không tìm được lời giải } 4. Mở rộng ¾ Dùng cấu trúc dữ liệu động (danh sách liên kết). Xây dựng 1 template về danh sách liên kết, gọi là List Định nghĩa lại cấu trúc dữ liệu: typedef struct { char Dia[MAXDIA]; int SoDia; }COT; typedef struct { List <DINH> DinhSau; DINH *DinhTruoc; }CANH; typedef struct { COT Cot[MAXCOT]; int SoCot; int TrangThai; List <CANH> Canh; }DINH; List <DINH> O ¾ Tối ưu cách lưu 1 đỉnh. . liệu hướng dẫn thực hành 1 CÀI ĐẶT THUẬT TOÁN A KT CHO BÀI TOÁN THÁP HÀ NỘI 1. Thuật toán A KT Bước 1 Mởđỉnh đầu tiên S, gán g(S) = 0 Sử dụng tri thức bổ sung để ước tính hàm h(S) Tính f(S) =. = 3 Thuật giải dừng, không có lời giải cho bài toán Đóng đỉnh O[t]. (O[t].TrangThai = 1) Gọi S1[0 k] là tập đỉnh sau O[t] không nằm trong O. Với mỗi S1[i]: i=0 k Nếu nO>MAX Thoat = 2 Thuật. đỉnh. 3. Hướng dẫn cài đặt 3.1 Hàm lượng giá Dữ liệu vào: 1 đỉnh P trên cây tìm kiếm. Dữ liệu ra: Giá trị Hcủa đỉnh P. int TinhH(DINH P) { Trả về giá trị h của 1 đỉnh. } 3.2 Hàm tìm kiếm void

Ngày đăng: 20/06/2014, 19:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan