题目描述
机器猫被困在一个矩形迷宫里。
迷宫可以视为一个 n*m 矩阵,每个位置要么是空地,要么是墙。机器猫只能从一个空地走到其上、下、左、右的空地。
机器猫初始时位于 (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) 和 (n, m) 均为空地。
Code
#include<bits/stdc++.h>
using namespace std;
int n , m;
char a[150][150];
bool v[150][150];
int dx[4] = {0 , 1 , 0 , -1};
int dy[4] = {1 , 0 , -1 , 0};
int pd(int x, int y){
if(x >= 1 && x <= n && y >= 1 && y <= m) return 1;
return 0;
}
void dfs(int x , int y){
if(x == n && y == m){
cout << "Yes" << endl;
exit(0);
}
for(int i = 0;i < 4; i ++){
int tx = x + dx[i] , ty = y + dy[i];
if(!v[tx][ty] && pd(tx , ty) && a[tx][ty] = '.'){
v[tx][ty]= 1;
dfs(tx , ty);
}
}
}
int main(){
cin >> n >> m;
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; j ++)
cin >> a[i][j];
v[1][1] = 1;
dfs(1, 1);
cout << "No" << endl;
return 0;
}