我是靠谱客的博主 顺利纸飞机,最近开发中收集的这篇文章主要介绍uva 1103 - Ancient Messages(象!形!文!字! dfs遍历计数),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
我今天做的这叫什么题……
今天这个题直接跪了,一看十六进制直接懵了。。
然后在csdn上竟然发现了身边直系学长写的解题报告,然后问了一下解题的思路。然后写出来的代码,想要测试数据吗吧哈哈
给一组最基本的~
5 3
fff
f0f
fff
f0f
fff
输出应该是K
AC代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,cnt;
const int maxn = 210;
int g[maxn][maxn];
int num[6];
char st[6] = {'A', 'D', 'J', 'K', 'S', 'W'};
char str[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
int s[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}
};
bool is_in(int x,int y)
{
if(x>=0&&x<=n+1&&y>=0&&y<=m+1)
return true;
else return false;
}
void dfs(int x,int y)
{
if(!is_in(x,y)||g[x][y]!=0)
return;
g[x][y]=-1;
dfs(x-1,y);
dfs(x+1,y);
dfs(x,y-1);
dfs(x,y+1);
}
void dfs2(int x,int y)
{
if(!is_in(x,y)||g[x][y]==-1)
return;
if(g[x][y]==0)
{
cnt++;
dfs(x,y);
return;
}
g[x][y]=-1;
dfs2(x-1,y);
dfs2(x+1,y);
dfs2(x,y-1);
dfs2(x,y+1);
}
int main()
{
int kase=0;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0) break;
kase++;
memset(g, 0, sizeof(g));
memset(num, 0, sizeof(num));
for(int i=1;i<=n;i++)
{
getchar();
char ch;
int len=1;
for(int j=0;j<m;j++)
{
scanf("%c",&ch);
for(int k=0;k<16;k++)
{
if(ch==str[k])
{
for(int l=0;l<4;l++)
g[i][len++]=s[k][l];
break;
}
}
}
}
m=m*4;
dfs(0,0);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(g[i][j]==1)
{
cnt=0;
dfs2(i,j);
if(cnt==0) num[5]++;
if(cnt==1) num[0]++;
if(cnt==2) num[3]++;
if(cnt==3) num[2]++;
if(cnt==4) num[4]++;
if(cnt==5) num[1]++;
}
}
}
printf("Case %d: ",kase);
for(int i=0;i<6;i++)
{
printf(" %d ",num[i]);
while(num[i]--)
{
printf("%c",st[i]);
}
}
printf("n");
}
}
最后
以上就是顺利纸飞机为你收集整理的uva 1103 - Ancient Messages(象!形!文!字! dfs遍历计数)的全部内容,希望文章能够帮你解决uva 1103 - Ancient Messages(象!形!文!字! dfs遍历计数)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复