本文主要是介绍拜访(动态规划),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。
给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。
测试样例:
[[0,1,0],[2,0,0]],2,3
返回:2
解题思路:
因为题目限制了在某个位置经理只能往两个方向走,所以就经理全程只有四种可以走的走法分别为左上、左下、右上、右下。所以一开始要判断经理和商家的方向,找到其行走的方向,若商家在经理的左下方则经理全程只能向左或者向下行走。
例如经理在黄色位置,商家在蓝色位置,橘色的为不能走的位置,空白的为可以走的路径,则经理只能往左下走。
动态规划思想:
每一个位置可以走的位置可以由其左上、左下、右上、右下相加得到,当选定一个方向之后只能由该方向的相加得到,如上面的例子只能由其上方和右边两个位置可达路径相加。
所以一开始只能由经理所在的位置往商家所在的位置斜着移动,动态的获得路径和。
经理只能往下或者往走,所以其到商家的位置等于商家所在的位置的上方位置的可达路径数+商家所在的位置的右方的可到达路径数的和,即为2。
这篇关于拜访(动态规划)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!