HDU 2487 Ugly Windows

递归求解,代码不太好看,是2013年7月写的

 

代码:

#include<stdio.h>

#include<iostream>

#include<string.h>

#include<algorithm>

#include<math.h>



using namespace std;



char s[102][102];

int flag[26];

int res[28];

int tag1[27];



int zong,heng;

int tag;

int n,m;





int zhao(int qix,int qiy,int zhx,int zhy)

{

    int fff=0;

    for(int i=qix;i<zhx;i++)

        {

            for(int j=qiy;j<zhy;j++)

            {

                if(s[i][j]=='.')

                    continue;

                flag[s[i][j]-'A']=1000;

                int ny;

                for(ny=j;ny<zhy;ny++)

                {

                    if(s[i][ny]!=s[i][j])

                         break;

                }

                heng=ny-1;

                int nx;

                for(nx=i;nx<zhx;nx++)

                {

                    if(s[nx][j]!=s[i][j])

                        break;

                }

                zong=nx-1;

                int cnt=0;

                tag=0;

                if(zong!=i&&heng!=j&&zong-i>=2&&heng-j>=2)

                {

                    for(ny=j;ny<=heng;ny++)

                    {

                        if(s[zong][ny]==s[i][j])

                            cnt++;

                        else 

                            break;

                    }

                        if(cnt==heng-j+1)

                        {

                            cnt=0;

                            for(nx=i;nx<=zong;nx++)

                            {

                                if(s[nx][heng]==s[i][j])

                                    cnt++;

                                else

                                    break;

                            }

                            if(cnt==zong-i+1)

                                    tag=1;

                            else

                                tag=0;

                        }

                        if(tag)

                        {

                            tag1[s[i][j]-'A']++;

                            fff=1;

                            if(zhao(i+1,j+1,zong,heng)==1)

                            {

                                if(tag1[s[i][j]-'A']!=2)

                                    tag1[s[i][j]-'A']=0;

                            }

                            

                        }

                }                

                else

                    tag1[s[i][j]]=0;

            }

        }

    return fff;

}



int main()

{

    

    while(scanf("%d%d",&n,&m)!=EOF)

    {

        memset(flag,0,sizeof(flag));

        memset(tag1,0,sizeof(tag1));

        int i;

        if(n==0&&m==0)

            break;

        for(i=0;i<n;i++)

            scanf("%s",s[i]);

        zhao(0,0,n,m);

        

        int cn=0;

        for(i=0;i<26;i++)

        {

            if(tag1[i])

                res[cn++]=i;

        }

            sort(res,res+cn);

            for(i=0;i<cn;i++)

                printf("%c",res[i]+'A');

            printf("\n");

    }

    return 0;

}
View Code

 

你可能感兴趣的:(windows)