HDU 5319 Painter

来源:互联网 发布:园林绿化施工网络 编辑:程序博客网 时间:2024/06/03 21:23

题目地址:点击打开链接

思路:先求要要画多少条红线,再求画多少条蓝线

AC代码:

#include<iostream>#include<cstring>using namespace std;char a[55][55];int m,n;bool check(int x,int y){    if(x>=0 && x<m && y>=0 && y<n)        return true;    return false;}void dfs1(int x,int y){    if(a[x][y] == 'R')        a[x][y] = '.';    else if(a[x][y] == 'G')        a[x][y] = 'B';    x += 1;    y += 1;    if(check(x,y) && (a[x][y] == 'R' || a[x][y] == 'G'))//有可能是一个点,所以要加或者G,不加会错误       dfs1(x,y);}void dfs2(int x,int y){    a[x][y] = '.';    x += 1;    y -= 1;    if(check(x,y) && (a[x][y] == 'B'))       dfs2(x,y);}int main(){    int i,j,t,sum;    cin>>t;    while(t--)    {        sum = 0;        cin>>m;        for(i=0; i<m; i++)        {            cin>>a[i];        }        n = strlen(a[0]);        for(i=0; i<m; i++)        {            for(j=0; j<n; j++)            {                if(a[i][j] == 'R' || a[i][j] == 'G')                {                    dfs1(i,j);                    sum++;                }            }        }        for(i=0; i<m; i++)        {            for(j=0; j<n; j++)            {                if(a[i][j] == 'B')                {                    dfs2(i,j);                    sum++;                }            }        }        cout<<sum<<endl;    }    return 0;}



0 0
原创粉丝点击