题解
2026-07-19 17:57:35
发布于:浙江
3阅读
0回复
0点赞
dfs递归,3个数组,vis存是否被找过,dx、dy反向数组,a存地图
代码AC后点个赞吧!
参考代码:
#include <bits/stdc++.h>
using namespace std;
int n,m,cnt = 1;
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
char a[25][25];
bool vis[25][25] = {0};
void dfs(int x,int y){
int nx,ny;
vis[x][y] = true;
for (int l = 0;l < 4;l++){
nx = x + dx[l];
ny = y + dy[l];
if (nx > n || ny < 1 || ny > m || nx < 1 || vis[nx][ny] || a[nx][ny] == '#') continue;
cnt++;
dfs(nx,ny);
}
}
int main(){
cin >> m >> n;
for (int i = 1;i <= n;i++){
for (int j = 1;j <= m;j++){
cin >> a[i][j];
}
}
for (int i = 1;i <= n;i++){
for (int j = 1;j <= m;j++){
if (a[i][j] == '@'){
a[i][j] = '.';
dfs(i,j);
cout << cnt;
}
}
}
return 0;
}
这里空空如也






有帮助,赞一个