问题:一个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];