/*先将字母读入二维数组。 然后用四个while实现环形数组的输出。 保险的方法可先将数组周围一圈用特殊元素标记,然后移动的时候只需判断是否扫描到特殊元素, 是则拐向,然后将已经走过的元素也标记为这一特殊元素,防止数组越界。 先判断方向,再移动。*/ #include <iostream> #include <cstring> #include <stdio.h> using namespace std; int main() { int r,c,n,t; char a[100]; int b[23][23]; int z[5]; int h[450]; cin >> n; int e=1; while(n--) { cin >> r >> c; getchar(); gets(a); int g=0; for(int i=0; i<strlen(a); i++) { if(a[i]==' ') { for(int j=0; j<5; j++) z[j]=0; } else { int p=a[i]-'A'+1; for(int j=0;j<5;j++) { z[j]=p%2; p=p/2; } } for(int j=4;j>=0;j--) h[g++]=z[j]; } for(;g<=r*c;g++) h[g]=0; for(int i =0;i<=r+1;i++) { for(int j=0;j<=c+1;j++) { b[i][j]=2; } } for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) { b[i][j]=3; } } int i,j; i=j=1; t=1; b[1][1]=h[0]; while(1) { while(b[i][j+1]==3) { b[i][++j]=h[t++]; } while(b[i+1][j]==3) { b[++i][j]=h[t++]; } while(b[i][j-1]==3) { b[i][--j]=h[t++]; } while(b[i-1][j]==3) { b[--i][j]=h[t++]; } if(b[i-1][j]!=3&&b[i][j-1]!=3&&b[i][j+1]!=3&&b[i+1][j]!=3) break; } cout << e << " "; for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) { cout << b[i][j]; } } cout << endl; e++; } return 0; }
hoj encoding 搜索化的模拟
最新推荐文章于 2016-11-23 22:41:24 发布