poj 1835 宇航员 模拟题

写的时候思路很清晰,以面对的方向和它的右边为标准,这样写24个方向出来,不过代码量太大了,后来看了别人的思路后,原来可以写的这么简短!

不过还是纪念下自己这个又臭又长的代码吧..

View Code
#include <stdio.h>
#define x1 0
#define y1 1
#define z1 2
#define x2 3
#define y2 4
#define z2 5

int x,y,z,a,b,m;
char str[10];

void h()
{
if(a>=3)m=-m;
if(a==0||a==3)x+=m;
if(a==1||a==4)y+=m;
if(a==2||a==5)z+=m;
}

int g()
{
if(str[0]=='l')return 0;
else if(str[0]=='r')return 1;
else if(str[0]=='u')return 2;
else if(str[0]=='d')return 3;
else if(str[0]=='f')return 4;
else if(str[0]=='b')return 5;
}

void X1Y1()
{
int c;
int ar[7][2]={{y2,x1},{y1,x2},{z1,y1},{z2,y1},{x1,y1},{x2,y2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
};

void X1Z1()
{
int c;
int ar[7][2]={{z2,x1},{z1,x2},{y2,z1},{y1,z1},{x1,z1},{x2,z2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
};

void X1Y2()
{
int c;
int ar[7][2]={{y1,x1},{y2,x2},{z2,y2},{z1,y2},{x1,y2},{x2,y1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void X1Z2()
{
int c;
int ar[7][2]={{z1,x1},{z2,x2},{y1,z2},{y2,z2},{x1,z2},{x2,z1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y1X1()//
{
int c;
int ar[7][2]={{x2,y1},{x1,y2},{z2,x1},{z1,x1},{y1,x1},{y2,x2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y1Z1()//
{
int c;
int ar[7][2]={{z2,y1},{z1,y2},{x1,z1},{x2,z1},{y1,z1},{y2,z2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y1X2()//
{
int c;
int ar[7][2]={{x1,y1},{x2,y2},{z1,x2},{z2,x2},{y1,x2},{y2,x1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y1Z2()
{
int c;
int ar[7][2]={{z1,y1},{z2,y2},{x2,z2},{x1,z2},{y1,z2},{y2,z1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z1X1()
{
int c;
int ar[7][2]={{x2,z1},{x1,z2},{y1,x1},{y2,x1},{z1,x1},{z2,x2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z1Y1()
{
int c;
int ar[7][2]={{y2,z1},{y1,z2},{x2,y1},{x1,y1},{z1,y1},{z2,y2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z1X2()
{
int c;
int ar[7][2]={{x1,z1},{x2,z2},{y2,x2},{y1,x2},{z1,x2},{z2,x1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z1Y2()
{
int c;
int ar[7][2]={{y1,z1},{y2,z2},{x1,y2},{x2,y2},{z1,y2},{z2,y1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();

}

void X2Y1()
{
int c;
int ar[7][2]={{y2,x2},{y1,x1},{z2,y1},{z1,y1},{x2,y1},{x1,y2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void X2Z1()
{
int c;
int ar[7][2]={{z2,x2},{z1,x1},{y1,z1},{y2,z1},{x2,z1},{x1,z2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}


void X2Y2()
{
int c;
int ar[7][2]={{y1,x2},{y2,x1},{z1,y2},{z2,y2},{x2,y2},{x1,y1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void X2Z2()
{
int c;
int ar[7][2]={{z1,x2},{z2,x1},{y2,z2},{y1,z2},{x2,z2},{x1,z1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y2X1()
{
int c;
int ar[7][2]={{x2,y2},{x1,y1},{z1,x1},{z2,x1},{y2,x1},{y1,x2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y2Z1()
{
int c;
int ar[7][2]={{z2,y2},{z1,y1},{x2,z1},{x1,z1},{y2,z1},{y1,z2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y2X2()
{
int c;
int ar[7][2]={{x1,y2},{x2,y1},{z2,x2},{z1,x2},{y2,x2},{y1,x1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Y2Z2()//
{
int c;
int ar[7][2]={{z1,y2},{z2,y1},{x1,z2},{x2,z2},{y2,z2},{y1,z1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z2X1()
{
int c;
int ar[7][2]={{x2,z2},{x1,z1},{y2,x1},{y1,x1},{z2,x1},{z1,x2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z2Y1()
{
int c;
int ar[7][2]={{y2,z2},{y1,z1},{x1,y1},{x2,y1},{z2,y1},{z1,y2}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();

}

void Z2X2()//
{
int c;
int ar[7][2]={{x1,z2},{x2,z1},{y1,x2},{y2,x2},{z2,x2},{z1,x1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

void Z2Y2()//
{
int c;
int ar[7][2]={{y1,z2},{y2,z1},{x2,y2},{x1,y2},{z2,y2},{z1,y1}};
c=g();
a=ar[c][0];
b=ar[c][1];
h();
}

int main()
{
int T,n,i;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
a=x1;b=y1;
x=y=z=0;
for (i=0;i<n;i++)
{
scanf("%s%d",str,&m);
if(a==x1&&b==y1)X1Y1();
else if(a==x1&&b==z1)X1Z1();
else if(a==x1&&b==y2)X1Y2();
else if(a==x1&&b==z2)X1Z2();
else if(a==y1&&b==x1)Y1X1();
else if(a==y1&&b==z1)Y1Z1();
else if(a==y1&&b==x2)Y1X2();
else if(a==y1&&b==z2)Y1Z2();
else if(a==z1&&b==x1)Z1X1();
else if(a==z1&&b==y1)Z1Y1();
else if(a==z1&&b==x2)Z1X2();
else if(a==z1&&b==y2)Z1Y2();
else if(a==x2&&b==y1)X2Y1();
else if(a==x2&&b==z1)X2Z1();
else if(a==x2&&b==y2)X2Y2();
else if(a==x2&&b==z2)X2Z2();
else if(a==y2&&b==x1)Y2X1();
else if(a==y2&&b==z1)Y2Z1();
else if(a==y2&&b==x2)Y2X2();
else if(a==y2&&b==z2)Y2Z2();
else if(a==z2&&b==x1)Z2X1();
else if(a==z2&&b==y1)Z2Y1();
else if(a==z2&&b==x2)Z2X2();
else if(a==z2&&b==y2)Z2Y2();
}
printf("%d %d %d %d\n",x,y,z,a);
}
return 0;
}



 

posted @ 2011-12-15 23:20  104_gogo  阅读(229)  评论(0编辑  收藏  举报