Đảo Chiều Trọng Lực

Đề bài

Mô tả

Cho một lưới ô vuông N×M gồm các ký tự: . (ô trống), # (tường), C (vị trí xuất phát), D (vị trí đích).

Trong lưới có tác dụng của trọng lực: ban đầu trọng lực hướng xuống dưới. Nhân vật sẽ rơi theo chiều trọng lực hiện tại cho đến khi chạm vào tường hoặc biên lưới. Nếu nhân vật rơi ra ngoài biên lưới, nhiệm vụ thất bại.

Khi đang đứng trên một bề mặt (tường hoặc biên), nhân vật có thể:

  • Di chuyển sang trái hoặc phải (sang ô trống kề cạnh), sau đó sẽ rơi lại theo trọng lực hiện tại.
  • Đảo chiều trọng lực: trọng lực đổi chiều (từ xuống thành lên, hoặc ngược lại), sau đó nhân vật rơi theo chiều mới.

Tìm số lần đảo chiều trọng lực tối thiểu để đưa nhân vật từ C đến D.

Dữ liệu vào

  • Dòng 1: Hai số nguyên NM.
  • N dòng tiếp theo: Mỗi dòng gồm M ký tự mô tả lưới.

Dữ liệu ra

Một số nguyên duy nhất: số lần đảo chiều trọng lực tối thiểu, hoặc 1 nếu không thể đến được đích.

Ràng buộc

  • 1N,M500

Ví dụ

Input Output Giải thích
5 5
#####
#...#
#...D
#C...
##.##
3 Nhân vật đảo trọng lực lên, rơi lên trên, di chuyển sang phải, đảo lại, rơi xuống, di chuyển sang phải, đảo một lần nữa để đến D.
3 11
#..C###.#..
#.D.#.#.#..
###.###.###
-1 Không thể đến được D.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0