题意 在矩阵里走迷宫,和普通迷宫不同的是,走过的路变为墙,且终点是墙的时候才算抵达。
思路 就是广搜,和普通迷宫几乎一样..
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <list>
#include <map>
#include <cstdlib>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
const double pi = acos(-1.0);
typedef pair<int,int> pii;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
const int maxn = 600;
int n,m;
char ch[maxn][maxn];
queue<pii> q;
pii d[4];
int main(){
pii s,t;
d[0].fi = -1;
d[0].se = 0;
d[1].fi = 1;
d[1].se = 0;
d[2].fi = 0;
d[2].se = -1;
d[3].fi = 0;
d[3].se = 1;
scanf("%d%d",&n,&m);
getchar();
for(int i=0;i<n;i++){
gets(ch[i]);
}
scanf("%d%d%d%d",&s.fi,&s.se,&t.fi,&t.se);
s.fi--;
s.se--;
t.fi--;
t.se--;
q.push(s);
bool flag = 0;
while(q.size()>0){
pii tmp = q.front();
q.pop();
for(int i=0;i<4;i++){
if(tmp.fi+d[i].fi>=0&&tmp.fi+d[i].fi<n&&tmp.se
+d[i].se>=0&&tmp.se+d[i].se<m)
{
int x = tmp.fi+d[i].fi;
int y = tmp.se+d[i].se;
if(x==t.fi&&y==t.se&&ch[x][y]=='X'){
flag = 1;
break;
}
if(ch[x][y] == 'X')
continue;
ch[x][y] = 'X';
q.push(mp(x,y));
}
}
if(flag == 1)
break;
}
while(q.size()>0)
q.pop();
if(flag)
puts("YES");
else
puts("NO");
return 0;
}