#icpc2016autumnb. [icpc2016autumn_b]Help the Princess!
[icpc2016autumn_b]Help the Princess!
问题描述
某个王国的人民起义反抗公主的恶政。革命军队入侵了公主所住的皇宫。军队的士兵正在探索皇宫,以捉拿公主。你的任务是编写一个程序来判断公主是否可以逃离皇宫。
为了简单起见,皇宫的地面是一个被网格划分的矩形。网格中有两种类型的单元格:一种是士兵和公主可以进入的单元格,另一种是士兵或公主不能进入的单元格。我们称前者为空单元格,后者为墙。公主和士兵最初位于不同的空单元格中。网格中只有一个逃生口。如果公主到达逃生口,她就可以逃离皇宫。皇宫中可能有一个或多个士兵。
公主和所有士兵在每个单位时间内同时采取行动。换句话说,公主和士兵必须在不知道其他人下一步行动的情况下决定自己的行动。在每个单位时间内,公主和士兵可以移动到水平或垂直相邻的单元格,或者停留在当前单元格。此外,公主和士兵不能离开皇宫的地面。如果公主和一个或多个士兵在移动后位于同一个单元格中,那么公主将被捉住。如果从皇宫中移除所有士兵,保证公主只能通过空单元格到达逃生口。
如果存在一条公主可以逃脱士兵的路线,即使士兵采取任何行动,那么公主就可以逃离士兵。注意,如果公主和士兵同时到达逃生口,公主将被捉住。公主能否逃离皇宫?
输入
每个数据集的格式如下所示。
:
:
数据集的第一行包含两个正整数 和 ,由空格分隔,其中 是网格的高度, 是网格的宽度。()
接下来的 行中的第 行给出了一个字符串 ,表示皇宫地面的情况。
是长度为 的字符串, 的第 个字符表示第 行和第 列单元格的状态。
'@', '$', '%', '.', 和 '#' 分别代表公主、士兵、逃生口、空单元格和墙。保证网格中只有一个 '@',只有一个 '%',至少有一个或多个 '$'。
输出
输出一行,包含一个单词 "Yes",如果公主可以逃离皇宫,则输出 "Yes"。否则,输出 "No"。
示例输入 1
2 4
%.@$
..$$```
### 示例输出 1
```plain
Yes```
---
### 示例输入 2
```plain
3 4
.%..
.##.
.@$.```
### 示例输出 2
```plain
Yes```
---
### 示例输入 3
```plain
2 3
%$@
###```
### 示例输出 3
```plain
No```
---
### 示例输入 4
```plain
2 3
@#$
.%.```
### 示例输出 4
```plain
No```
---
### 示例输入 5
```plain
2 2
@%
..```
### 示例输出 5
```plain
Yes```