Hướng dẫn giải của Đẩy Hộp
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Lời giải: Push a Box
Nhận xét quan trọng
Nếu theo dõi cả vị trí của Bessie lẫn vị trí của hộp, không gian trạng thái sẽ là — quá lớn với .
Nhận thấy rằng vị trí chính xác của Bessie không quan trọng, chỉ cần biết Bessie đang ở phía nào của hộp (trên, dưới, trái, phải). Do đó, trạng thái được rút gọn thành: (vị trí hộp, hướng Bessie tiếp cận hộp) — chỉ trạng thái.
Thuật toán
Bước 1: Xây dựng đồ thị thành phần liên thông song (Biconnected Components)
Trước khi thực hiện BFS trên trạng thái (hộp, hướng), cần trả lời các câu hỏi:
Nếu hộp đang ở ô , Bessie có thể đi từ phía sang phía của hộp mà không di chuyển hộp không?
Đây tương đương với: có đường đi trong lưới (bỏ ô ) từ ô kề theo hướng đến ô kề theo hướng không?
Sử dụng biconnected components (thành phần liên thông song): nếu hai đỉnh thuộc cùng một biconnected component, thì có đường đi giữa chúng không đi qua bất kỳ đỉnh khớp nào — nghĩa là có thể đi vòng quanh mà không cần đi qua đỉnh bị chặn.
Cụ thể: với mỗi ô trong lưới, xây dựng BCC của đồ thị các ô trống (không kể ô ). Hai phía của hộp có thể chuyển đổi khi Bessie đi vòng nếu hai ô kề đó thuộc cùng một BCC — điều này trả lời được trong sau tiền xử lý .
Bước 2: BFS trên không gian trạng thái
Trạng thái: — hộp ở , Bessie tiếp cận từ hướng (Bắc, Nam, Tây, Đông).
Từ trạng thái :
- Đẩy hộp: Bessie đẩy hộp theo hướng đối diện với . Hộp dịch sang ô mới ; Bessie tiếp cận hộp từ hướng (giờ cô ở vị trí cũ của hộp). Chuyển trạng thái: .
- Đi vòng quanh hộp: Không đẩy hộp, Bessie chuyển sang phía của hộp. Được phép khi hai ô kề tương ứng thuộc cùng BCC (sau khi bỏ ô ). Chuyển trạng thái: .
Thực hiện BFS từ trạng thái ban đầu: hộp ở vị trí B, hướng Bessie tiếp cận tương ứng với vị trí A.
Bước 3: Trả lời truy vấn
Sau BFS, ô có thể đạt được nếu tồn tại ít nhất một hướng sao cho trạng thái đã được thăm.
Độ phức tạp
- Tiền xử lý BCC:
- BFS: trạng thái, mỗi trạng thái xử lý
- Trả lời truy vấn: mỗi truy vấn
- Tổng:
Bình luận