题目链接:http://lx.lanqiao.org/problem.page?gpid=T125
解题思路:按照题目所给的规则进行模拟:
若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格;
若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。
只要判断好蚂蚁所在位置即黑白格即可,需要注意的是要把当前位置的黑格改为白格,白格改为黑格~~~
详见代码。
#include <iostream> #include <cstdio> using namespace std; int dir[4][2]= {1,0,0,-1,-1,0,0,1}; //int dir[4][2]= {1,0,0,1,-1,0,0,-1}; int Map[110][110]; int main() { int m,n; while (~scanf("%d%d",&m,&n)) { for (int i=0; i<m; i++) { for (int j=0; j<n; j++) { scanf("%d",&Map[i][j]); } } int x,y,k; char ch; scanf("%d%d %c%d",&x,&y,&ch,&k); int step=0,i; //for (int i=0;i<4;i++) if (ch=='D') i=0; if (ch=='L') i=1; if (ch=='U') i=2; if (ch=='R') i=3; while (step<k) { if(Map[x][y]==0)//白格,左转 { i--; if (i==-1) i=3; Map[x][y]^=1; int Xl=x+dir[i][0]; int Yl=y+dir[i][1]; if (Xl>=0&&Xl<m&&Yl>=0&&Yl<n) { x=Xl; y=Yl; step++; //cout<<x<<" "<<y<<endl; } if (step==k) cout<<Xl<<" "<<Yl<<endl; } else { i++; if (i==4) i=0; Map[x][y]^=1; int Xr=x+dir[i][0]; int Yr=y+dir[i][1]; if (Xr>=0&&Xr<m&&Yr>=0&&Yr<n) { x=Xr; y=Yr; step++; // cout<<x<<" "<<y<<endl; } if (step==k) cout<<Xr<<" "<<Yr<<endl; } } } return 0; }