思路:对这个图直接模拟即可,如果点i,j坐标为红色,那么判断上一个路径点是否是红色,如果是则不加,所以最后求出的flag即是解,一开是以为是n*n的矩形,(/ □ \),都怪坑爹的实例。。
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int main()
{
int T,i,j,flag,n;
char Map[60][60];
scanf("%d",&T);
while(T--)
{
flag = 0;
scanf("%d",&n);
for(i=1; i<=n; i++)
//for(j=1; j<=n; j++)
scanf("%s",Map[i]);
for(i=1; i<=n; i++)
for(j=0; j<strlen(Map[1]); j++)
{
if((Map[i][j]=='R'||Map[i][j]=='G')&&!(Map[i-1][j-1]=='R'||Map[i-1][j-1]=='G'))
flag++;
if((Map[i][j]=='B'||Map[i][j]=='G')&&!(Map[i-1][j+1]=='B'||Map[i-1][j+1]=='G'))
flag++;
}
printf("%d\n",flag);
}
return 0;
}