博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2632 模拟题
阅读量:7050 次
发布时间:2019-06-28

本文共 4983 字,大约阅读时间需要 16 分钟。

   题目不难。但是要做出来也要些耐心呀。考虑各种情况。

   这题是边输入边判断的,所以当能判断出结果的时候,要继续输入,把剩下的数据继续输入完,不然会影响下一次的输入。其他的就没什么要注意的了吧。该注意的我都在程序里注释了。感觉这题麻烦就麻烦再判断移动的move函数里面,都是重复的操作。应该可以优化吧。

   写完后我以为我的代码太长了。。。看了别人的,其实也差不多。呵呵。有空再想想怎么尽量优化吧。

/* * ===================================================================================== * *       Filename:  main.cpp * *    Description:  poj 2632 * *        Version:  1.0 *        Created:  2012/5/7 13:10:38 *       Revision:  none *       Compiler:  gcc * *         Author:  Jason Damon      *   Organization:  XD University * * ===================================================================================== */#include 
#include
#include
using namespace std;#define MAXN 101int k,a,b,n,m,x,y;int map[MAXN][MAXN]; //map[x][y]=i表示(x,y)存储的是第i个robotchar dire[]={
'E','N','W','S'};//0->E 1->Nbool flag=false; //用于判断是否已经成功判断struct Robot{ int x,y; int direct; //定义方向,与数组dire[]对应}robot[MAXN];void turn(int pi,char dir,int times) //转向函数{ int tem; tem=times%4; if(dir=='L') { robot[pi].direct=(robot[pi].direct+tem)%4; } else //R { robot[pi].direct=(robot[pi].direct-tem+4)%4; //注意这里有可能有负值,所以要加个4 }}void move(int pi,char dir,int times) //移动函数{ int di=robot[pi].direct; int x=robot[pi].x; int y=robot[pi].y; int i; if(di==0) { for(i=1; i<=times; i++) { if(x+1>a) { printf("Robot %d crashes into the wall\n",pi); flag=true; break; } else if(map[x+1][y]) { printf("Robot %d crashes into robot %d\n",pi,map[x+1][y]); flag=true; break; } else //移动 { map[x][y]=0; x+=1; map[x][y]=pi; } } //保存移动后的位置 robot[pi].x=x; robot[pi].y=y; } else if(di==1) { for(i=1; i<=times; i++) { if(y+1>b) { printf("Robot %d crashes into the wall\n",pi); flag=true; break; } else if(map[x][y+1]) { printf("Robot %d crashes into robot %d\n",pi,map[x][y+1]); flag=true; break; } else { map[x][y]=0; y+=1; map[x][y]=pi; } } robot[pi].x=x; robot[pi].y=y; } else if(di==2) { for(i=1; i<=times; i++) { if(x-1<1) { printf("Robot %d crashes into the wall\n",pi); flag=true; break; } else if(map[x-1][y]) { printf("Robot %d crashes into robot %d\n",pi,map[x-1][y]); flag=true; break; } else { map[x][y]=0; x-=1; map[x][y]=pi; } } robot[pi].x=x; robot[pi].y=y; } else { for(i=1; i<=times; i++) { if(y-1<1) { printf("Robot %d crashes into the wall\n",pi); flag=true; break; } else if(map[x][y-1]) { printf("Robot %d crashes into robot %d\n",pi,map[x][y-1]); flag=true; break; } else { map[x][y]=0; y-=1; map[x][y]=pi; } } robot[pi].x=x; robot[pi].y=y; }}int main(){ int i,j,pi,times; char dir; freopen("in.txt","r",stdin); scanf("%d",&k); while(k--) { memset(map,0,sizeof(map)); scanf("%d%d",&a,&b); scanf("%d%d",&n,&m); for(i=1; i<=n; i++) { scanf("%d%d %c",&robot[i].x,&robot[i].y,&dir); map[robot[i].x][robot[i].y]=i; switch(dir) { case 'E': robot[i].direct=0;break; case 'N': robot[i].direct=1;break; case 'W': robot[i].direct=2;break; case 'S': robot[i].direct=3;break; } } flag=false; for(i=1; i<=m; i++) { if(flag) //成功判断后,要继续输入。 { scanf("%d %c%d",&pi,&dir,×); } else { scanf("%d %c%d",&pi,&dir,×); if(dir=='F') { move(pi,dir,times); } else { turn(pi,dir,times); } } } if(!flag) { printf("OK\n"); } } return 0;}

 

转载地址:http://znpol.baihongyu.com/

你可能感兴趣的文章
Webpack 笔记
查看>>
启用客服qq的方法
查看>>
秒数自动跳动的JS时间特效
查看>>
Mac OS X Lion 10.7.3 发布
查看>>
Freiburg这么做太愚蠢了
查看>>
Vue+Vue Router+Axios+Webpack+Flask+MySQL实现简单的注册、登录验证功能
查看>>
来聊聊对象
查看>>
Spring Cache
查看>>
基于Nginx和Memcache的负载均衡集群架构设计
查看>>
清除TextView周边空白区域
查看>>
互联网威胁狩猎框架 白皮书
查看>>
iOS开发-CocoaPods的安装与使用
查看>>
Android SDK Manager连不上Google服务器的解决办法
查看>>
js常用的事件
查看>>
正则表达式
查看>>
Mysql zip的下载地址
查看>>
Linux Swap交换分区介绍总结
查看>>
cross-platform-apps-qt-vs-html5
查看>>
python 协程 深入浅出(二)
查看>>
Go语言中的panic recover defer
查看>>