题解
2025-12-13 17:01:15
发布于:上海
#include <bits/stdc++.h>
using namespace std;
int n,m,e;
struct node{
int x,y;
int step;
};
int maps[1001][1001];
int vis[1001][1001];
bool check(int x,int y){
if (x>n || x<1 || y>m || y<1){
return false;
}
return true;
}
int d[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
void bfs(int x,int y){
queue<node> q;
q.push({x,y,0});
while(q.size()){
node now=q.front();
q.pop();
for (int i=0;i<4;i++){
int nx,ny;
nx=d[i][0]+now.x;
ny=d[i][1]+now.y;
if (check(nx,ny) && maps[nx][ny]1 && now.step<e && !vis[nx][ny]){
vis[nx][ny]=1;
q.push({nx,ny,now.step+1});
}
}
}
}
int main(){
cin>>n>>m>>e;
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
char c;
cin>>c;
if (c'.'){
maps[i][j]=1;
}else if(c=='#'){
maps[i][j]=0;
}else if(c=='H'){
maps[i][j]=2;
}
}
}
int num=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(maps[i][j]==2){
bfs(i,j);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(vis[i][j] || maps[i][j]==2){
num++;
}
}
}
cout<<num;
return 0;
}
这里空空如也







有帮助,赞一个