[CareerCup] 9.2 Robot Moving 机器人移动

简介:

9.2 Imagine a robot sitting on the upper left corner of an X by Y grid. The robot can only move in two directions: right and down. How many possible paths are there for the robot to go from (0,0) to (X,Y)? 
 FOLLOW UP 
 Imagine certain spots are "off limits," such that the robot cannot step on them. Design an algorithm to find a path for the robot from the top left to the bottom right.

LeetCode上的原题,请参见我之前的博客Unique Paths 不同的路径Unique Paths II 不同的路径之二

解法一:

class Solution {
public:
    int getPath(int x, int y) {
        vector<int> dp(y + 1, 1);
        for (int i = 1; i <= x; ++i) {
            for (int j = 1; j <= y; ++j) {
                dp[j] += dp[j - 1];
            }
        }
        return dp[y];
    }
};

解法二:

class Solution {
public:
    int getPath(int x, int y) {
        double num = 1, denom = 1;
        int small = x < y ? x : y;
        for (int i = 1; i <= small; ++i) {
            num *= x + y - i + 1;
            denom *= i;
        }
        return (int)(num / denom);
    }
};

这道题的Follow up说格子中可能有障碍物,即不能到达的位子,让我们找到一条从左上点到右下点的路径,只需一条而已,不用将所有的都找出来,那么我们使用递归来做,我们反方向走,从右下点往左上点找,我们用哈希表来记录某个位置是否访问过,当递归到原点的时候,我们把原点加入结果中,然后逐层递归返回,把路径中的点依次加入结果中,这样结果中保存的顺序就是正确的,参见代码如下:

class Point {
public:
    int _x, _y;
    Point(int x, int y): _x(x), _y(y) {}
};

class Solution {
public:
    vector<Point*> getPath(vector<vector<int> > &grid, int x, int y) {
        vector<Point*> res;
        unordered_map<Point*, bool> m;
        getPathDFS(grid, x, y, m, res);
        return res;
    }
    bool getPathDFS(vector<vector<int> > &grid, int x, int y, unordered_map<Point*, bool> &m, vector<Point*> &res) {
        if (x < 0 || y < 0 || grid[x][y] == 1) return false;
        Point *p = new Point(x, y);
        if (m.find(p) != m.end()) return m[p];
        bool isAtOrigin = (x == 0) && (y == 0), success = false;
        if (isAtOrigin || getPathDFS(grid, x, y - 1, m, res) || getPathDFS(grid, x - 1, y, m, res)) {
            res.push_back(p);
            success = true;
        }
        m[p] = success;
        return success;
    }
};

本文转自博客园Grandyang的博客,原文链接:机器人移动[CareerCup] 9.2 Robot Moving,如需转载请自行联系原博主。

相关文章
|
传感器 机器学习/深度学习 Web App开发
AI之Robot:机器人Robot的简介、发展历史、案例应用之详细攻略
AI之Robot:机器人Robot的简介、发展历史、案例应用之详细攻略
|
5月前
|
机器学习/深度学习 传感器 算法
强化学习(RL)在机器人领域的应用,尤其是结合ROS(Robot Operating System)和Gazebo(机器人仿真环境)
强化学习(RL)在机器人领域的应用,尤其是结合ROS(Robot Operating System)和Gazebo(机器人仿真环境)
230 2
|
传感器 XML 数据可视化
[ros robot] --- 机器人系统仿真
[ros robot] --- 机器人系统仿真
383 0
|
机器人 语音技术 Android开发
App Inventor 2 语音交互机器人Robot,使用讯飞语音识别引擎
App Inventor 2 语音识别及交互App。识别语言指令并控制机器人运动,主要用到语音识别器及文本朗读器组件,语音识别相关开发最佳入门。代码逻辑简单,App交互性及趣味性非常强~
247 0
|
机器人
robot(1):关于机器人和互联网的思考
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/47778621 未经博主允许不得转载。 1,开始 最近新闻上讲机器人都非常热,而且这个和创业一样从国家层面都开始重视了。 互联网公司现在啥都做,最近O2O的项目也非常的火。 拼车,专车,大巴啥都有了。几年前难以想象。 最近机器人也开始火起来了,而且:
1227 0
|
7天前
|
机器学习/深度学习 传感器 算法
智能机器人在工业自动化中的应用与前景###
本文探讨了智能机器人在工业自动化领域的最新应用,包括其在制造业中的集成、操作灵活性和成本效益等方面的优势。通过分析当前技术趋势和案例研究,预测了智能机器人未来的发展方向及其对工业生产模式的潜在影响。 ###
38 9

热门文章

最新文章