题目描述:一个长方形,由m*n个大小相同的个子组成,左上角为坐标零点(0,0),求其中任意一点A(x1, y1)到点B(x3, y3)的路径总条数,认为x1<=x3,y1<=y3
分析:这题可以采用动态规划的思想,假设k[a][b]代表从(0,0)到(a,b)的路径的总条数,则有
递推公式:k[x][y] = k[x+1][y] + k[x][y+1],也就是从(x,y)到目的地的总路径数等于先向右(x+1, y)的总路径数k[x][y+1],与先向下k[x][y+1]路径总数之和
边界条件:如图,B点(终点)所在的行和列均只有一个选择,也就是k[row][] 与 k[][col]等于1
C++代码如下:
#include <iostream>
#include <vector>
using namespace std;
int getPathNum( int row, int col )
{
if ( row == 0 && col == 0 )//两点重合
return 0;
else if ( row == 0 || col == 0 ) //当两点在同一行或者同一列
return 1;
vector< vector<int> > path( row + 1 );
for ( int i=0; i<=row; i++ )
path[i].resize( col + 1 )