标签:
现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。
给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。
[[0,1,0],[2,0,0]],2,3
返回:2
class Visit { public: int countPath(vector<vector<int> > map, int n, int m) { // write code here int x1, y1, x2, y2; for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j) if(map[i][j] == 1){x1 = i; y1 = j;} else if(map[i][j] == 2){x2 = i; y2 = j;} int nx = std::abs(x1 - x2)+1; int ny = std::abs(y1 - y2)+1; vector<vector<int> > count(nx, vector<int>(ny, 0)); count[0][0] = 1; for(int i = 1; i < nx; ++i) if(map[x1+((x2>x1)?i:-i)][y1] != -1) count[i][0] = count[i-1][0]; for(int i = 1; i < ny; ++i) if(map[x1][y1+((y2>y1)?i:-i)] != -1) count[0][i] = count[0][i-1]; for(int i = 1; i < nx; ++i) for(int j = 1; j < ny; ++j) if(map[x1+((x2>x1)?i:-i)][y2+((y2>y1)?j:-j)] != -1) count[i][j] = count[i-1][j] + count[i][j-1]; return count[nx-1][ny-1]; } };
标签:
原文地址:http://www.cnblogs.com/qiaozhoulin/p/5796952.html