测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A41762. 逃离迷宫你在一个地下迷宫中找到了宝藏,但是也触发了迷宫机关,导致迷宫将在T分钟后坍塌,为此你需要在T分钟内逃离迷宫,你想知道你能不能逃离迷宫。迷宫是一个边长为m的正方形,其中"S"表示你所在的位置,"E"表示迷宫出口,"."是可以随意走动的区域,"#"是不可穿行的墙壁,每次你可以耗费1分钟在区域间移动(上下左右四个方向)。输入输入包含多组数组,第一行是一个整数K(1 <= K <= 10),表示…

填空题 困难

题目描述

逃离迷宫

你在一个地下迷宫中找到了宝藏,但是也触发了迷宫机关,导致迷宫将在T分钟后坍塌,为此你需要在T分钟内逃离迷宫,你想知道你能不能逃离迷宫。迷宫是一个边长为m的正方形,其中"S"表示你所在的位置,"E"表示迷宫出口,"."是可以随意走动的区域,"#"是不可穿行的墙壁,每次你可以耗费1分钟在区域间移动(上下左右四个方向)。

输入

输入包含多组数组,第一行是一个整数K(1 <= K <= 10),表示有K组数据。接下来每组数组包含整数m(2<=m<=10)和整数T,m表示正方形迷宫的边长,T表示坍塌时间。其后是一个m*m的字符矩阵,包含字符"S", "E", "."和"#"。

输出

每组数据输出一行,输出“YES"或者"NO",表示是否可以在坍塌之前逃离(也就是说移动次数是否可以不超过T)。

样例输入

2

4 7 

S...

###.

.#E.

..#.    

3 4

S..

..#

.#E

样例输出

YES

NO

参考答案

//示例代码 没找到原始测试数据 代码仅供参考 #include <bits/stdc++.h> using namespace std; char map_[12][12]; int x[4]={-1,1,0,0}; int y[4]={0,0,-1,1}; int k,m,t,sign; void dfs(int a,int b,int n){ if(n>t) return; for(int i=0;i<4;i++){ int aa=a+x[i]; int bb=b+y[i]; if(aa>=1&&aa<=m&&bb>=1&&bb<=m){ if(map_[aa][bb]=='.'){ map_[aa][bb]='#'; dfs(aa,bb,n+1); map_[aa][bb]='.'; } else if(map_[aa][bb]=='E'){ sign=1;return; } } } } int main() { int x1,y1; cin>>k; while(k--){ cin>>m>>t; for(int i=1;i<=m;i++) for(int j=1;j<=m;j++){ cin>>map_[i][j]; if(map_[i][j]=='S'){ x1=i;y1=j; } } sign=0; dfs(x1,y1,0); if(sign) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
上一题 下一题