算法 动态规划 【机器人路径问题】

机器人路径规划与袋鼠过河问题 机器人路径规划和袋鼠过河问题是计算机科学中两个经典的算法问题。这些算法在实际应用中具有广泛的意义,通过合理的路径规划和安全策略,可以提高机器人的导航能力和袋鼠的生存几率。机器人路径规划和袋鼠过河问题是计算机科学中经典的算法问题之一。这两种算法都基于图论,将地图抽象成图的形式,节点代表位置,边代表路径,通过计算节点之间的距离或代价,找到最优路径。袋鼠过河问题是经典的动态规划问题,描述了几只袋鼠如何安全地过河而不被捕食者所吃。袋鼠过河问题的关键在于找到一种策略,确保任意时刻岸边的袋鼠数量不超过捕食者的数量。 阅读详情
AI摘要

这篇博客介绍了如何使用动态规划解决一个经典问题:机器人从网格的左上角出发,每次只能向下或向右移动,求到达右下角的不同路径数。通过确定状态、建立转移方程、设置初始条件和边界情况,逐步计算出所有可能的路径。最终给出了C++代码实现,并展示了计算过程和结果。

目录

一、题目描述

二、思路

动态规划题目类型

    1.确定状态

    2.转移方程

    3.初始条件和边界情况

    4. 计算顺序

三、代码


一、题目描述

给定m行n列的网格,有一个机器人从左上角(0,0)出发,每一步可以向下或者向右走一步,问有多少种不同的方式走到右下角。

 

二、思路

动态规划题目类型

1、计数:
有多少种方式走到右下角
有多少种方法选出k个数使得和为Sum
2、求最大最小值:
从左上角走到右下角路径的最大数字和
最长上升子序列长度
3、求存在性:
取石子游戏,先手是否必胜
能不能选出k个数使得和是Sum

本题属于计数型动态规划。

还是动态规划四步走:

 

    1.确定状态

    1.1 研究最后一步
    因为机器人只能向下或者向右走一步,
    所以在走最后一步之前,机器人的位置肯定在右下角的上侧一格或左侧一格。
    1.2 化为子问题
    机器人从左上角出发,有多少种方法能走到右下角的上侧一格或者左侧一格?

    2.转移方程

    设f[x][y]为机器人从左上角出发,到达第x行第y列的不同走法之和。
    则f[x][y] = f[x-1][y] + f[x][y-1]
    备注:加法原理

    3.初始条件和边界情况

    3.1 初始条件
    f[0][0] = 1,机器人只有一种方式从左上角走到左上角

    3.2 边界情况
    x or y 等于0时,机器人只能从一个方向过来,所以:
    当x == 0 || y == 0,f[x][y] = 1

    4. 计算顺序

    一行一行计算,同行则从左至右计算。

三、代码

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <iostream>
#include <vector>

using namespace std;

int main()
{
	//1.确定状态
	//1.1 研究最后一步
	//因为机器人只能向下或者向右走一步,
	//所以在走最后一步之前,机器人的位置肯定在右下角的上侧一格或左侧一格。
	//1.2 化为子问题
	//机器人从左上角出发,有多少种方法能走到右下角的上侧一格或者左侧一格?

	//2.转移方程
	//设f[x][y]为机器人从左上角出发,到达第x行第y列的不同走法之和。
	//则f[x][y] = f[x-1][y] + f[x][y-1]
	//备注:加法原理

	//3.初始条件和边界情况
	//3.1 初始条件
	//f[0][0] = 1,机器人只有一种方式从左上角走到左上角

	//3.2 边界情况
	//x or y 等于0时,机器人只能从一个方向过来,所以:
	//当x == 0 || y == 0,f[x][y] = 1

	//4. 计算顺序
	//一行一行计算,同行则从左至右计算。
	
	//m行n列
	int m = 10;
	int n = 8;

	vector<vector<int>> f(m, vector<int>(n));

	for (int x = 0; x < m; x++)
	{
		for (int y = 0; y < n; y++)
		{
			if (x == 0 || y == 0)
			{
				f[x][y] = 1;
			}
			else
			{
				f[x][y] = f[x - 1][y] + f[x][y - 1];
			}
		}
	}
	cout << f[m - 1][n - 1];
	return 0;
}

 

