概述
题意:输入以16进制的矩阵,先转换成2进制,之后输出形成的图案。
思路:先处理掉无关图案的0,之后一个图案一个图案的遍历,识别图案的方法就是有多少个圈圈。找到一个就全部标记为-1。并且记录圆圈的数目。
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int gragh[1000][1000]; int dir[8][2] = {{-1,0},{0,1},{1,0},{0,-1}}; char s[100]; int n,m,ans; void change(char c,int i,int j) { if(c >= '0' && c <= '9'){ int a = c - '0'; gragh[i][(j-1)*4+4] = a%2;a /= 2; gragh[i][(j-1)*4+3] = a%2;a /= 2; gragh[i][(j-1)*4+2] = a%2;a /= 2; gragh[i][(j-1)*4+1] = a%2; } else { int a = c - 'a' + 10; gragh[i][(j-1)*4+4] = a%2;a /= 2; gragh[i][(j-1)*4+3] = a%2;a /= 2; gragh[i][(j-1)*4+2] = a%2;a /= 2; gragh[i][(j-1)*4+1] = a%2; } } void dfs1(int x,int y) { gragh[x][y] = -1; for(int i = 0;i < 4; i++){ int xx = x + dir[i][0]; int yy = y + dir[i][1]; if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && gragh[xx][yy] == 0){ dfs1(xx,yy); } } } void dfs2(int x,int y) { gragh[x][y] = -1; for(int i = 0;i < 4; i++){ int xx = x + dir[i][0]; int yy = y + dir[i][1]; if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && gragh[xx][yy] == 0){ dfs1(xx,yy); ans++; } else if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && gragh[xx][yy] == 1){ dfs2(xx,yy); } } } int main() { // freopen("in.txt","r",stdin); int ncase = 1; while(scanf("%d%d",&n,&m) != EOF){ if(n == 0 && m == 0) break; memset(gragh,0,sizeof(gragh)); memset(s,0,sizeof(s)); char c[1000]; for(int i = 1;i <= n; i++){ scanf("%s",c+1); for(int j = m;j >= 1; j--){ change(c[j],i,j); } } m *=4; for(int i = 1;i <= n; i++){ if(gragh[i][1] == 0) dfs1(i,1); if(gragh[i][m] == 0) dfs1(i,m); } for(int j = 1;j <= m; j++){ if(gragh[1][j] == 0) dfs1(1,j); if(gragh[n][j] == 0) dfs1(n,j); } int pos = 0; for(int i = 1;i <= n; i++){ for(int j = 1;j <= m; j++){ if(gragh[i][j] == 1){ ans = 0; dfs2(i,j); if(ans == 1){ s[pos++] = 'A'; } else if(ans == 3) s[pos++] = 'J'; else if(ans == 5) s[pos++] = 'D'; else if(ans == 4) s[pos++] = 'S'; else if(ans == 0) s[pos++] = 'W'; else if(ans == 2) s[pos++] = 'K'; } } } sort(s,s+pos); printf("Case %d: ",ncase++); for(int i = 0;i < pos; i++) printf("%c",s[i]); printf("n"); } return 0; }
转载于:https://www.cnblogs.com/Since-natural-ran/p/6048343.html
最后
以上就是聪慧向日葵为你收集整理的UVA1103的全部内容,希望文章能够帮你解决UVA1103所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复