1***********1934********************************
2-----------------------------------------------
3#include<iostream>
4#define Max 30
5using namespace std;
6int M[Max][Max];
7int R,C;
8char code[1000];
9struct node{
10 int x,y;
11 void operator=(node a)
12 {x=a.x;y=a.y;}
13};node start;
14node direct[4];
15void init()
16{
17 direct[0].x=0;direct[0].y=1;//right
18 direct[1].x=1;direct[1].y=0;//down
19 direct[2].x=0;direct[2].y=-1;//left
20 direct[3].x=-1;direct[3].y=0;//up
21}
22int setl(char c,int d)//d表示方向
23{
24 int t,b[5],i=0,j;
25 int p,q;//放置的位置
26 memset(b,0,sizeof(b));
27 if(c!=' '){
28 t=c-'A'+1;
29 while(t>0){
30 b[i++]=t%2;
31 t/=2;}
32 }
33 for(i=d,j=4;j>=0;){
34 p=direct[i].x+start.x;
35 q=direct[i].y+start.y;
36 if(p<0||p>=R){i=(i+1)%4;continue;}
37 if(q<0||q>=C){i=(i+1)%4;continue;}
38 if(M[p][q]!=-1){i=(i+1)%4;continue;}
39 M[p][q]=b[j--];
40 start.x=p;
41 start.y=q;
42 }
43 return i;
44}
45void solve()
46{
47 int i,j,d=0;
48 for(i=0;code[i]!='\0';i++)
49 d=setl(code[i],d);
50 for(i=0;i<R;i++)
51 for(j=0;j<C;j++){
52 if(M[i][j]==-1)M[i][j]=0;
53 printf("%d",M[i][j]);}
54 printf("\n");
55}
56int main()
57{
58 /*freopen("1.ans","w",stdout);*/
59 int N,i,j;
60 char c;
61 init();
62 scanf("%d",&N);
63 for(i=1;i<=N;i++){
64 memset(M,-1,sizeof(M));
65 memset(code,0,sizeof(code));
66 start.x=0;start.y=-1;
67 scanf("%d %d",&R,&C);
68 getchar();
69 for(j=0;(c=getchar())!='\n';j++)
70 code[j]=c;
71 printf("%d ",i);
72 solve();}
73 return 0;
74}
1******************************1935************************************************************
2#include<iostream>
3#define Max 21
4using namespace std;
5int M[Max][Max];
6int R,C,d=0;//d表示方向
7char code[90];
8struct node{
9 int x,y;
10 void operator=(node a){
11 x=a.x;
12 y=a.y;}
13};
14node start;
15node direct[4];
16void init()
17{
18 direct[0].x=0;direct[0].y=1;//right
19 direct[1].x=1;direct[1].y=0;//down
20 direct[2].x=0;direct[2].y=-1;//left
21 direct[3].x=-1;direct[3].y=0;//up
22}
23int get()
24{
25 int p,q,n=0;
26 int result=0;
27 for(;n<5;){
28 p=start.x+direct[d].x;
29 q=start.y+direct[d].y;
30 if(p<0||p>=R){d=(d+1)%4;continue;}
31 if(q<0||q>=C){d=(d+1)%4;continue;}
32 if(M[p][q]==-1){d=(d+1)%4;continue;}
33 n++;
34 start.x=p;
35 start.y=q;
36 result*=2;
37 result+=M[p][q];
38 M[p][q]=-1;}
39 return result;
40}
41void solve(int h)
42{
43 int t,i,j=-1;
44 for(i=0;i<h;i++){
45 t=get();
46 if(t==0)code[i]=' ';
47 else {
48 code[i]='A'+t-1;
49 j=i;}
50 }
51 for(i=0;i<=j;i++)
52 putchar(code[i]);
53
54}
55int main()
56{
57 /*freopen("1935#1.in","r",stdin);
58 freopen("1935#3.out","w",stdout);*/
59 int N,i,j,k,tmp;
60 char c;
61 scanf("%d",&N);
62 getchar();
63 init();
64 for(i=1;i<=N;i++){
65 start.x=0;
66 start.y=-1;
67 scanf("%d %d",&R,&C);
68 tmp=(R*C)/5;
69 memset(M,0,sizeof(M));
70 getchar();
71 for(j=0;j<R;j++)
72 for(k=0;k<C;k++){
73 c=getchar();
74 M[j][k]=c-'0';
75 }
76 getchar();
77 printf("%d ",i);
78 solve(tmp);
79 putchar('\n');
80 }
81 return 0;
82}
posted on 2008-03-09 14:05
zoyi 阅读(227)
评论(1) 编辑 收藏 引用 所属分类:
acm