LeetCode 63 -- 不同路径 II ( Unique Paths II ) ( C语言版 )

题目描述  :

 

解题思路 : 机器人每次只能向下或者向右走 , 我们可以用一个二维数组记录机器人每走到一个位置时 , 所经历的可能性 , 而当它走到一个位置时所经历的可能性就是( x-1 , y )和 (x ,y-1 ) 走法之和 , 但是这里有一个问题就是遇到障碍物是如何计算 

如下图所示 : 当我们遇到障碍物时就将障碍物坐标对应的位置赋0 , 当我们在处理第一行和第一列时 , 会发现只要再第一行或第一列出现了一个障碍物时 , 那么该障碍物后边的路将会被封死 , 所以我们只需要将第一行和第一列特殊处理 , 然后再按照不同路径I 的做法处理即可 : 

    

代码如下 : 

int uniquePathsWithObstacles(int** a ,int Row, int Col) {
    //如果第一个位置就是障碍时,就不可能到达终点
    if(a[0][0]==1)
        return 0;
    int n[Row][Col];
    int i=0,j=0;
    //处理第一行
    while(i<Col){
        if(a[0][i]==0){
            n[0][i]=1;
            i++;
        }
        else
            while(i<Col){
                n[0][i]=0;
                i++;
            }
    }
    //处理第一列
    while(j<Row){
        if(a[j][0]==0){
            n[j][0]=1;
            j++;
        }
        else
            while(j<Row){
                n[j][0]=0;
                j++;
            }
    }
    for(i=1;i<Row;i++)
        for(j=1;j<Col;j++){
            if(a[i][j]==1)
                n[i][j]=0;
            else
                n[i][j]=n[i-1][j]+n[i][j-1];
        }
    return n[Row-1][Col-1];
}

猜你喜欢

转载自blog.csdn.net/ds19980228/article/details/82715801