智能机器人走迷宫c语言游戏,(动态规划)机器人走迷宫问题(示例代码)

题目一:https://www.nowcoder.com/practice/166eaff8439d4cd898e3ba933fbc6358?tpId=46&tqId=29117&tPage=1&rp=1&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking

题目翻译:

机器人位于m x n网格的左上角(在下图中标记为“开始”)。

机器人只能在任何时间点向下或向右移动。 机器人试图到达网格的右下角(在下图中标记为“完成”)。

有多少个可能的唯一路径?

上面是一个3×7的网格。 有多少个可能的唯一路径?

注意:m和n最多为100。

思路:这道题目是一道典型的动态规划问题。从多个小问题的解的合并能够解决最终原问题的解。得出的递推式:res[i][j] = res[i-1][j] + res[i][j-1];  初始化的时候将res二维数组的第一行第一列都置为1,方便计算。

代码:

classSolution {public:int uniquePaths(int m, intn) {

vector> res(m, vector(n, 1));// 初始化二维数组for (int i = 1; i

res[i][j]= res[i-1][j] + res[i][j-1];

}return res[m-1][n-1];

}

};

题目二:https://www.nowcoder.com/practice/3cdf08dd4e974260921b712f0a5c8752?tpId=46&tqId=29116&tPage=4&rp=4&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking

题目翻译:

唯一路径”的后续跟踪:

现在考虑如果一些障碍物添加到网格。 有多少独特的路径会有?

障碍物和空白区域在网格中分别标记为1和0。

例如,

在3x3网格的中间有一个障碍物,如下所示。

[

[0,0,0],

[0,1,0],

[0,0,0]

]]

唯一路径的总数为2。

注意:m和n最多为100。

思路:这道题其实是上面那个题目的衍生,方法肯定还是dp,但是要对出现障碍物的位置进行特殊处理。试想当只有一行的时候,某个障碍物出现,那么到达路径为0.只有一列的时候也是一样。所以首先初始化的时候对第一行第一列上面出现障碍物的地方将path[i][0]  和path[0][i]都置为0.然后我们还是利用上面的递推式进行计算:res[i][j] = res[i-1][j] + res[i][j-1]。循环计算的时候如果碰到障碍物,就将path[i][j]置为0.这样就解决了这个问题。

代码:

classSolution {public:int uniquePathsWithObstacles(vector > &obstacleGrid) {int row =obstacleGrid.size();int col = obstacleGrid[0].size();

vector > res(row, vector(col, 0));for (int i=0; i

res[0][i] = 1;if (obstacleGrid[0][i] == 1){

res[0][i] = 0;break;

}

}for (int i=0; i

res[i][0] = 1;if (obstacleGrid[i][0] == 1){

res[i][0] = 0;break;

}

}for (int i=1; i

res[i][j]= res[i-1][j] + res[i][j-1];if (obstacleGrid[i][j] == 1)

res[i][j]= 0;

}

}return res[row-1][col-1];

}

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值