CodeForces 1182B Plus from Picture

题目链接:点击这里

题意:

给出一个n*m的图形判断这个图形中是否只有一个+的图案。首先找到一个小十字,然后把他相关的行和列连接的*都变成.

最后再遍历一遍,只要是团只剩下.就对。

AC代码:

#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
using namespace std;
int i,j,k,l;
int ans,cnt;
char a[510][510];
int n,m,x,y,c,b;
bool flag1;
int move1[5]={0,0,1,-1};
int move2[5]={1,-1,0,0};
void dfs(int x,int y)
{
    cnt=0;
    for(int i=0; i<4; i++)
    {
        int nx=x+move1[i];
        int ny=y+move2[i];
        if(nx>0&&ny>0&&nx<=n&&ny<=m&&a[nx][ny]=='*')
        {
            cnt++;
        }
    }
    return ;
}
int main()
{
    while(~scanf("%d %d",&n,&m))
    {
        for(i=1; i<=n; i++)
            for(j=1; j<=m; j++)
                cin>>a[i][j];
        flag1=1;
        bool flag2=0;
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=m; j++)
            {
                if(a[i][j]=='*')
                {
                    dfs(i,j);
                    if(cnt==4)
                    {
                        a[i][j]='.';
                        flag2=1;
                        for(k=i-1;k>0;k--)
                        {
                            if(a[k][j]=='*')
                                a[k][j]='.';
                              else
                             break;
                        }
                       for(k=i+1;k<=n;k++)
                        {
                            if(a[k][j]=='*')
                                a[k][j]='.';
                            else
                             break;
                        }
                        for(k=j+1;k<=m;k++)
                        {
                            if(a[i][k]=='*')
                                a[i][k]='.';
                            else
                             break;
                        }
                        for(k=j-1;k>0;k--)
                        {
                            if(a[i][k]=='*')
                                a[i][k]='.';
                            else
                             break;
                        }
                        break;
                    }
                }
            }
        }
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
              //cout<

 

你可能感兴趣的:(CodeForces)