UE4/5项目GPU崩溃?可能是Windows的TDR机制在搞鬼!深入浅出聊聊TdrDelay与显卡超时 本文深入探讨了UE4/5项目中GPU崩溃的常见原因,揭示了Windows TDR机制的工作原理及其对渲染进程的影响。通过调整TdrDelay参数和优化GPU负载,提供了解决显卡超时问题的实用方案,帮助开发者提升项目稳定性。 阅读详情

相关推荐

华为HCIP大数据备考实战:从题库精析到834分通关策略

本文详细介绍了华为HCIP大数据认证考试的备考策略,包括题库精析、重点章节突破和考场实战经验。作者以834分的高分通过考试,分享了官方教材的三遍阅读法、自建题库技巧以及各章节核心知识点,帮助考生高效备考并顺利通关。

weixin_29169899的博客 148

leetcode刷题(46)——62.不同路径

一、 题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 示例 1: 输入: m = 3, n = 2 输出: 3 解释: 从左上角开始,总共有 3 条路径可以到达右下角。 1. 向右 -> 向右 -> 向下 2....

kezhou的博客 298

一文读懂Cache一致性原理

本文介绍了为什么需要维护cache一致性、一致性协议的本质和类别,以及如何设计一致性协议。

W1Z1Q的专栏 6830

动态规划(二)-坐标型动态规划

