在坐标系中,从(0,0)到(m,n),每次走一步,只能向上或者向右走,有多少种路径走到(m,n)
(0,0) ->(2,2)
0.0- >1.0 ->2.0 ->2,1 ->2,2 1
0,0->1.0->1,1 ->2.1->2.2 2
0.0 -> 1.0 ->.1,1->1,2->2,2 3
0.0 -> 0.1- >0.2- >1.2 ->2.2 4
0.0 ->0.1 ->1.1->1.2->2.2 5
f(m,n)
#include<stdio.h>
#include<stdlib.h>
//在坐标系内只能向上或者向右
typedef struct node
{
int x, y;
}node;
int cnt;
node nd[100];
int ff(int a, int b, int x, int y, int step)
{
int i;
if (a == x && b == y)
{
cnt++;
for (i = 0; i <= step; i++)
{
printf("(%d,%d) ", nd[i].x, nd[i].y);
}
printf("\n");
return ;
}
else
{
if (x < a && y <= b)
{
nd[step + 1].x = x + 1;
nd[step + 1].y = y;
ff(a, b, x + 1, y, step + 1);
}
if (y < b && x <= a)
{
nd[step + 1].x = x;
nd[step + 1].y = y + 1;
ff(a, b, x, y + 1, step + 1);
}
}
}
int main()
{
int a, b ;
while (scanf("%d%d", &a, &b) != EOF)
{
cnt = 0;
nd[0].x = nd[0].y = 0;
ff(a, b, 0, 0, 0);
printf("路径总数为:%d\n", cnt);
}
system("pause");
}