UVa1103古代象形符号
来源:互联网 发布:inso网络 编辑:程序博客网 时间:2024/05/02 06:11
分析:这个题如果看透了他难度可以降低非常大的一部分,但如果看不透,那这个题会难的让人无奈。真是醉了,这
个题的重点在于每个图形的洞数,说得对。就是洞数,这是这几个符号唯一的差异,因为每个图形的洞数都不同。但
是尽管知道了他们的特征这个题还是有难度的,一组测试数组不知包括一个字母,这即使寻洞也不好找,还记得有这
样一个题,就是拯救总部的那个,模拟洪水从四周入侵,之后看看那几个建筑未被遍历;这个题有同样的思路
首先把把黑点周围的所有空白标记,那么现在所存的空白便只能在洞里;之后遍历每个黑色点,寻找它所包含的洞数
首先把把黑点周围的所有空白标记,那么现在所存的空白便只能在洞里;之后遍历每个黑色点,寻找它所包含的洞数
即可。
说到底,DFS,连通块应用,只是改变了一下情景,让题目更繁琐。
说到底,DFS,连通块应用,只是改变了一下情景,让题目更繁琐。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#define maxn 210
using namespace std;
int g[maxn][maxn];
int n,m,cnt;
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;
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);
}
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#define maxn 210
using namespace std;
int g[maxn][maxn];
int n,m,cnt;
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;
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])
{
dfs(x,y);
cnt++;
return;
}
g[x][y]=-1;
dfs2(x+1,y);
dfs2(x-1,y);
dfs2(x,y-1);
dfs2(x,y+1);
}
{
if(!is_in(x,y)||g[x][y]==-1)
return;
if(!g[x][y])
{
dfs(x,y);
cnt++;
return;
}
g[x][y]=-1;
dfs2(x+1,y);
dfs2(x-1,y);
dfs2(x,y-1);
dfs2(x,y+1);
}
int main()
{
int ca=1;
while(scanf("%d%d",&n,&m) == 2&&n+m)
{
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*=4;
dfs(0,0);//标记周围
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(g[i][j]==1)
{
cnt=0;
dfs2(i,j);//遍历连通块
if(!cnt) num[5]++;
else if(cnt==1) num[0]++;
else if(cnt==2) num[3]++;
else if(cnt==3) num[2]++;
else if(cnt==4) num[4]++;
else num[1]++;
}
printf("Case %d: ",ca++);
for(int i=0;i<6;i++)
while(num[i]--)
printf("%c",st[i]);
puts("");
}
return 0;
}
{
int ca=1;
while(scanf("%d%d",&n,&m) == 2&&n+m)
{
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*=4;
dfs(0,0);//标记周围
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(g[i][j]==1)
{
cnt=0;
dfs2(i,j);//遍历连通块
if(!cnt) num[5]++;
else if(cnt==1) num[0]++;
else if(cnt==2) num[3]++;
else if(cnt==3) num[2]++;
else if(cnt==4) num[4]++;
else num[1]++;
}
printf("Case %d: ",ca++);
for(int i=0;i<6;i++)
while(num[i]--)
printf("%c",st[i]);
puts("");
}
return 0;
}
1 0
- UVa1103古代象形符号
- 例题6-13 古代象形符号 UVa1103
- 例题6-13 古代象形符号 UVa1103
- uva1103 古代象形文字
- 例题6-13 古代象形符号(Ancient Messages, World Finals 2011, UVa 1103)
- UVA 1103 象形符号
- uva1103
- 例题6-13 UVA 1103 Ancient Messages 古老象形符号
- UVa1103 - Ancient Messages
- UVA1103 || hdu3839 (Ancient Messages)
- uva1103 Ancient Messages
- 象形法记忆英语单词
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第三讲:html符号实体、超链接
- uva1103 Ancient Messages(dfs)
- Echarts象形图简单示例
- 古代名人
- 古代成语故事
- 古代部分
- 在Android中操作XML数据-读取与解析XML数据/生成与输出XML数据
- document 获得元素节点,属性节点,文本节点。
- 求C++数据结构二叉树的宽度
- 数据库连接操作
- CodeForces 507E Breaking Good 最短路
- UVa1103古代象形符号
- 线程问题
- zzulioj 1817: match number (条件判断)
- sphinx(coreseek)在linux上的安装
- C# implementation of dynamic hand gesture recognition
- java入门学习需要知道的准备知识
- MySQL5.6 GTID新特性实践
- ORACLE用户管理
- VS2010 vs2012的目录包含