1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
#include <bits/stdc++.h> #define FOR(i, a, b) for (int i = a; i <= b; ++i) #define ROF(i, a, b) for (int i = a; i >= b; --i) #define all(x) x.begin(),x.end() #define debug(x) cerr<<x<<' ' #define CLR(i,a) memset(i,a,sizeof(i))
using namespace std;
typedef long long ll; typedef unsigned long long ull; typedef pair<ll,ll> pll; typedef array<ll,3> arr; typedef double DB; const ll MAXN=static_cast<ll>(1e3)+10,MAXval=static_cast<ll>(5e18)+3;
ll N,M,D; char maze[MAXN][MAXN]; ll vis[MAXN][MAXN];
ll dx[4]={1,0,-1,0}; ll dy[4]={0,-1,0,1};
queue<arr> q;
inline void bfs(){ while(!q.empty()){ ll x=q.front()[0],y=q.front()[1],d=q.front()[2]; q.pop(); if(d>=D) continue; FOR(i,0,3){ ll fx=x+dx[i],fy=y+dy[i]; if(fx<1 || fx>N) continue; if(fy<1 || fy>M) continue; if(vis[fx][fy]<d+1) continue; if(maze[fx][fy]=='#') continue; vis[fx][fy]=d+1; q.push({fx,fy,d+1}); } } }
int main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin>>N>>M>>D; FOR(i, 1, N){ FOR(j,1,M){ cin>>maze[i][j]; } } CLR(vis,0x3f); ll stand=vis[0][0]; FOR(i,1,N){ FOR(j,1,M){ if(maze[i][j]!='H') continue; q.push({i,j,0}); vis[i][j]=0; } } bfs(); ll ans=0; FOR(i,1,N){ FOR(j,1,M){ if(vis[i][j]!=stand) ++ans; } } cout<<ans<<endl; return 0; }
|