/** rief poj 2632 * * param date 2014/8/3 * param state AC * eturn memory 776k time 16ms * */ #include#include #include using namespace std; const int MAXN=101; int Map[MAXN][MAXN]; int A,B; int N,M; int xf[4]={-1,0,1,0}; int yf[4]={0,1,0,-1}; struct Robot { int x; int y; //char dir; int dir; //int num; }; Robot robots[MAXN]; //將方向數字化 int charDir2Int(char cDir) { switch(cDir) { case 'E': return 2; case 'S': return 3; case 'W': return 0; case 'N': return 1; }; } //模擬搜索 bool Forward(int s,int t) { int x,y; int d=robots[s].dir; x=robots[s].x; y=robots[s].y; Map[x][y]=0;//走過為0 for(int i=0;i A || y<1 || y>B) { cout< >K; for(int k=0;k >A>>B; cin>>N>>M; for(int i=1;i<=N;i++) { int x,y; char dir; cin>>x>>y>>dir; robots[i].x=x; robots[i].y=y; robots[i].dir=charDir2Int(dir); //robots[i].num=i; Map[x][y]=i; } bool f=false;//it means that OK for(int j=0;j >num>>op>>repeat; // if(!f)f=Action(num,op,repeat); } if(!f)cout<
模擬算法:根據題目所述移動步驟逐步進行,利用數組array[i][j]代表(i,j)位置處的robot編號,沒有則為0.
利用robot結構體記錄下每個機器人當前的位置和方向。
對於'F'指令,需判斷前進是否出界和前進的位置是否已有機器人。
對於'L'和'R'轉向指令,只需修改機器人的方向值,注意同一方向轉四次等於沒轉。