PDA

View Full Version : Làm sao để làm tốt những bài kiểu đệ quy quay lui



huyx
06-12-2008, 22:21
Các bác có thể chia sẻ kinh nghiệm làm sao để mà suy nghĩ được những bài toán kiểu đệ quy quay lui như bài 8 con hậu và mã đi tuần.

Em làm những thuật toán khác thì ko sao, nghĩ tí là ra, nhưng ko hiểu tại sao cứ động đến đệ quy quay lui là chóng hết cả mặt.

dragon43
14-12-2008, 18:22
Cau dung tay debug thu mot chuong trinh dequi don gian roi se hieu co che no chay the nao.Theo toi de hieu 1 bai de qui cau xac dinh dc cac van de sau:
Vd bai toan tim chinh hop chap 3 thoa man co 3 phan tu giong nhau
Ban chat cua de qui: Ket qua cua cac bai toan de qui la mot so cay trang thai thoa man 1 dieu kien nao do trong tat ca cac cay cua mien tim kiem.

Bước 1: Xac dinh cau truc du lieu(cau truc du lieu cho thấy sự mô tả kết quả thể hiện trên máy tính hay trên thực tế sao cho dễ hiểu nhất)
Ở đây tôi chọn cau truc du lieu la 1 bộ số dạng cay co 3 so nguyen.
Bước 2:Xác định miền tìm kiếm (Là tất cả các kết quả có thể)
-> Miền tìm kiếm là 27 kết quả:
(1-1-1), (1-1-2), (1-1-3),(1-2-1),(1-2-2),(1,2,3), (1-3-1),(1,3,2),(1,3,3),
(2-1-1), (2-1-2), (2-1-3),(2-2-1),(2-2-2),(2,2,3), (2-3-1),(2,3,2),(2,3,3),
(3-1-1), (3-1-2), (3-1-3),(3-2-1),(3-2-2),(3,2,3), (3-3-1),(3,3,2),(3,3,3)
Bước 3: Mô tả việc tìm kiếm: hãy tưởng tượng bạn đang đi trong một mê cung. Bạn có một sợi dây, sợi dây cho phép bạn có thể quay về bước trước đó mình đã rẽ để có thể đi hướng khác nếu hướng hiện tại bạn đi không thành công.VD: bạn đang ở trạng thái tìm kiếm (2-1-1), ko thành công, bạn sẽ trở về trạng thái 2-1- để rẽ sang nhánh khác là 2-1-2, 2-1-3.
->Sẽ mô tả như sau: a[n] là sợi dây. n là trạng thái trung gian (n=3 là đến đích và cần kiểm tra kq), A[n] nhận các giá trị (i=1 or 2 or 3) là các đường đi.
Bước 4: Xác định điểm dừng: Khi đi đến đích(n=3) và a[1]=a[2]=a[3], kết quả cụ thể đó là các sợi dây 3 nút: (1-1-1),(2-2-2),(3-3-3)

Cuối cùng bài toán chúng ta cần mô tả như sau:

void Tim(n)
{
for i=1 to 3
{
a[n]=i;
if n=3 then //kiem tra dieu kien dung
{
if a[1]=a[2]=a[3] then PrintResult() //tim thay
}
else Tim(n+1)
} //end for
}

Bài lần sau: mô tả bài toán con hậu theo tư duy sợi dây như thế này

hellokitty889
28-12-2008, 19:15
GOOD Writing! This is a recreation of the previous combat formula thread. In this thread, This formula is not exact, but it does have a very high accuracy. Our goal is to improve it so that it becomes exact. runescape money (http://www.runescapemoney.ws) can help you calculate your level, for any combination of combat skills you like. Wallpaper containing something that appears to be an estimate of the combat formula cheap runescape gold (http://www.runescapecoin.net/). Our data suggests that it is not the actual formula, ms mesos (http://www.buymaplestorymesos.net/) but it does seem to confirm bits of our formula. Feel free to discuss it here in this thread Want to buy rs gold (http://www.rsgold.info/) pls check it~~keep working!