Giấc mơ của Bessie
Đề bài
Mô tả
Cho mê cung ô, mỗi ô có một màu:
- Đỏ (0): Không thể đi vào.
- Hồng (1): Đi vào bình thường.
- Cam (2): Đi vào bình thường; khi đi vào ô cam thì có "mùi cam" và giữ mùi này cho đến khi bị trượt trên ô tím.
- Xanh (3): Chỉ đi vào được nếu đang có mùi cam. Đi vào ô xanh không làm mất mùi cam.
- Tím (4): Khi đi vào ô tím thì bị trượt theo đúng hướng vừa đi.
Bắt đầu ở ô (góc trên trái), cần đến ô (góc dưới phải). Mỗi lần di chuyển sang một ô kề cạnh (trên, dưới, trái, phải) tính là bước.
Quy tắc trượt trên ô tím:
- Ngay khi đi vào một ô tím thì mất mùi cam (nếu đang có), và không thể dừng lại: phải đi tiếp sang ô kế tiếp theo đúng hướng đang đi. Mỗi ô trượt qua cũng tính là bước.
- Cú trượt kết thúc khi ô kế tiếp theo hướng đó không phải ô tím. Nếu ô đó đi vào được thì bước vào ô đó rồi dừng; nếu ô đó không đi vào được (ra ngoài mê cung, ô đỏ, hoặc ô xanh trong khi không có mùi cam) thì dừng ngay trên ô tím cuối cùng.
- Sau khi dừng thì lại được chọn hướng đi tùy ý như bình thường.
Hãy tìm số bước ít nhất để đến ô . Nếu không thể đến được, in .
Dữ liệu vào
- Dòng đầu: hai số nguyên và .
- dòng tiếp theo: mỗi dòng số nguyên từ đến mô tả màu các ô.
Dữ liệu ra
Một số nguyên duy nhất: số bước ít nhất, hoặc nếu không đến được.
Ràng buộc
- Ô và ô luôn là hồng (1).
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 4 4 1 0 2 1 1 1 4 1 1 0 4 0 1 3 1 1 |
10 | Đi xuống cột tới mất bước nhưng ô là xanh nên chưa qua được. Phải đi lấy mùi cam ở ô rồi vòng xuống, tổng cộng bước. |
| 2 7 1 4 4 1 1 4 0 2 0 2 1 3 4 1 |
7 | Sang phải vào ô tím , trượt qua rồi dừng ở : bước. Đi tiếp tới : bước. Vào ô tím , ô kế tiếp là đỏ nên dừng ngay trên : bước. Đi xuống ô tím , trượt tiếp thì ra ngoài mê cung nên dừng tại đó: bước. Cuối cùng sang : bước. |
Bình luận