拜访-动态规划
Posted ranran1203
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拜访-动态规划相关的知识,希望对你有一定的参考价值。
现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。
给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。
测试样例:
[[0,1,0],[2,0,0]],2,3
返回:2
1 lass Visit { 2 public: 3 4 5 int countPath(vector<vector<int> > map, int n, int m) { 6 // write code here 7 int x1,y1; 8 int x2,y2; 9 for(int i=0;i<n;i++) 10 { 11 for(int j=0;j<m;j++) 12 { 13 if(map[i][j]==1) 14 { 15 x1=i; 16 y1=j; 17 } 18 if(map[i][j]==2) 19 { 20 x2=i;y2=j; 21 } 22 } 23 } 24 if(x1==x2&&y1==y2) 25 return 0; 26 int xt=x1<x2?1:-1; 27 int yt=y1<y2?1:-1; 28 vector<vector<int>>dp(n,vector<int>(m,1)); 29 for(int i=x1+xt;i!=(x2+xt);i+=xt) 30 { 31 dp[i][y1]=map[i][y1]==-1?0:dp[i-xt][y1]; 32 } 33 for(int j=y1+yt;j!=(y2+yt);j+=yt) 34 { 35 dp[x1][j]=map[x1][j]==-1?0:dp[x1][j-yt]; 36 } 37 for(int i=x1+xt;i!=(x2+xt);i+=xt) 38 { 39 for(int j=y1+yt;j!=(y2+yt);j+=yt) 40 { 41 dp[i][j]=map[i][j]==-1?0:dp[i-xt][j]+dp[i][j-yt]; 42 } 43 } 44 return dp[x2][y2]; 45 } 46 };
矩阵1
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 2 0
dp
0 0 1 1 1 0
0 0 1 0 0 0
0 0 1 0 0 0
0 0 1 0 0 0
0 0 1 0 0 0
dp[i][j]=dp[i-1][j]+dp[i][j-1]
0 0 1 1 1 0
0 0 1 2 3 0
0 0 1 3 6 0
0 0 1 4 10 0
0 0 1 5 15 0
以上是关于拜访-动态规划的主要内容,如果未能解决你的问题,请参考以下文章