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("
");
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/whatbeg/p/3537223.html