从(0,0)到(m,n)有多少种路径?

  • 题目
    从(0,0)到(m,n),每次走一步,只能向上或者向右走,有多少种路径走到(m,n)
  • 思路:
    递归的思想,在当前路径下,要么向右,要么向上,两种选择。
//#include"stdafx.h"
#include<iostream>
#include<algorithm>
#include<time.h>
#define Max 1000
int path[Max][2];
int m, n;
using namespace std;
//路径输出
void print_path(int index) {
	int i;
	for (i = 0; i < index; i++)
		printf("(%d,%d)->", path[i][0], path[i][1]);
	printf("(%d,%d)\n", path[i][0], path[i][1]);
}
//搜索算法:递归的思想,当前路径要么向右,要么向上
void fun(int x, int y, int index,int &count) {
	path[index][0] = x;
	path[index][1] = y;
	if (x == m && y == n) {
		count++;
		print_path(index);
		return;
	}
	else if (x > m || y > n)
		return;
	fun(x + 1, y, index + 1, count);
	fun(x, y + 1, index + 1, count);
}
int main() {
	int count = 0;
	//cin >> m >> n;
	while (cin >> m >> n) {
		fun(0, 0, 0, count);
		cout << count << endl;
		count = 0;//循环输出,就要每次将count初始化=0
	}
	//getchar();
	return 0;
}
  • 测试结果如下
    从(0,0)到(m,n)有多少种路径,棋盘问题


一般规律:

从A到B,不管其如何走,必然要经过m+n个格子。然后这m+n个格子里面只有两种状态,向上或向右;而且为到达B,必须有n个向右走,m个向上走;如此,从这m+n个格子里选择n个向右走就ok了(剩下的就向上走,当然可以选择m向上走,剩下向右走)。

答案就是:(0,0)–>(m,n)
从(0,0)到(m,n)有多少种路径,棋盘问题

另外:

如果当棋盘中出现了P(k,h)不能走的情况:那么就分步骤;先算没有P有多少种假设为:M;算出(0,0)Pm1种;然后算出P(m,n)m2种;用M-m1-m2;就是最后的种数;
即是说:用总的数目减去必须经过P的路径,就是不需要经过P的路径和。

相关文章:

  • 2021-05-31
  • 2021-09-17
  • 2022-12-23
  • 2022-12-23
  • 2022-01-16
  • 2021-09-03
  • 2021-07-21
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-18
  • 2021-10-10
  • 2021-12-16
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案