走格子/走棋盘问题

选择题:在如下8*6的矩阵中,请计算从A移动到B一共有多少走法?要求每次只能向上或向右移动一格,并且不能经过P。()








B











P



















A






A 492   B  494   C  496  D  498

看一次忘一次,决定这次再次理解一便,并更加形象的理解:

试想:

题目若是m*n表格里面,从A到B,不管其如何走,必然要经过m+n个格子(这个就不需要证明了吧)。然后这m+n个格子里面只有两种状态,向上或向右;而且为到达B,必须有n个向右走,m个向上走;如此,从这m+n个格子里选择n个向右走就ok了(剩下的就向上走,当然可以选择m向上走,剩下向右走)。这样可能会比原解释的要更加清楚些~

其他的,参考原解释:

附原解释:

解答:

这是有关组合数学中排列组合的一道题。

从n个元素中任取r个元素一组,若不考虑它们的顺序时,则称为从n中取r的组合,它的方案数以C(n,r) 表示;

从n个元素中任取r个元素按顺序排成一列,则称为从n中取r的排列,其排列的方案数以p(n,r) 表示。

这道题等同于下面的一道题:

许多街道都建成方格形。从家中出发到目的地,向东要走m条街,想北要走n条街,试问从家中到工作地点最短路径有几条?

若将家作为 (0,0)点,工作地点作为(m,n)点,问题就化为从(0,0)点到(m,n)点有几条最短路径(如下图)

走格子/棋盘问题 有多少条路径可走

 

从(0,0)点到(m,n)点走的路径,必然是向x轴方向过m次街道,y轴方道路向过n个街道。即每条道路和由m个x和n个y构成的共m+n的排列一一对应,可以看成在m+n个格中

选m个格子,填上x,剩下的n个格子填上y,这样的排列数为c(m+n,m),同理,这样的排列数为c(m+n,n)。

现在我们来解决拿到面试题:

每个方格看做一个点,得到下面坐标图:

走格子/棋盘问题 有多少条路径可走

首先从A到B总共有c(7+5,5)种走法,从A到P有c(3+3,3)种走法,从P到B有c(4+2,2)种走法。

所以不经过点P得走法共有c(12,5)-(c(6,3)*c(6,2))种,即492种,选A。



给定一个m*n的格子或棋盘,问从左下角走到右上角的走法总数(每次只能向右或向上移动一个方格边长的距离)。

解答:我们可以把棋盘的左下角看做二维坐标的原点(0,0),把棋盘的右上角看做二维坐标(n,n)(坐标系的单位长度为小方格的变长)                

用f(i,j)表示移动到坐标f(i,j)的走法总数,其中0=<i,j<=n,我们即求f(n,n)这样我们就可以递归的定义子问题
f(n,n)=f(n-1,n)+f(n,n-1).
于是状态f(i,j)的状态转移方程为:
f(i,j)=f(i-1,j)+f(i,j-1)   if i,j>0
f(i,j)=f(i,j-1)            if i=0
f(i,j)=f(i-1,j)            if j=0

初始情况就为:f(0,0)=0, f(0,1)=1, f(1,0)=1,这个问题可以在时间O(n^2),空间O(n^2)内求解,非递归解。

相应程序为:

递归方法的程序:

走格子/棋盘问题 有多少条路径可走

非递归方法的程序:

走格子/棋盘问题 有多少条路径可走


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值