八方向可用两个循环实现
对于迷宫这种题目 下标可用pair来存
自然的做法是bfs,当然也可以dfs做(见收藏
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;//得在第4行下面。。
const int N = 1010;
bool st[N][N];
int n,m,ans;
char g[N][N];
queue<PII> q;
void bfs(int sx, int sy)
{
st[sx][sy] = true;
q.push({ sx,sy });
while (q.size())
{
PII t = q.front();
q.pop();
for (int i = t.x - 1;i <= t.x + 1;i++)
for (int j = t.y - 1;j <= t.y + 1;j++)
{//八个方向把中间那个特判
if (i ==t.x&& j==t.y) continue;
if (i < 0 || i >= n || j < 0 || j >= m) continue;
if (!st[i][j] && g[i][j] == 'W')
{
q.push({ i,j });
st[i][j] = true;
}
}
}
}
int main()
{
cin >> n >> m;
for (int i = 0;i < n;i++) cin >> g[i];
for(int i=0;i<n;i++)
for (int j = 0;j < m;j++)
if (!st[i][j]&&g[i][j]=='W')
{
bfs(i, j);
ans++;
}
cout << ans;
}