困于环中的机器人【力扣1041】

该文讨论了一个问题,即在执行一系列指令后,判断机器人是否被困在一个环中。机器人初始位置(x,y)和方向(gps)会影响其是否会陷入环中。如果(x,y)为(0,0),无论方向如何,机器人都会被困。反之,如果(x,y)不等于(0,0),且初始方向为北,机器人不会被困。否则,通过分析移动轨迹,可以确定机器人是否会在执行指令后回到原点并改变方向,从而判断是否被困。
摘要由CSDN通过智能技术生成

思路:

设执行完一次顺序执行指令 instructions,机器人的位置为(x,y),方向为gps(1表示面朝北,2表示面朝西,3表示面朝南,4表示面朝东)

  • 若(x,y)=(0,0),则不论面朝那里,机器人都困于环中。因为从机器人的视角看,相当于他没有移动位置;第二次执行指令他仍然不移动位置;因此不论gps变不变,他都困于环中。
  • 若(x,y)!=(0,0),gps=1,则机器人不会困于环中。由于机器人仍然面朝北,因此他执行第二次指令后,相当于再进行相同的位移,此时位置为(2x,2y),gps=1;
  • 若(x,y)!=(0,0),gps!=1,则机器人困于环中。假如说(x1,y1)=(-1,1),gps1=2,则第二次移动后(x2,y2)=(-2,0),gps2=3,第三次移动后(x3,y3)=(-1,-1),gps3=4,第四次移动后(x4,y4)=(0,0),gps4=1;移动轨迹是一个正方形,机器人一定会困于环中。    还有一种情况是,(x1,y1)=(-1,1),gps1=3,则第二次移动后(x2,y2)=(0,0),gps2=1,移动轨迹是一个来回,机器人困于环中。    (x,y)换成其他值也是一样的结果。   gps与x轴正向正交,则移动轨迹是一个正方形,回到原点;gps与x轴正向相反,则移动轨迹是一个来回,机器人困于环中。
class Solution {
public:
    bool isRobotBounded(string instructions) {
        int x=0,y=0;    //表示位置
        int gps=1;      //表示方向
        for(int i=0;i<instructions.length();i++){
            if(instructions[i]=='G'){
                if(gps==1){
                    x++;
                }else if(gps==3){
                    x--;
                }else if(gps==4){
                    y++;
                }else{
                    y--;
                }
            }else if(instructions[i]=='L'){
                gps=(gps+1)%4;
                if(gps==0){
                    gps=4;
                }
            }else{
                gps--;
                if(gps==0){
                    gps=4;
                }
            }
        }
        if((x==0&&y==0)||(gps!=1)){
            return true;
        }else{
            return false;
        }
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值