Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- char a[502][502];
- int vis[502][502];
- bool dom[501][501];
- int n,m,q;
- int dx[4]={0,1,0,-1};int dy[4]={1,0,-1,0};
- bool check(int x,int y)
- {
- if(x>=0&&x<n&&y>=0&&y<m){
- if(a[x][y]=='#')return 0;
- return 1;}
- else return 0;
- }
- int dfs(int x,int y,int pax,int pay)
- {
- if(!check(x,y))return 0;
- if(vis[x][y]!=-1)return vis[x][y];
- if(dom[x][y])return 0;
- dom[x][y]=1;
- //cout<<x<<' '<<y<<endl;
- int ans=(bool)(a[x][y]=='C');
- for(int i=0;i<4;i++)
- {
- int nx,ny;
- nx=x+dx[i];
- ny=y+dy[i];
- if(check(nx,ny))
- {
- if(nx==pax&&ny==pay)continue;
- ans+=dfs(nx,ny,x,y);
- }
- }
- return ans;
- }
- void dfsset(int x,int y,int pax,int pay,int m)
- {
- //cout<<x<<' '<<y<<'\n';
- if(vis[x][y]!=-1)return;
- vis[x][y]=m;
- for(int i=0;i<4;i++)
- {
- int nx,ny;
- nx=x+dx[i];
- ny=y+dy[i];
- if(check(nx,ny))
- {
- if(nx==pax&&ny==pay)continue;
- dfsset(nx,ny,x,y,m);
- }
- }
- return ;
- }
- int main()
- {
- //freopen("out.txt","w",stdout);
- int t;cin>>t;
- int b=1;
- while (t--)
- {
- memset(dom,0,sizeof dom);
- memset(vis,-1,sizeof vis);
- cin>>n>>m>>q;
- for(int i=0;i<n;i++)
- for(int j=0;j<m;j++)cin>>a[i][j];
- cout<<"Case "<<b<<":"<<endl;
- b++;
- while(q--)
- {
- int x,y;
- cin>>x>>y;
- int ss=dfs(x-1,y-1,n,n);
- cout<<ss<<endl;
- dfsset(x-1,y-1,n,n,ss);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement