Problem : [Usaco2014 Mar]Cow Ar

Problem : [Usaco2014 Mar]Cow Art

Description
一个有关奶牛的鲜为人知的事实是她们都是红绿色盲,也就是说,在她们看来,红色和绿色是一样的(译者注:奶
牛把这种颜色称作“红绿色”)。这使得我们设计的艺术作品难以同时符合人类和奶牛的审美口味。考虑一个由N
x N格字符表示的方形绘画作品,其中每个字符为R(红),G(绿)或者B(蓝)。一幅绘画如果有许多互不相同的
着色“区域”,则我们认为它是有趣的。如果两个字符是直接相邻的(一个在另一个的东、南、西、北方向)且其
表示的颜色相同,则这两个字符属于同一个区域。例如,下面这幅绘画作品:

RRRBB
GGBBB
BBBRR
BBRRR
RRRRR

如果由人类来看有4个区域(2个红色,1个蓝色和1个绿色区域),而如果由奶牛来看则只有3个区域(2个红绿色,
1个蓝色区域)。现给你一副绘画作为输入,请计算该作品由人类和奶牛来看分别有多少个区域。

Input
第1行:整数N。
第2..1+N行:每行包含一个长度为N的字符串,表示绘画作品的一行。

Output
第1行:两个空格隔开的整数,分别给出由人类和奶牛欣赏绘画作品时会看见多少个区域。

Sample Input
5
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
Sample Output
4 3

#include<bits/stdc++.h>
using namespace std;
int n,ans=0,sum=0;
int a[120][120];
bool b[120][120];
char c[120][120];
int fw[4][2]= {{0,-1},{-1,0},{0,1},{1,0}};
void find(int h,int l)
    {
    b[h][l]=false;
    for(int i=0; i<4; i++)
        {
        int x=h+fw[i][0],y=l+fw[i][1];
        if(b[x][y]==true&&a[x][y]==a[h][l]&&x>=1&&x<=n&&y>=1&&y<=n)
        find(x,y);
        }
    }
int main()
    {
    cin>>n;
    memset(b,true,sizeof(b));
    for(int i=1; i<=n; i++)      
    for(int j=1; j<=n; j++)
            {
            cin>>c[i][j];
            if(c[i][j]=='R')a[i][j]=1;
            if(c[i][j]=='B')a[i][j]=2;
            if(c[i][j]=='G')a[i][j]=3;
            }
    for(int i=1; i<=n; i++)      
    for(int j=1; j<=n; j++)       
    if(b[i][j]==true)
    {
    find(i,j);
    ans++;
    }
    memset(b,true,sizeof(b));
    for(int i=1; i<=n; i++)      
    for(int j=1; j<=n; j++)
    {
    if(a[i][j]==1||a[i][j]==3)           
    a[i][j]=4;
    }
    for(int i=1; i<=n; i++)      
    for(int j=1; j<=n; j++)       
    if(b[i][j]==true)
    {
    find(i,j);
    sum++;
    }
    cout<<ans<<" "<<sum;
    return 0;
    }

猜你喜欢

转载自blog.csdn.net/qq_41654438/article/details/81451336
今日推荐