2015多校联合训练第三场Painter(hdu5319)

来源:互联网 发布:淘宝助理水印图片大小 编辑:程序博客网 时间:2024/05/22 04:42

要注意的地方就是并不是n*n的矩阵,列要单独求
dfs一下

#include <bits/stdc++.h>#define LL long longusing namespace std;const int MAXN = 1e6;int n,m;char mp[60][60];int ans;void dfs_R(int x , int y){   if(x >= 0 && x < n && y >= 0 && y < m && (mp[x][y] == 'R' || mp[x][y] == 'G'))   {       if(mp[x][y] == 'G') mp[x][y] = 'B';       else mp[x][y] = '.';       dfs_R(x-1,y-1);       dfs_R(x+1,y+1);   }   return;}void dfs_B(int x, int y){   if(x >= 0 && x < n && y >= 0 && y < m && (mp[x][y] == 'B' || mp[x][y] == 'G'))   {        if(mp[x][y] == 'G') mp[x][y] = 'R';        else mp[x][y] = '.';       dfs_B(x+1,y-1);       dfs_B(x-1,y+1);   }   return;}int main(){#ifdef xxz    //freopen("out.txt","w",stdout);    freopen("in.txt","r",stdin);#endif // xxz    int T;    scanf("%d",&T);    while(T--)    {        scanf("%d",&n);        for(int i = 0; i < n; i++)            scanf("%s",mp[i]);        int ans = 0;        m = strlen(mp[0]);        for(int i = 0; i < n; i++)        {            for(int j = 0; j < m; j++)            {                if(mp[i][j] == 'R')                {                    dfs_R(i,j);                    ans++;                }                else if(mp[i][j] == 'B')                {                    dfs_B(i,j);                    ans++;                }                else if(mp[i][j] == 'G')                {                    dfs_R(i,j);                    mp[i][j] = 'B';                    dfs_B(i,j);                    ans += 2;                }            }        }        printf("%d\n",ans);    }    return 0;}
0 0