程序员的算法趣题Q08:优秀的扫地机器人

本文探讨了扫地机器人如何避免重复清扫同一区域的问题,通过定义初始位置和四个可能的方向,利用递归算法计算所有不重复路径的可能性。该算法确保机器人在行走过程中不会踏足已清洁过的地面,有效提高清扫效率。

题目

现在市面上有很多扫地机器人,能够为我们分担家务,但是我们很难理解,有时候扫地机器人会重复清扫同一块地方。

  • 假设现在有一款扫地机器人,不会重复扫过的地方,如果它要走四步,在走了第一步后,移动三步有如下9种路径;
  • 第一步可以走4种路径,总共情况有 9*4=36 种路径。
    tZF7Vg.png
    思路:
  • 1.可以(0,0)来表示初始位置,每次可以有四个方向可以选择 上(1,0),下(-1,0),左(0,-1),右(0,1)
  • 2.用一个集合保存所有已经走过的位置,过滤重复走的位置

实现

public class FloormoppingRobot {

    private static int N = 12;
    //移动方向的列表,对应上下左右
    private static List<Position> step = new ArrayList<>(4);;

    static {
        step.add(new Position(0,1));
        step.add(new Position(0,-1));
        step.add(new Position(1,0));
        step.add(new Position(-1,0));
    }

    private static int move(List<Position> historyPos){
        //移动部署为N,则历史列表集合size为4时结束
        if( historyPos.size() =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值