Lintcode-动态规划-不同路径二

点击进入题目

解题思路:该题目的解题思路和不同路径的思路基本是一致的,只是有少许不同而已,顶多在解决问题的时候先判断是否有障碍。

解题过程:首先给定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;

个人见解:这道题目稍难了一些,但是如果理清思路,以及注意一些要点,还是挺简单的就过去了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值