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 (90.33 KB, 9 trang )
Đệ qui quay lui và phương pháp nhánh cận
Trần Đình Hưng
Bàitoán "Tháp Hà Nội" là một bài toán cơ bản của thuật toán đệ qui. Bài toán phátbiểu đơn
giản như sau: Cho 3 cọc A, B, C, cọc A chứa N đĩa với qui tắc trên nhỏdưới to, mỗi lần
chuyển chỉ được chuyển 1 đĩa từ cọc này sang 1 trong 2 cọc cònlại và giữ nguyên trật tự to
nhỏ, hãy đưa ra 1 cách chuyển N đĩa từ AC. Trong bài toán này ta có thể xử lí một cách dễ
dàng qua 3 lời gọi đệqui:
Procedure Chuyen(N, A, B, C: Byte);
Begin
If N=1 Then Write(Chr(A+64 ),' =>',Chr(C+64))
Else
Begin
Chuyen(N-1,A,B,C);
Chuyen(1,A,C,B);
Chuyen(N-1,B,C,A);
end;
End;
Chươngtrình chính chỉ cần gọi: Chuyen(N,1,3,2);
Tuynhiên vấn đề đặt ra ở đây rắc rối hơn: Cho 3 cọc A, B, C xếp trên 1 vòng trònlần lượt
là A, B, C chỉ được chuyển theo chiều kim đồng hồ A =>B=>C=>A.
Chúngta sẽ giải quyết bài toán bằng hai thủ tục đệ qui và thủ tục này gọi thủ tụckia thông
qua từ khoá Forward của Turbo Pascal.
Tư tưởng thuật toán như sau: Để chuyển N đĩa từ A sang Cta chuyển N-1 đĩa từ A sang C
với thủ tụcChuyen2, chuyển 1 đĩa từ A sang B (Chuyen1),chuyển N-1 đĩa từ C sang A
(Chuyen1),chuyển 1 đĩa từ B sang C (Chuyen1),chuyển N-1 đĩa từ A sang C (Chuyen2).
Nhưvậy có hai thủ tục: Chuyển A sang C và chuyển C sang A.
Dữliệu ra được ghi trong file text "Kq.dat".
Vídụ: A => B
B => C
...
Cấutrúc file rất đơn giản để tiết kiệm không gian đĩa, khi cho số đĩa chuyển lớn.