深搜
2025-07-21 15:00:27
发布于:浙江
0阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int dir[8][4] = { {0, 1}, {1, 0}, {-1, 0}, {0, -1} , {-1, -1}, {1, 1}, {-1, 1}, {1, -1}};//注意是八个方位,这里要改一下
int n, m, ans;
char mp[4500][4500];
bool vis[4500][4500];
bool check(long long x, long long y) {
return x >= 1 && x <= n && y >= 1 && y <= m && mp[x][y] == 'W' && !vis[x][y];
}
void dfs(long long x, long long y) {
vis[x][y] = true; //把每个经过的水洼都标记
for (int i = 0; i < 8; i ++) {//方向数组改了这里的循环也要改一下
int tn = x + dir[i][0];
int ty = y + dir[i][1];
if (check(tn, ty)) {
vis[tn][ty] = true;
dfs(tn, ty);
}
}
}
// 其他就是最简单的深搜模板了
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= m; j ++) {
cin >> mp[i][j];
}
}
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= m; j ++) {
if (mp[i][j] == 'W' && !vis[i][j]) {//判断是否是水洼,
dfs(i, j);
ans ++;
}
}
}
cout << ans;
return 0;
}
这里空空如也
有帮助,赞一个