Hướng dẫn bài BTFLOWER - Khăn đỏ và bó hoa tặng bà

Trùm CUỐI 2020-04-12 15:02:45

Đây là một dạng bài toán tìm đường đi trên lưới ô vông. Bài này có thể giải bằng Quy hoạch động hoặc Duyệt quay lui

Thuật toán Duyệt quay lui:

  • Ta có nhận xét: Mỗi đường đi từ ô xuất phát đến ô đích đều đi qua đúng M + N - 1 ô vuông. Đặt K = M + N - 1 thì ta có:
  • Mỗi đường đi từ ô xuất phát đến ô đích là một dãy các ô vuông (1,1)=(r_1, c_1)\rightarrow(r_2,c_2)\rightarrow\ldots\rightarrow(r_K,c_K)=(M,N) , trong đó:
    • 1\le r_i\le M, 1\le c_i\le N ;
    • Ô (r_i,c_i) không có sói;
    • \left\{ \begin{array}{l}{r_{i + 1}} = {r_i}\\{c_{i + 1}} = {c_i} + 1\end{array} \right. hoặc \left\{ \begin{array}{l}{r_{i + 1}} = {r_i} + 1\\{c_{i + 1}} = {c_i}\end{array} \right. .

Ta dễ dàng cài đặt thủ tục Backtracking để duyệt qua tất cả các đường đi từ ô xuất phát đến ô đích, với mỗi đường đi tìm được, ta tính tổng các số trên các ô đi qua và cập nhật phương án tốt nhất.