`
scott________
  • 浏览: 20781 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
最近访客 更多访客>>
社区版块
存档分类
最新评论

poj 1835 宇航员

阅读更多

题目描述:http://poj.org/problem?id=1835

该题关键在于方向的处理,代码注释比较详细。

#include <iostream>
using namespace std;

//辅助数组,完成当前坐标修改
int dir[6][3] = {1, 0, 0,
				 0, 1, 0,
				 0, 0, 1,
				 -1, 0, 0,
				 0, -1, 0,
				 0, 0, -1};
             
//方向数组,存储forward, right, up, 
//back, left, down相对应的方向值             
int dir_pre[6] = {0, 1, 2 , 3, 4, 5};
int dir_cur[6] = {0, 1, 2 , 3, 4, 5};

int main() {
	int ncase;
	cin>>ncase; //ncase 组测试
	string direction;
	int step;
    int x, y, z;
	while(ncase--) {
        //每次测试, 都要初始化方向数组和初始坐标
        for(int i = 0; i < 6; i++)
            dir_pre[i] = dir_cur[i] = i;
        x = y = z = 0;
        
		int n;  //共走n 步
		cin>>n;
		while(n--) {
			cin>>direction>>step;       //每步走step 个单位长度
                
            switch(direction[0]) {
				case 'f':
					break;
				case 'r'://方向调整,前方为原右方,后方为原左方, 右方为原后方,左方为原前方
					dir_cur[0] = dir_pre[1]; dir_cur[1] = dir_cur[3]; 
					dir_cur[3] = dir_pre[4]; dir_cur[4] = dir_pre[0];
					break;
				case 'u'://方向调整,前方为原上方,后方为原下方, 上方为原后方,下方为原前方
					dir_cur[0] = dir_pre[2]; dir_cur[2] = dir_pre[3];
					dir_cur[3] = dir_pre[5]; dir_cur[5] = dir_pre[0];
					break;
				case 'b'://方向调整,前方为原后方,后方为原前方, 右方为原左方,左方为原右方
					dir_cur[0] = dir_pre[3]; dir_cur[1] = dir_pre[4];
					dir_cur[3] = dir_pre[0]; dir_cur[4] = dir_pre[1];
					break;
				case 'l'://方向调整,前方为原左方,后方为原右方, 右方为原前方,左方为原后方
					dir_cur[0] = dir_pre[4]; dir_cur[1] = dir_pre[0];
					dir_cur[3] = dir_pre[1]; dir_cur[4] = dir_pre[3];
					break;
				case 'd'://方向调整,前方为原下方,后方为原上方, 上方为原前方,下方为原后方
					dir_cur[0] = dir_pre[5]; dir_cur[2] = dir_pre[0];
					dir_cur[3] = dir_pre[2]; dir_cur[5] = dir_pre[3];
			}
            //调整坐标
            x += step * dir[dir_cur[0]][0];  //dir_cur[0] 为前方值
			y += step * dir[dir_cur[0]][1];
			z += step * dir[dir_cur[0]][2];
            
			for(int i = 0; i < 6; i++)
				dir_pre[i] = dir_cur[i];
            //cout<<x<<" "<<y<<" "<<z<<" "<<dir_cur[0]<<endl;
		}
        cout<<x<<" "<<y<<" "<<z<<" "<<dir_cur[0]<<endl;
        
	}
	return 0;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics