#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;//the crystal mazechar map[505][505];bool vis[505][505];int dir[4][2]={ {0,1}, {0,-1}, {1,0}, {-1,0}};int ans,n,m,x1[505*505],y1[505*505],top,an[505][505];void dfs(int x,int y){ vis[x][y]=1; if(map[x][y]=='C') ans++; x1[top]=x,y1[top++]=y; for(int i=0;i<4;i++) { int nx=x+dir[i][0]; int ny=y+dir[i][1]; if(nx>=0&&nx<n&&ny>=0&&ny<m&&!vis[nx][ny]&&map[nx][ny]!='#') dfs(nx,ny); }}int main(){ int ca,cas=1,q; cin>>ca; while(ca--) { scanf("%d%d%d",&n,&m,&q); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) cin>>map[i][j]; //scanf("%c",&map[i][j]); } memset(vis,0,sizeof(vis)); memset(an,-1,sizeof(an)); //优化: an[x][y] 表示以(x,y)为7点的答案,初始化为-1, //如果:an[x][y]!=-1,则表示已经计算过了,直接输出即可 int x,y; PRintf("Case %d:/n",cas++); while(q--) { scanf("%d%d",&x,&y); if(an[x-1][y-1]==-1) { top=0, ans=0, dfs(x-1,y-1); } for(int r=0;r<top;r++) an[x1[r]][y1[r]]=ans; printf("%d/n",an[x-1][y-1]); } } return 0;}
新闻热点
疑难解答