如何使用递归计算从A点到B的可用路径数

时间:2015-06-12 21:38:06

标签: c++

我有一个编程任务,要求在最大尺寸为16的网格上找到从A点到B点的可用东北路径数。

目前我编写的程序能够计算从A点到B点的一条路径,但不确定如何计算所有可用路径。

目前我的代码如下:

#include <iostream>

using namespace std;
const int max = 17;
const int intial = 16;
int numPath = 0;
int mover(char grid[max][max], int x, int y, int max);

int main()
{
char grid[max][max];

grid[intial][0] = 'A';
int north = 0, east = 0;
cout << "How many points north of A is B? ";
cin >> north;
cout << endl << "How many points east of A is B? ";
cin >> east;
cout << endl;

if (north > 16 && east > 16)
{
    cout << "You entered to high of a number" << endl;
    exit(1);
}
grid[intial - north][east] = 'B';
int paths = mover(grid, north, east, max);

cout << "Number of paths avaliable is " << paths << endl;
}

 int mover(char grid[max][max], int x, int y, int max)
 {


if (grid[x][y] == 'B')
{
    numPath = 1;
}
else
{
    if (x > (intial - x))
    {
        mover(grid, x - 1, y, max);
    }
    if (y > 0)
    {
        mover(grid, x, y + 1, max);
    }
}
return numPath;
}

有人可以帮我推动正确的方向吗?

1 个答案:

答案 0 :(得分:0)

我将概述如何开始: 让我们考虑x,y的网格,其中0 <= x <= xmax且0 <= y <= ymax。 路径从0,0(A点)开始,到xmax,ymax(B点)结束。

我们想要写一个递归函数pathCountTo(x,y),以便pathCountTo(xmax,ymax)给出从A到B的路径数。

pathCountTo(0,0)= 1,因为只有一种方法可以从A开始。

有三个递归案例,您已经确定了两个案例。 情况1:pathCountTo(0,y)= pathCountTo(0,y-1)。 (左边缘上一个点的唯一路径是从正下方的点开始。)

案例2:pathCountTo(x,0)= pathCountTo(x-1,0)。 (沿着底边的推理相同)。

案例3:pathCountTo(x,y)= ?.提示:在最后一种情况下,路径可以是左侧或底部。