uva 1103 dfs

来源:互联网 发布:中国人名大学网络教育 编辑:程序博客网 时间:2024/04/30 12:09
#include<bits/stdc++.h>using namespace std;const int maxn= 210;const int flagnum[6]={1,5,3,2,4,0};const string tochar= "WAKJSD";int n,m,inp,cnt[6],ct,kase=0;char C;bool graph[maxn][maxn],vis[maxn][maxn];void dfs(int x,int y,bool first){    if(!(x>=0&&x<=n+1&&y>=0&&y<=m+1)||vis[x][y]) return;    if(first&&graph[x][y]) return;    if(!first&&!graph[x][y]) {++ct;dfs(x,y,1);return;}    vis[x][y]=1;    dfs(x,y+1,first);    dfs(x+1,y,first);    dfs(x,y-1,first);    dfs(x-1,y,first);    return;}int main(){    while(cin>>n>>m&&n&&m)    {        memset(graph,0,sizeof(graph));        memset(vis,0,sizeof(vis));        memset(cnt,0,sizeof(cnt));        for(int i=1;i<=n;i++)            for(int j=1;j<=m;j++)        {            cin>>C;            inp=(C>58?C-97+10:C-48);            for(int k=3;k>=0;k--)                graph[i][j*4-k]=inp&(1<<k);        }        m*=4;        dfs(0,0,1);        for(int i=0;i<=n;i++)            for(int j=0;j<=m;j++)            if(graph[i][j]&&!vis[i][j])                {ct=0;dfs(i,j,0);++cnt[ct];}        cout<<"Case "<<++kase<<": ";        for(int i=0;i<6;i++)            {                while(cnt[flagnum[i]]-->0)                    cout<<tochar[flagnum[i]];            }            cout<<endl;    }}

codeblocks有bug 无限输入,我用的是13.12 

0 0
原创粉丝点击