文章目录
- 迷宫
- 红与黑
一、迷宫OJ链接
本题思路:DFS直接搜即可。
#include <iostream>
#include <cstring>
#include <algorithm>constexpr int N=110;int n;
char g[N][N];
bool st[N][N];
int x1, y1, x2, y2;int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};bool dfs(int x,int y)
{if(x==x2&&y==y2) return true;st[x][y]=true;if(g[x][y]=='#') return false;for(int i=0;i<4;i++){int a=x+dx[i],b=y+dy[i];if(st[a][b]) continue;if(a<0||a>=n||b<0||b>=n) continue;if(dfs(a,b)) return true;}return false;
}
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int T;std::cin>>T;while(T--){std::cin>>n;for(int i=0;i<n;i++) std::cin>>g[i];memset(st,0,sizeof st);std::cin>>x1>>y1>>x2>>y2;if(g[x1][y1]=='#'||g[x2][y2]=='#'){std::cout<<"NO"<<std::endl;continue;}if(dfs(x1,y1)) std::cout<<"YES"<<std::endl;else std::cout<<"NO"<<std::endl;}return 0;
}
二、红与黑OJ链接
本题思路:类似于岛屿问题。
#include <bits/stdc++.h>constexpr int N=25;int n,m;
char g[N][N];
bool st[N][N];int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};int dfs(int x,int y)
{int cnt=1;st[x][y]=true;for(int i=0;i<4;i++){int a=x+dx[i],b=y+dy[i];if (a < 0 || a >= n || b < 0 || b >= m) continue;if (g[a][b] != '.') continue;if (st[a][b]) continue;cnt+=dfs(a,b);}return cnt;
}int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);while(std::cin>>m>>n,m||n){for(int i=0;i<n;i++) std::cin>>g[i];int x,y;for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(g[i][j]=='@'){x=i;y=j;}memset(st, 0, sizeof st);std::cout<<dfs(x,y)<<std::endl;}return 0;
}