This problem is straightforward implementation of floodfill algorithm.
Code:
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 | #include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mp make_pair #define IOS ios::sync_with_stdio(false); int dx4[] = {0, 0, 1, -1}; ///direction arrays int dy4[] = {1, -1, 0, 0}; const int maxn=25; char s[maxn][maxn]; map<pair<int,int>,int>vis; int w,h; int ans; void init(){ ans=0; vis.clear(); } void bfs(int posi,int posj){ pair<int,int>x={posi,posj}; queue<pair<int,int> > q; q.push(x); vis[x]=1; while(!q.empty()){ pair<int,int>u=q.front(); q.pop(); int x=u.first; int y=u.second; for(int i=0;i<4;i++){ int nx=x+dx4[i]; int ny=y+dy4[i]; if(nx>=0 && nx<h && ny>=0 && ny<w && s[nx][ny]=='.' && vis[mp(nx,ny)]==0){ ans++; vis[mp(nx,ny)]++; q.push(mp(nx,ny)); } } } } int tc=0; ///solution void solution(){ cin>>w>>h; int posi,posj; init(); for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ cin>>s[i][j]; if(s[i][j]=='@'){ posi=i; posj=j; } } } bfs(posi,posj); cout<< "Case "<< ++tc <<": "<< ans+1 << endl; } signed main() { IOS int t; t=1; cin>>t; while(t--){ solution(); } return 0; } |
No comments:
Post a Comment
If you have any doubts, let me know through comments