首页 > 试题广场 >

ACM中的AC题

[编程题]ACM中的AC题
  • 热度指数:1598 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}众所周知,出题人没玩过《双人成行》,于是给出了如下经典二人协作版迷宫问题。孤岛被划分为 n \times m 个方格,按行从上到下、列从左到右编号为 (1,1)(n,m)。地图上的地形分为三种:
\hspace{23pt}\bullet\,平地(`.`)——可以自由经过;
\hspace{23pt}\bullet\,陷阱(`#`)——踩上去立即死亡;
\hspace{23pt}\bullet\,传送门(`@`)——一旦进入便会立刻离开孤岛。

\hspace{15pt}你与来自平行时空的另一个"你"最初同时位于坐标 (x,y) 的同一块平地。两人每次必须同时行动,且朝相反方向各移动一步,即:
\hspace{23pt}\bullet\,如果你选择向上,则另一个你必须向下;
\hspace{23pt}\bullet\,如果你选择向左,则另一个你必须向右,依此类推。

\hspace{15pt}在任何时刻,若有人走出边界或踏入陷阱,游戏立即失败;若有人到达传送门,则他会立刻离开并不再返回,之后剩下的那个人可以单独自由移动(不再受"相反方向"限制)。

\hspace{15pt}请判断是否存在一条合法的移动序列,使得两个人都能成功离开孤岛;若存在,请输出最短所需步数,否则输出 -1

输入描述:
\hspace{15pt}输入包含 n+1 行:
\hspace{23pt}\bullet\,第一行输入四个整数 n,m,x,y\left(1\leqq n,m\leqq 2\times10^{3};\ 1\leqq x\leqq n;\ 1\leqq y\leqq m\right)
\hspace{23pt}\bullet\,接下来 n 行,第 i 行输入一个长度为 m 的字符串 s_i,仅由 `.`、`#`、`@` 组成,描述第 i 行的地形。
\hspace{15pt}保证起点 (x,y) 处为平地。


输出描述:
\hspace{15pt}若存在可行方案,输出最短移动步数;否则输出 -1
示例1

输入

3 3 2 2
@.@
#..
@.@

输出

2

说明

你可以先往上后往左到达(1,1)传送门
另外一个时空的你会先下后右到达(3,3)传送门
示例2

输入

1 3 1 2
..@

输出

3
示例3

输入

3 1 2 1
#
.
@

输出

-1

说明

显然,谁都不想走到陷阱那 ...

备注:

头像 丨阿伟丨
发表于 2025-08-29 13:45:52
题目链接 双人成行 题目描述 在一个 的网格迷宫中,有平地(.)、陷阱(#)和传送门(@)。你和另一个你(记为玩家1和玩家2)同时从起点 出发。 游戏分为两个阶段: 联动阶段:你们必须同时行动,且方向相反。例如,玩家1向上移动一格,玩家2必须向下移动一格。此阶段直到其中一人到达传送门时结束。 展开全文
头像 牛客40520931号
发表于 2025-12-21 19:07:05
import java.util.ArrayDeque; import java.util.Arrays; import java.util.Deque; import java.util.HashSet; import java.util.Objects; import java.util.Sca 展开全文
头像 草海桐
发表于 2025-09-02 23:36:42
package main import ( "bufio" "fmt" "os" "strconv" "strings" ) const INF = 1e9 type Node str 展开全文
头像 牛客754921490号
发表于 2025-12-21 22:46:42
#include <iostream> #include <vector> #include <deque> using namespace std; int Min(int a, int b) { if(a < 0) { retu 展开全文
头像 冷艳的西红柿刷牛客
发表于 2025-10-29 12:52:24
#include <iostream> #include <queue> #include <algorithm> #include <cstring> using namespace std; int n, m , s_x, s_y; char c 展开全文