Escape Maze

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1400 Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Bạn được cho một bảng kích thước \(n \times m\). Mỗi ô trên bảng chứa một trong các ký tự sau:

  • .: ô trống.
  • #: tường.
  • a\(–\)f: chìa khóa.
  • A\(–\)F: cửa bị khóa.

Người chơi có thể di chuyển sang một trong bốn ô kề cạnh (lên, xuống, trái, phải) và không được đi vào tường. Để đi qua cửa A, người chơi phải thu thập được chìa khóa a; tương tự với các cặp B\(–\)b\(, ...,\) F\(–\)f.

Hãy xác định số bước đi ít nhất để đi từ điểm \((1, 1)\) đến điểm \((n, m)\) (dữ liệu luôn đảm bảo điểm bắt đầu và kết thúc là ô trống). Nếu không thể đến được đích, hãy in ra \(-1\).

Input

  • Dòng đầu tiên chứa hai số nguyên \(n, m\) (\(1 \le n, m \le 100\)).
  • \(n\) dòng tiếp theo, mỗi dòng chứa một xâu độ dài \(m\) mô tả bảng.

Output

  • In ra một số nguyên duy nhất là số bước đi ít nhất để đi từ điểm \((1, 1)\) đến điểm \((n, m)\). Nếu không tồn tại đường đi hợp lệ, in ra \(-1\).

Example

Test 1

Input
5 6
....#.
##Aa#.
.#.#..
......
......
Output
11
Note

Một cách di chuyển tối ưu là RRRRDLDDRRR

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.