dfs简单路径搜索
- #include
- using namespace std;
- #define rep(i,a,n) for(int i = a;i
- #define per(i,a,n) for(int i = n-1;i>=a;i--)
- #define pb push_back
- #define mp make_pair
- #define eb emplace_back
- #define all(x) (x).begin(),(x).end()
- #define fi first
- #define se second
- #define SZ(x) ((int)(x).size())
- #define yes cout<<"YES"<<'\n';
- #define no cout<<"NO"<<'\n';
- #define endl '\n';
- #define R register
- typedef vector<int> VI;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef pair<int,int> PII;
- typedef double db;
- mt19937 mrand(random_device{}());
- const ll MOD=1000000007;
- int rnd(int x) {return mrand() % x;}
- ll gcd(ll a,ll b){return b?gcd(b,a%b):a;};
- ll lcm(int a,int b){return a*b/gcd(a,b);};
-
- int dx[4]={0,0,-1,1};
- int dy[4]={-1,1,0,0};
- int n;
- string g[110];
- int vis[110][110];
-
- int a,b,c,d;
-
- bool dfs(int x,int y){
- if(x<0||x>=n||y<0||y>=n||vis[x][y]||g[x][y]=='#') return 0;
- vis[x][y]=1;
- if(x==c&&y==d) return 1;
- rep(i,0,4){
- if(dfs(x+dx[i],y+dy[i])) return 1;
- }
- return 0;
- }
-
- int main(){
- ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- int T;
- cin>>T;
- while(T--){
- cin>>n;
- rep(i,0,n) cin>>g[i];
- memset(vis,0,sizeof vis);
- cin>>a>>b>>c>>d;
- if(dfs(a,b)) puts("YES");
- else puts("NO");
- }
- return 0;
- }