会吐泡泡的蓝鲸


私信TA

用户名:shiyan1

访问量:804

签 名:

等  级
排  名 34272
经  验 447
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路: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 人评分

  评论区

  • «
  • »