RT:
假设当前这个人所在的点和家所在位置表示的梯形顶边长度为n,高为m,f(n,m)表示从工作地点走到该点的所有走法,
则从上一个状态到该状态可能是往左走,也可能是往下走走到该状态(前提是不越过对角线),所以
F(n,m)=f(n-1,m+1)+f(n+1,m)
f(0)(0)即是满足条件的所有走法。
代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 #define N 5 4 5 void main() 6 { 7 int n_ways; 8 9 int num[N+1][N+1]; 10 int i,j; 11 int num_from_right,num_from_up; 12 13 for(i=0;i<=N;i++) 14 num[i][N-i]=1; 15 16 for(j=1;j<=N;j++) 17 { 18 for (i=0;i<=N-j;i++) 19 { 20 num_from_right=((i+1)>=0&&(i+1)<=N&&(N-j-i)>=0&&(N-j-i)<=N)?num[i+1][N-j-i]:0; 21 num_from_up=((i-1)>=0&&(i-1)<=N&&(N-j-i+1)>=0&&(N-j-i+1)<=N)?num[i-1][N-j-i+1]:0; 22 num[i][N-j-i]=num_from_right+num_from_up; 23 } 24 } 25 n_ways=num[0][0]; 26 27 printf("The num of ways you can go is:%d.\nPress any key to continue...",n_ways); 28 getch(); 29 }
以上仅代表个人观点,欢迎读者批评指正。