HDU 4414 Finding crosses

来源:互联网 发布:linux命令退出find 编辑:程序博客网 时间:2024/05/17 06:53

题意:给出一个图,让你找到所有的十字。

思路:简单的模拟题。枚举中心,查找十字就行了。

代码如下:

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<vector>#include<cmath>#include<iostream>#include<vector>using namespace std;char m[55][55];int n;int ans=0;int l=0;bool solve(int x,int y,int num){    bool fa=true;    l=0;    if(num==0)    {        while(x>0&&m[x][y]=='#')        {            x--;            if(m[x][y]=='#')            {                if(m[x][y-1]=='#' || m[x][y+1]=='#')                {                    return false;                }                else l++;            }        }    }    if(num==1)    {        while(y<n&&m[x][y]=='#')        {            y++;            if(m[x][y]=='#')            {                if(m[x-1][y]=='#' || m[x+1][y]=='#')                {                    return false;                }                else l++;            }        }    }    if(num==2)    {        while(x<n&&m[x][y]=='#')        {            x++;            if(m[x][y]=='#')            {                if(m[x][y-1]=='#' || m[x][y+1]=='#')                {                    return false;                }                else l++;            }        }    }    if(num==3)    {        while(y>0 &&m[x][y]=='#')        {            y--;            if(m[x][y]=='#')            {                if(m[x-1][y]=='#' || m[x+1][y]=='#')                {                    return false;                }                else l++;            }        }    }    return true;}int main(){    //freopen("in","r",stdin);    while(scanf("%d",&n)&&n)    {        int i,j,k;        bool f=true;        ans=0;        getchar();        for(i=0;i<n;i++)        scanf("%s",m[i]);        int mark;        for(i=1;i<n-1;i++)            for(j=1;j<n-1;j++)            {                if(m[i][j]=='#')                {                    f=true;                    mark=0;                    for(k=0;k<4 &&f;k++)                    {                        f=solve(i,j,k);                        //if(!f) printf(" %d %d %d\n",i,j,k);                        if(k==0) mark=l;                        else if(mark!=l) f=false;                    }                }                if(f && mark!=0 && m[i][j]=='#') ans++;            }            printf("%d\n",ans);    }    return 0;}

0 0
原创粉丝点击