解题思路:1.蚂蚁实时记录结构体:包括所处位置x,y,朝向s,步数step
2.黑白格二维数组
3.一个根据 规则 变化蚂蚁所处位置、朝向及步数的函数
例如:
此时朝上 白格 修改蚂蚁朝向向左(白格左转90)判断能否继续:如果处于第一列则无法继续,其他同理(如果此时朝上,如果处在第一行无法继续等);如果不在,则蚂蚁结构体中的y-1,白格变黑,0->1
注意事项: 看了下有同学没有判断蚂蚁越界也AC了,我觉得还是要判断比较好一点叭(如果是我没理解到位 欢迎指出ORZ)
参考代码:
#include<bits/stdc++.h>
using namespace std;
struct Ant{
int ax;
int ay;
char as;
int step;
};//蚂蚁行走记录结构体
int a[100][100]={-1};//黑白格记录
int x,y,k;
char s;
int m,n;
Ant convert(Ant ant,int i,int j){//蚂蚁行走实时变化
if(ant.as=='U'){//如果此时蚂蚁朝上
if(a[i][j]==0) {//白格
ant.as='L';//那么左转
a[i][j]=1;
if(j==0) return ant;//朝向左 判断如果此时在第一列,那么越界
else {//否则步数加一,所处列数减一
ant.step++;
ant.ay=(j-1);
}
}//下同理
else if(a[i][j]==1) {
ant.as='R';
a[i][j]=0;
if(j==m-1) return ant;
else {
ant.ay=(j+1);
ant.step++;
}
}
}
else if(ant.as=='D'){
if(a[i][j]==0) {
ant.as='R';
a[i][j]=1;
if(j==m-1) return ant;
else {ant.ay=(j+1);
ant.step++;
}
}
else if(a[i][j]==1) {
ant.as='L';
a[i][j]=0;
if(j==0) return ant;
else {ant.ay=(j-1);
ant.step++;
}
}
}
else if(ant.as=='L'){
if(a[i][j]==0) {
ant.as='D';
a[i][j]=1;
if(j==n-1) return ant;
else {ant.ax=(i+1);
ant.step++;
}
}
else if(a[i][j]==1) {
ant.as='U';
a[i][j]=0;
if(i==0) return ant;
else {ant.ax=(i-1);
ant.step++;
}
}
}
else if(ant.as=='R'){
if(a[i][j]==0) {
ant.as='U';
a[i][j]=1;
if(i==0) return ant;
else {
ant.ax=(i-1);
ant.step++;
}
}
else if(a[i][j]==1) {
ant.as='D';
a[i][j]=0;
if(i==n-1) return ant;
else {
ant.ax=(i+1);
ant.step++;
}
}
}
return ant;
}
int main(){
int i,j;
Ant ant;
ant.step=0;
int temp;
cin>>n>>m;
for(i=0;i<n;i++){
for(j=0;j<m;j++)
cin>>a[i][j];
}
cin>>ant.ax>>ant.ay>>ant.as>>k;
for(i=0;i<k;i++){
ant=convert(ant,ant.ax,ant.ay);
}
cout<<ant.ax<<" "<<ant.ay;
return 0;
}
0.0分
0 人评分