uva1103
#include <iostream>
#include <cstring>
#include <cstdio>
#include <iostream>
#include <iomanip>
#include <string>
#include <cstring>
#include <cstdlib>
#include <typeinfo>
#include <sstream>
#include <iomanip>
#include <vector>
using namespace std;
const int maxn=210;//50*4,一个十六进制对应四个二进制
int n,m;
int sixteen[16][4]= {{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},
    {0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1},
    {1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1},
    {1,1,0,0},{1,1,0,1},{1,1,1,0},{1,1,1,1}
};//0到15
int pic[maxn][maxn];
int circle=0;
void DFS0(int i,int j)
{
    if(i<0||i>n+1||j<0||j>m+1||pic[i][j]!=0)
        return;
    pic[i][j]=-1;
    DFS0(i-1,j);
    DFS0(i+1,j);
    DFS0(i,j-1);
    DFS0(i,j+1);
}
void DFS1(int i,int j)
{
    if(i<0||i>n+1||j<0||j>m+1||pic[i][j]==-1)
        return;
    if(pic[i][j]==0)
    {
        circle++;
        DFS0(i,j);
        return;
    }
    pic[i][j]=-1;
    DFS1(i,j+1);
    DFS1(i,j-1);
    DFS1(i+1,j);
    DFS1(i-1,j);
}
int main()
{
    int kase=0;
    char s[maxn];
    while(cin>>n>>m&&n&&m)
    {memset(pic,0,sizeof(pic));
        kase++;
        int sum[6]= {0,0,0,0,0,0};
        for(int i=1; i<=n; i++)
        {
            int h=1;
            cin>>s;
            for(int j=0; j<m; j++)
            {int num;
                if(s[j]>='a'&&s[j]<='z')
                     num=s[j]-87;
                        else
                             num=s[j]-48;
                            pic[i][h++]=sixteen[num][0];
                            pic[i][h++]=sixteen[num][1];
                            pic[i][h++]=sixteen[num][2];
                            pic[i][h++]=sixteen[num][3];
                }
        }
        m=m*4;//转换后扩大四倍
        DFS0(0,0);//先把周边的弄成-1,孤立他们
            for(int i=1; i<=n; i++)
                for(int j=1; j<=m; j++)
                    if(pic[i][j]==1)
                    {
                        circle=0;
                        DFS1(i,j);
                         sum[circle]++;
                    }


        cout<<"Case "<<kase<<": ";
         if(sum[1]!=0)
            for(int i=0;i<sum[1];i++)
            cout<<'A';
        if(sum[5]!=0)
            for(int i=0;i<sum[5];i++)
            cout<<'D';
        if(sum[3]!=0)
            for(int i=0;i<sum[3];i++)
            cout<<'J';
        if(sum[2]!=0)
            for(int i=0;i<sum[2];i++)
            cout<<'K';
        if(sum[4]!=0)
            for(int i=0;i<sum[4];i++)
            cout<<'S';
        if(sum[0]!=0)
            for(int i=0;i<sum[0];i++)
            cout<<'W';
        cout<<endl;
    }
    return 0;
}
阅读更多
个人分类: uvj
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

uva1103

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