一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由 �×�n×n 的格点组成,每个格点只有 22 种状态, 00 和 11,前者表示可以通行后者表示不能通行。
同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点 �A 走到点 �B ,问在不走出迷宫的情况下能不能办到。
如果起点或者终点有一个不能通行(为 11),则看成无法办到。
输入
第 11 行是一个正整数 n (1≤n≤100),表示迷宫的规模是 �×�n×n 的。
接下来是一个n×n 的矩阵,矩阵中的元素为 00 或者 11。
再接下来一行是 4 个整数halahblb,描述 �A 处在第 ℎ�ha 行 第 ��la 列,�B 处在第hb 行 第lb 列。
输出
能办到则输出 YES
,否则输出 NO
。
#include<bits/stdc++.h>
using namespace std;
bool a[110][110];
int n;
int ha,la,hb,lb;
void dfs(int ha,int la,int hb,int lb){
a[ha][la]=1;
if(ha==hb&&la==lb){
cout<<"YES";
exit(0);
}else{
if(la+1<=n&&!a[ha][la+1]){
dfs(ha,la+1,hb,lb);
}
if(ha+1<=n&&!a[ha+1][la]){
dfs(ha+1,la,hb,lb);
}
if(la-1>=1&&!a[ha][la-1]){
dfs(ha,la-1,hb,lb);
}
if(ha-1>=1&&!a[ha-1][la]){
dfs(ha-1,la,hb,lb);
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
cin>>ha>>la>>hb>>lb;
if(a[ha][la]||a[hb][lb]){
cout<<"NO";
return 0;
}
dfs(ha,la,hb,lb);
cout<<"NO";
return 0;
}