Lintcode-动态规划-不同路径二
来源:互联网 发布:华为网络管理系统 编辑:程序博客网 时间:2024/06/14 10:44
点击进入题目
解题思路:该题目的解题思路和不同路径的思路基本是一致的,只是有少许不同而已,顶多在解决问题的时候先判断是否有障碍。
解题过程:首先给定m,n的值和数组obstacleGri[m][n],定义数组f[m][n],定义第一行和第一列为1,但当obstacleGri[1][j]为0时,则从f[1][j]到f[1][n]全为0,列也类似。初始化完了以后,就开始做判断。嵌套for循环,i从1 到m,j从1到n,当obstacleGri[i][j]!=0时,运行f[i][j]=f[i-1][j]+f[i][j-1];
代码实现:
int uniquePathsWithObstacles(vector<vector<int>> &obstacleGrid) {
int m=obstacleGrid.size(),n=obstacleGrid[0].size();
int f[m][n];
int I=0;
for(int i=0;i<m;i++)
{
f[i][0]=1;
if(obstacleGrid[i][0]==1||I)
{
f[i][0]=0;
I++;
}
}
I=0;
for(int i=0;i<n;i++)
{
f[0][i]=1;
if(obstacleGrid[0][i]==1||I)
{
f[0][i]=0;
I++;
}
}
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
{
f[i][j]=0;
if(obstacleGrid[i][j]!=1)
{
f[i][j]=f[i-1][j]+f[i][j-1];
}
}
}
return f[m-1][n-1];
}
注意事项:在处理这道问题的时候一定要注意障碍物这个问题,而且在初始化的时候,要注意一些问题,当边缘出现障碍物的时候,那么再往下或者往右就走不通了,那么处于边缘的一些节点都要赋值为0;
个人见解:这道题目稍难了一些,但是如果理清思路,以及注意一些要点,还是挺简单的就过去了。
- Lintcode-动态规划-不同路径二
- Lintcode-动态规划-不同路径
- lintcode115不同路径问题(二)(动态规划easy)
- Lintcode-动态规划-最小路径和
- 动态路径规划(二)
- lintcode114不同路径(动态规划easy)
- 动态规划——不同的路径
- LintCode -- 不同的路径
- LintCode 不同的路径
- LintCode:不同的路径
- LintCode :不同的路径
- 不同的路径 -LintCode
- 不同路径-LintCode
- LintCode 不同的路径
- LintCode UniquePaths 不同的路径
- lintcode-不同的路径-114
- LintCode 不同的路径 II
- LintCode -- 不同的路径 II
- 动态规划--机器分配
- 红黑瓷砖
- 输入N阶方阵求其各行各列的和
- 76. Minimum Window Substring
- 【算法分析与设计】【第八周】712. Minimum ASCII Delete Sum for Two Strings
- Lintcode-动态规划-不同路径二
- 设置单文档CListView视图中列表的行高
- 57. Insert Interval
- 《深入理解Java虚拟机》——字节码指令简介
- 深度学习目标检测最全最新的方法paper和代码
- Java过滤器和SpringMVC拦截器之间的关系与区别
- 在CentOS 7上安装RabbitMQ服务器
- Node* create()的含义
- Java常用类,包,接口