例1 给定m行n列的网格,有一个机器人从左上角(0,0)出发,每一步可以向下或者向右走一步 网格中有些地方有障碍,机器人不能通过障碍格 问有多少种不同的方式走到右下角 动态规划组成部分一:确定状态 这题和上章某题很像,只是网格中可能有障碍 最后一步一定是从左边(i,j-1)或上边(i-1,j)过来,这点是没有变的,变的只是多了障碍而已 状态f[i][j]表示从左上角有多少种方式走到格子(i,j)(坐标型动态规划基本都是:数组下标[i][j]即坐标(i,j)) 动态规划组成部分二:转移方程 f[i

上千主上-贝库塔 1486

保姆级教程:在RK3588开发板上配置USB-C PD充电(基于HUSB311芯片与DTS详解)

本文详细介绍了在RK3588开发板上配置USB-C PD充电的完整流程,重点解析了HUSB311芯片的硬件原理与DTS安全配置。通过实战案例和调试技巧,帮助开发者避免常见错误,实现稳定可靠的Type-C PD快充功能,适用于从基础开发板到工业设备的多场景需求。

weixin_42552315的博客 520

Altium Designer应用技巧1: 功能模块的复用方法

Altium Designer应用技巧1: 功能模块的复用方法      我们在使用Altium Designer进行电路图设计时,常会遇到功能模块的复用问题,例如我们经常需要将12V以DC-DC的方式转换成5V,这在很多线路板上都会应用到。现在我们普通的做法是,每个板子都重新绘制一遍,像这样DC-DC的电路,很浪费时间。那么如何采用提高工作效率呢?我们可以采取Altium Desi

snmplink的博客 1万+

动态规划——第四题路径总数

不同路径的数目 动态规划——简单 题目描述: 在一个m*n的网格的左上角有一个机器人,机器人在任何时候只能向下或者向右移动, 机器人试图到达网格的右下角,有多少可能的路径。 动态规划: 问题: ​ 从左上角到右下角,只能向下或向右;从(0,0)到(i,j)共有几种路径 状态分析: ​ 子问题:从(0,0)到(i,j)的路径数; ​ dp(i,j) : 到(i,j)的路径总数; 状态转移方程: ​ dp(i,j) = dp(i,j-1) + dp(i-1,j); ​ 边界: ​ 最顶部:i ==

阿辉爱睡觉的博客 522

OpenOCD入门到精通:第 0 章 教程导读

摘要:本教程是OpenOCD嵌入式调试工具的完整指南,适合从新手到资深工程师的学习需求。内容涵盖基础配置、调试技巧、Flash编程、TCL脚本自动化、源码解析和二次开发,共8大部分30章。教程提供5种学习路线,可根据角色和目标灵活选择,配套资源包含示例代码和配置文件。通过系统学习,读者将掌握OpenOCD从使用到扩展的全套技能,成为嵌入式调试领域的专家。

从事嵌入式linux android驱动开发,拥有全栈能力 1940

五大常用算法—动态规划详解和经典题目(python)

一、基本概念    把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。     动态规划过程:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。     假设问题是由交叠的子问题所构成,我们就能够用动态规划技术来解决它。一般来说,这种子问题出自对给定问题求解的递推关系中,这个递推关系包...

浮汐潇潇 3553

UI渲染顺序:合批为何被拆碎?

在 Hierarchy 中,避免出现:Image(列表1) → Text(列表1) → 特效 → Image(列表2) → Text(列表2)…若可行,在逻辑上把布局组织成“同类元素集中”:例如:列表行中,Image 集中、Text 集中;或者接受 Text 本身就拆出一批,关键是不要在 Text 中间再插入别的材质。现实中不一定能做到完美的“所有 Image 连在一起”,但你会有一个意识:同一 Canvas 内,如果你把不同材质的元素交错穿插,

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 84

【CC精品教程】iTwin capture倾斜摄影建模完整操作流程

【CC精品教程】iTwin capture倾斜摄影建模完整操作流程。包括:无人机航测外业作业流程(像控点布设、航线规划、仿地飞行、航拍)和内业数据处理软件(Pix4d、CC、EPS、PhotoScan、Globalmapper)像控点权重调配、空三加密、DOM、DSM、DEM,DLG生成、等高线生成、高程点提取,点云分类过滤分割、点云生成DEM、三维模型生成等。

智慧空间实验室 3952

动态规划问题- 机器人的最短路径

动态规划 最短路径

Jasonchen1224的博客 1757

LLaMA-Factory微调教程2:命令行sft微调

本文介绍了如何使用llama-factory项目在本地运行Qwen2-7B大语言模型进行对话。首先通过llamafactory-cli env查看环境配置,然后使用git lfs下载Qwen2-7B模型。创建配置文件qwen2_7b_instruct.yaml,修改模型路径和模板参数。最后通过llamafactory-cli chat命令启动对话服务,加载模型配置文件和tokenizer,完成环境初始化后即可进行交互式对话。

Cachel Wood的博客 8814

动态规划算法详解(附带背包问题、机器人不同路径、跳台阶)

前言 关于动态规划的一些名词、概念,比如像什么动态转移方程,无后效性,最优子结构啦。我想我们可以先不用看百度出来的解释或者是书本上对这些概念的解释,过于复杂难懂的话,可能就没入门就放弃了。我们以三个例子为基础,将概念带入例子并进行总结,进而初识动态规划。 目录前言1、跳台阶2、机器人不同路径3、01背包问题总结 1、跳台阶 经典蛙兄跳台阶: 蛙兄正在上楼梯,楼梯有 n 阶台阶,蛙兄一次可以跳 1 阶或者跳2 阶,计算跳n阶台阶共有多少种方式。 分析: 我们假设f(n)表示跳n阶可以有多少种方式,而n阶是

qq_250161537 1075

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

动态规划与机器人横竖走问题

上次是动态规划关于硬币规划问题,我们大致了解到所谓动态规划和递归也是有不小的区别的,递归是将之前的所有可能全部求出,但是动态规划却是只需要求出一部分也就是和硬币息息相关的最近的两步,很是有趣。这次我将要以机器人横竖走问题来再次的对动态规划进行一次解析。 首先我们有一个机器人,这个机器人只能横竖走(显然是个菜鸡程序员写的,我要是写,他就不动),在横有六格,竖有五格的这么一个长方形方格中,他从左上角走到右下角,每次只能走一格,问一共有多少种走法? 上面的表格就是我们这次的主角,我们发现,如果想要知道机器人走到

play_science的博客 486

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【动态规划:路径问题】不同路径

摘要:本文介绍了LeetCode 62题"不同路径"的动态规划解法。题目要求计算机器人从m×n网格左上角移动到右下角的所有可能路径数(每次只能向右或向下移动)。通过创建二维DP数组,初始化虚拟边界,并应用状态转移方程dp[i][j]=dp[i-1][j]+dp[i][j-1],最终在O(mn)时间/空间复杂度内求得结果。代码实现使用vector容器,通过双重循环填表,最后返回右下角的值作为答案。

lirendada的博客 347

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

动态规划 - 打家劫舍、机器人路径、0-1背包

文章目录一、动态规划二、一些例子1. 打家劫舍2.机器人路径3. 0-1背包问题 一、动态规划 关于动态规划算法,和分治策略类似。都是将问题分解然后求解,但是又和分治策略有所不同,动态规划把每次求得的解都记录在了一张表中,省去了重复递归的过程。 二、一些例子 1. 打家劫舍 (1)题目描述 (2)解题思路 (3)代码展示 //使用vector表示dp int rob(const vector<int>& num) { int n = num.size(); //房子的个数 v

Jqivin的博客 345

基于Dijkstra、A*和动态规划的移动机器人路径规划(Matlab代码实现)

在基于采样的方法中,需要在落在给定地图的未占用区域的地图上生成一定数量的点。然后,我们计算哪个节点与哪些节点有连接。通过这种方式,获得了生成的随机点的无向图。为了生成这些点,可以使用一些复杂的方法来尽可能聪明地在地图周围分布节点。但是在那个存储库中,选择通过均匀随机来生成它们。生成了100个节点,这些节点位于地图的自由区域。有给定的映射,生成的节点及其连接。通过Dijkstra、Astar和动态规划测试了102个节点图路径规划。在移动机器人路径规划中,Dijkstra、A*和动态规划是常用的算法。

weixin_66436111的博客 882

短视频app制作,动态规划算法之动态规划

概念 不会算法的程序员不是好程序员,动态规划更是经典算法之一,希望这篇小博客能让大家对动态规划有一个简单的入门。 短视频APP制作动态规划其基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。可能未接触过动态规划的人看到就不理解了,下面用例子给大家讲讲我对动态规划的理解 1、入门题——经典爬楼梯问题 2、简单题——经典机器人路径数问题 3、提升题——最短路径问题 (1)经典爬楼梯问题 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你

云豹网络科技 261

动态规划_导弹拦截问题 新水果取名 机器人规划路径

记录一下上午做的几道动态规划题目 1.拦截导弹问题 类似书中P109中的最长递增子序列问题 感觉不难 也比较容易想 #include <iostream> using namespace std; int main() { int N,a[25],L[25]; while(cin>>N) { for(int i=0;i<N;i+...

Road 710

【力扣日记】63 不同路径II | 动态规划

题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 网格中的障碍物和空位置分别用 1 和 0 来表示。 说明:m 和 n 的值均不超过 100。 示例 1: 输入:[ [0,0,0]...

Heart_for_Ling的博客 427

leetcode四杀——机器人路径系列

文章目录不同路径不同路径||迷路的机器人机器人的运动范围知识小点:Arrays.asList()今日推歌 不同路径 62. 不同路径 - 力扣(LeetCode) (leetcode-cn.com) 状态转移方程:到达(x, y) 的路径数等于到达(x - 1, y)和(x, y - 1) 路径数之和 dp定义:从(0, 0)到 (x, y)有 dp(x, y)条路径 写法一: class Solution { public int uniquePaths(int m, int n) {

星回昭以烂的博客 1049

62.不同路径/63. 不同路径 II/64. 最小路径和

62.不同路径 Title:有一个机器人的位于一个M×N个网格左上角(下图中标记为’Start’)。 机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为’Finish’)。 问有多少条不同的路径? 注意事项n和m均不超过100 Analysis: 典型的动态规划问题 容易分析出状态转移方程: dp[i][j] = dp[i-1][j] + dp[i][j-1]; 初...

Gunther的博客 223

算法与数据结构(不同路径)

其实这道题就是一个简单的动态规划问题,因为机器人只能往右或往下移动,所以一个点的路径种类数就等于它上面点的路径种类数加上它左边点的路径种类数。我们用f(i)(j)来代表从左上角走到(i,j)的路径数量,对于列为0和行为0的所有点路径数量都是1。之后利用f[i][j] = f[i-1][j] + f[i][j-1]即可求出每个点的路径数量。之后返回f[m-1][n-1]就可以知道总共的路径数量。它们只有一种路径到达,将其初始化。

a_j58的博客 448

LeetCode62机器人的不同路径

题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 说明:m和 n 的值均不超过 100。 示例1: 输入: m = 3, n = 2 输出: 3 解释: 从左上角开始,总共有 3 条路径可以到达右下角。 1....

weibozhouchao的博客 357

python算法技巧——动态规划算法练习及掌握

本文介绍了动态规划法的一些应用与练习,希望能对你有帮助~~ 1. 处理爬楼梯的问题 2. 募捐基金问题 3. 最小经费粉刷房子问题 4. 篱笆粉刷方法数量问题 5. 机器人在地图上的路径走法问题 6.背包问题

weixin_53919192的博客 1313
上一篇: 算法 查找 【剑指 Offer 04 二维数组中的查找】
下一篇: 小程序 【机械刀指令转换】
Kukeoo
博客等级 码龄8年 216粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值