提交时间:2024-01-21 19:05:14

运行 ID: 121444

#include <bits/stdc++.h> using namespace std; string a[105]; int dis[105][105]; bool vis[105][105]; struct node{ int x,y; }; int main(){ for(int i = 0;i<105;i++){ for(int j = 0;j<105;j++) dis[i][j] = 200; } int n,m; cin>>n; queue<node>que; for(int i = 0;i<n;i++){ cin>>a[i]; for(int j = 0;j<n;j++){ if(a[i][j]=='@') { que.push({i,j}); dis[i][j] = 0; vis[i][j] = true; } } } cin>>m; int dx[4] = {0,1,-1,0}; int dy[4] = {1,0,0,-1}; while(!que.empty()){ int cx = que.front().x; int cy = que.front().y; int cd = dis[cx][cy]; que.pop(); for(int i = 0;i<4;i++){ int nx = cx+dx[i]; int ny = cy+dy[i]; if(nx<0||nx>=n||ny<0||ny>=n||vis[nx][ny]||a[nx][ny]=='#') continue; que.push({nx,ny}); vis[nx][ny] = true; dis[nx][ny] = cd+1; } } int cnt = 0; for(int i = 0;i<n;i++){ for(int j = 0;j<n;j++){ if(dis[i][j]<m){ cnt++; } } } cout<<cnt<<endl; return 0; }