提交时间:2024-04-26 13:12:57
运行 ID: 144687
#include<bits/stdc++.h> using namespace std; int n,used[110][110],m,a[110][110],bx[4]={0,0,1,-1},by[4]={1,-1,0,0},sum; char c[110][110]; struct point{ int x,y,now; }; struct p{ int x,y; }; vector<p> path; bool check(int x,int y,int t){ if(x<1 || x>n || y<1 || y>n)return 0; if(used[x][y]==1 && t>=a[x][y] || used[x][y]==-1)return 0; return 1; } void bfs(int tx,int ty){ queue<point> q; q.push({tx,ty,0}); while(!q.empty()){ point t; t=q.front(); q.pop(); for(int i=0;i<4;i++){ int xx=t.x+bx[i],yy=t.y+by[i]; if(check(xx,yy,t.now+1)==1){ used[xx][yy]=1; a[xx][yy]=t.now+1; if(t.now+1!=m)q.push({xx,yy,t.now+1}); } } } return; } int main(){ cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ cin>>c[i][j]; if(c[i][j]=='@'){ path.push_back({i,j}); used[i][j]=1; sum++; } else if(c[i][j]=='#'){ used[i][j]=-1; a[i][j]=INT_MAX; } } cin>>m; for(int i=0;i<path.size();i++)bfs(path[i].x,path[i].y); for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(a[i][j]!=INT_MAX && a[i][j]!=0)sum++; cout<<sum; return 0; }