trang chủ / đề bài / gr05_keys

Chìa khóa và cửa

Đề bài

Mô tả

Một robot đứng ở ô S của bản đồ n hàng, m cột và cần đến ô T. Các ký tự trên bản đồ:

  • . là ô trống, # là tường, S và T cũng là ô trống;
  • chữ thường a đến f là ô có chìa khóa: khi robot bước vào ô này, nó nhặt chìa và giữ mãi mãi (chìa không mất đi khi mở cửa);
  • chữ hoa A đến F là cửa: robot chỉ được bước vào ô cửa A nếu đang giữ chìa a, tương tự với các chữ khác.

Mỗi bước robot đi sang một ô chung cạnh (lên, xuống, trái, phải), không ra khỏi bản đồ và không vào tường. Hãy tìm số bước ít nhất để robot đến T, hoặc in −1 nếu không thể.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên n,m.
  • n dòng tiếp theo, mỗi dòng là một xâu độ dài m gồm các ký tự đã mô tả. Có đúng một S và đúng một T.

Dữ liệu ra

In một số nguyên: số bước ít nhất, hoặc −1.

Ràng buộc

  • 1≤n,m≤60, n·m≥2
  • Mỗi loại chìa và mỗi loại cửa có thể xuất hiện nhiều lần hoặc không xuất hiện.

Ví dụ

Input Output Giải thích
5 7
S..A..T
.#####.
.#b..B.
.###.#.
a....#.
14 Đi xuống 4 bước lấy chìa a, quay lên S thêm 4 bước, rồi đi sang phải qua cửa A thêm 6 bước. Đường qua chìa b và cửa B dài hơn.
3 6
S.a#..
##B#..
...A.T
-1 Lấy được chìa a nhưng muốn đến cửa A phải đi qua cửa B, mà không có chìa b.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0