← Tất cả kỹ thuật chơi

Kỹ thuật chơi · Water Jug

Thuật toán BFS và ƯCLN (GCD) trong bài toán Đong Nước

Đong được đúng T lít khi và chỉ khi T là bội của ƯCLN hai bình; BFS tìm chuỗi thao tác ngắn nhất.

🎮 Chơi Water Jug ngay →

Khái niệm

Bài toán đong nước: hai bình dung tích A và B (lít), không vạch chia; chỉ được đổ đầy, đổ cạn, hoặc rót từ bình này sang bình kia tới khi đầy/cạn. Hỏi làm sao đo được đúng T lít.

Điều kiện có lời giải: T phải là bội của ƯCLN(A, B) và T ≤ max(A, B). Thuật giải dùng BFS trên các trạng thái (lượng nước của hai bình) để tìm chuỗi thao tác ngắn nhất, tránh lặp trạng thái.

Ví dụ

Hai bình 5 lít và 3 lít, cần đo 4 lít: ƯCLN(5, 3) = 1 nên đo được. Một chuỗi: đổ đầy 5 → rót sang 3 (còn 2) → đổ cạn 3 → rót 2 sang 3 → đổ đầy 5 → rót sang 3 (đang có 2, chỉ nhận thêm 1) → bình 5 còn đúng 4 lít.

BFS cho chuỗi thao tác ngắn nhất và loại bỏ các trạng thái đã gặp để không đi vòng.

5L3L43
Hai bình 5L và 3L: đổ đầy và rót qua lại để đo đúng 4 lít

Minh hoạ động

5L3L43
Bình 5L còn đúng 4 lít (nhấp nháy) sau chuỗi thao tác BFS

Bài tập thực hành

Hai bình 5 lít và 3 lít. Có thể đo được đúng 4 lít không? Vì sao?

Điểm mấu chốt

Đong nước giải được khi T là bội của ƯCLN hai bình; BFS cho chuỗi thao tác ngắn nhất.

🎮 Chơi Water Jug ngay →