【算法】矩阵走法问题
来源:互联网 发布:淘宝短信营销资料 编辑:程序博客网 时间:2024/05/24 06:02
问题:一个m*n矩阵,从角走到对角不走多余的路一共有多少种走法?
算法:
1.如果用A和B来表示每一步的话,因为步数一定,而AB可以任意组合,所以这是个排列组合的问题,m+n的全排列除以m和n的全排列就可以了。
2.按照递推的思路,假设从左上角走到右下角,当前格子的走法是左边的走法加上面的走法,所以遍历递推一遍就可以了。
代码:
1.g(n,m)=(m+n)!/(m!*n!)
2如下:(伪代码)
main(){
g(m,n);//这里是从m*n的格子的边上走
}
private static int g(int m, int n) {
int h[][]=new int[m+1][n+1];
S_Init(h,0);//初始化为0
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++){
if(i>0&&j>0){
h[j][i]=h[j-1][i]+h[j][i-1];
}
}else{
h[j][i]=1;
}
}
return h[m][n];
}
一些思考:
A..如果不允许经过其中的一个点P(萌P鸽了),一共有多少总走法?
按照思路1,直接减去到达P点的组合数即可,g'(m,n)=g(m,n)-g(pm,pn)*g((m-pm),(n,pn))。
按照思路2,修改一下返回值就可以了,大体上和这个方法相同
http://www.mamicode.com/info-detail-1005851.html
B.如果在某一个方向上,允许往反方向走,但不允许走重复的路,一共有多少总走法?
比较有意思的一个结果,答案是n^(m-1)(或m^(n-1))
对于每一个点,把来自不同方向的路径分别考虑,在纸上写一下递推,很容易得到这个结果。
http://tieba.baidu.com/p/2455136622
- 【算法】矩阵走法问题
- 矩阵走法问题
- 矩阵走法
- 走台阶问题算法
- 算法 拉丁矩阵问题
- 【算法】老鼠走迷宫问题的解答
- 算法:网格走法数目
- 马的走法问题
- 旋转矩阵算法性能问题
- 2.算法:棋盘路径问题。走格子/棋盘问题 有多少条路径可走
- 常见算法:c语言矩阵算法问题
- 矩阵对角之间的走法常见问题之动态规划
- 一个经典Delphi算法(老鼠走迷宫问题)
- 【重走普及路】【经典算法】约瑟夫问题
- 走迷宫问题——非递归算法
- 数据结构与算法之老鼠走迷宫问题
- 数据结构与算法之老鼠走迷宫问题
- 走格子/走棋盘问题
- ASPxUploadControl上传
- MIC编程
- Linux下安装webstorm
- 功能测试(二)软件的易用性
- 动画之逐帧
- 【算法】矩阵走法问题
- 内存中的堆与栈到底是怎么回事?
- getRecordArray
- 【5】EditText——输入框
- 使用Windows Live Writer离线写csdn博客
- 水木社区上看到的一道概率题
- iPhone计步器
- 自动增长字段
- hdu 1561 The more, The Better 树形dp