一个人工作地点在家东N条街区,北N条街区,在不穿越(可到达)的条件下有多少种走法?...

本文介绍了一种算法,用于计算从工作地点到任意给定点的所有可能路径数量,通过递推公式实现路径计数。

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  }

 

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

 

转载于:https://www.cnblogs.com/lixiaohui-ambition/archive/2013/01/10/2855140.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值