#include<cstdio>
#include<cstring>
#include<algorithm>
#include <iostream>
using namespace std;
char map[100][100];
bool vis[100][100];
int D1[2][2]={{1,1},{-1,-1}};
int D2[2][2]={{1,-1},{-1,1}};
int n,m;
bool check(int x,int y){
if(x<0||y<0||x>=n||y>=m)return 0;
return 1;
}
void dfs1(int x,int y){
vis[x][y]=1;
int xx=x,yy=y;
while(check(xx+D1[0][0],yy+D1[0][1])){
xx+=D1[0][0];yy+=D1[0][1];
if(map[xx][yy]=='B'||map[xx][yy]=='.')break;
if(map[xx][yy]=='G')map[xx][yy]='B';
else vis[xx][yy]=1;
}
xx=x,yy=y;
while(check(xx+D1[1][0],yy+D1[1][1])){
xx+=D1[1][0];yy+=D1[1][1];
if(map[xx][yy]=='B'||map[xx][yy]=='.')break;
if(map[xx][yy]=='G')map[xx][yy]='B';
else vis[xx][yy]=1;
}
}
void dfs2(int x,int y){
vis[x][y]=1;
int xx=x,yy=y;
while(check(xx+D2[0][0],yy+D2[0][1])){
xx+=D2[0][0];yy+=D2[0][1];
if(map[xx][yy]=='R'||map[xx][yy]=='.')break;
if(map[xx][yy]=='G')map[xx][yy]='R';
else vis[xx][yy]=1;
}
xx=x,yy=y;
while(check(xx+D2[1][0],yy+D2[1][1])){
xx+=D2[1][0];yy+=D2[1][1];
if(map[xx][yy]=='R'||map[xx][yy]=='.')break;
if(map[xx][yy]=='G')map[xx][yy]='R';
else vis[xx][yy]=1;
}
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
memset(map,0,sizeof(map));
for(int i=0;i<n;i++)
scanf("%s",map[i]);
m=strlen(map[0]);
memset(vis,0,sizeof(vis));
int cnt=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(!vis[i][j]&&map[i][j]!='.'){
cnt++;
if(map[i][j]=='R'){
dfs1(i,j);
}
else if(map[i][j]=='B'){
dfs2(i,j);
}
else if(map[i][j]=='G'){
cnt++;
dfs1(i,j);dfs2(i,j);
}
}
}
}
printf("%d\n",cnt);
}
return 0;
}
hdu 5319 Painter(15多校第三场1004)
最新推荐文章于 2018-06-18 10:34:00 发布