题目连接:点击打开链接
题目大意:
R代表“\”,B代表“/”,G代表“\”,“/”,两种;
给你一个地图,“."不能画,
1.如果一个点是R(x,y),他的右下角(x+1,y+1)如果还是R那么可以一起画,直到不是R为止,这属于一笔;
2. 如果一个点是B(x,y),他的左下角(x+1,y+1)如果还是B那么可以一起画,直到不是R为止,这属于一笔;
3.如果在画的过程中遇到G,无论是B还是R都能画过;
4.重点,图的行数已经给你,但列数不确定;
#include<stdio.h>
#include<string.h>
char map[1000][60];
int n,m;
void sheny(int x,int y)//遇到R,深搜
{
if(map[x][y]=='.'||map[x][y]=='B'||x>=n||y>=m)//遇到这种情况终止
return ;
if(map[x][y]=='G')//如果是G,就改为B
map[x][y]='B';
else //否则改为“.”
map[x][y]='.';
sheny(x+1,y+1);
}
void shenz(int x,int y)//遇到B,深搜,与上述相同
{
if(map[x][y]=='.'||map[x][y]=='R'||x>=n||y<0)
return ;
if(map[x][y]=='G')
map[x][y]='R';
else
map[x][y]='.';
shenz(x+1,y-1);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int i,j;
scanf("%d",&n);
memset(map,0,sizeof(map));
for(i=0; i<n; i++)
{
scanf("%s",map[i]);
m=strlen(map[i]);//记录列数
}
int sum=0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(map[i][j]!='.')
{
sum++;
if(map[i][j]=='R')
sheny(i,j);
if(map[i][j]=='G')
{
sheny(i,j);
sum++;
shenz(i,j);
}
if(map[i][j]=='B')
shenz(i,j);
}
}
}
printf("%d\n",sum);
}
return 0;
}