C++ 计数/打印路径-从(1,1)到(m,n)

C++ 计数/打印路径-从(1,1)到(m,n),c++,recursion,matrix,path-finding,C++,Recursion,Matrix,Path Finding,我想计算并打印从矩阵左下角到参数中给定目标的所有可能路径。始终从坐标1,1开始,并且必须向上或向右移动。但是,目标是通过参数传递的。例如:CountPath3、4 我已经实现了正确地查找路径数,但发现我必须从目标开始,并移动到起点,因为输入是目标位置 int CountPath ( int row, int column ) { if ( row == 1 || column == 1 ) return 1; else return CountPath(row

我想计算并打印从矩阵左下角到参数中给定目标的所有可能路径。始终从坐标1,1开始,并且必须向上或向右移动。但是,目标是通过参数传递的。例如:CountPath3、4

我已经实现了正确地查找路径数,但发现我必须从目标开始,并移动到起点,因为输入是目标位置

int CountPath ( int row, int column )
{
   if ( row == 1 || column == 1 )
      return 1;
   else
      return CountPath(row - 1, column) + CountPath(row, column - 1);
}
输入/输出示例: 投入:3 4 输出:路径数为10

void main()
{
   int m, n;
   cin >> m >> n;
   cout << "The # of paths is " << CountPath( m, n ) << endl;
}

那么,在给定这些规则的情况下,有没有什么递归的方法可以从1,1开始,向上向右移动?如果没有,我如何按上述顺序打印它们?

原因是您实现CountPath函数的方式。在if语句中,您检查起始坐标,因为它们是最终坐标,在递归调用中,您减少坐标,而不是增加坐标。这应该按照您期望的方式工作:

int CountPath ( int row, int column, int maxRow, int maxColumn)
{
   if ( row == maxRow || column == maxColumn )
      return 1;
   else
      return CountPath(row + 1, column, maxRow, maxColumn) + CountPath(row, column + 1, maxRow, maxColumn);
}
现在,您实际使用它的方式也有一点修改:

void main()
{
   int m, n;
   cin >> m >> n;
   cout << "The # of paths is " << CountPath( 1, 1, m, n ) << endl;
}

我只限于我被赋予的主要功能。我无法改变它,这就是我在几乎所有我想到的解决方案中遇到麻烦的地方。这就是为什么我甚至想知道是否有可能从1,1到m,n实现它,反之亦然。你可以用2个参数创建一个伪函数CountPath,它调用并返回你的实函数,比如我们称它为RealCountPath。应该可以解决你的问题:你能想出任何可能的解决方案,只给出main和CountPath,否则的话?你可以按照@bertmoog的建议来做-首先做一个递归调用,然后实际访问字段。在这个简单的例子中,它几乎是相同的代码,你只需要换一种方式来看待它。
void main()
{
   int m, n;
   cin >> m >> n;
   cout << "The # of paths is " << CountPath( 1, 1, m, n ) << endl;
}