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  }

 

 以上仅代表个人观点,欢迎读者批评指正。