题目描述
机器猫被困在一个矩形迷宫里。
迷宫可以视为一个 n×m 矩阵,每个位置要么是空地,要么是墙。机器猫只能从一个空地走到其上、下、左、右的空地。
机器猫初始时位于 (1,1)(1,1) 的位置,问能否走到 (n,m) 位置。
输入格式
第一行,两个正整数 n,m。
接下来 n 行,输入这个迷宫。每行输入一个长为m 的字符串,#
表示墙,.
表示空地。
输出格式
仅一行,一个字符串。如果机器猫能走到(n,m),则输出 Yes
;否则输出 No
。
输入输出样例
输入 #1
3 5 .##.# .#... ...#.
输出 #1
Yes
说明/提示
样例解释
路线如下:(1,1)→(2,1)→(3,1)→(3,2)→(3,3)→(2,3)→(2,4)→(2,5)→(3,5)
数据规模与约定
对于 100% 的数据,保证 1≤n,m≤100,且 (1,1)(1,1) 和 (n,m) 均为空地。
代码:
#include<bits/stdc++.h>
using namespace std;
//定义方向数组
int fx[5]={0,0,1,0,-1};
int fy[5]={0,1,0,-1,0};
//定义变量
char a[200][200];
int q[40000][5];
int head=1,tail=1,tx,ty,n,m;
int main(){
//输入数据
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
//手动模拟队列
q[1][1]=1;
q[1][2]=1;
a[1][1]='#';
while(head<=tail){
for(int i=1;i<=4;i++){//四个方向
//取值
tx=q[head][1]+fx[i];
ty=q[head][2]+fy[i];
//判断这一个地方是否能走
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&a[tx][ty]!='#'){
a[tx][ty]='#';
tail++;
q[tail][1]=tx;
q[tail][2]=ty;
if(tx==n&&ty==m){//走出来了
cout<<"Yes";
return 0;
}
}
}
head++;
}
cout<<"No";//无法走出来
return 0;
}