DP問題練習2:網格路徑數量計算問題

DP問題練習2:網格路徑數量計算問題

問題描述

有一個機器人的位於一個 m × n 個網格左上角。
機器人每一時刻只能向下或者向右移動一步。機器人試圖達到網格的右下角。
問有多少條不一樣的路徑?javascript

樣例:

給出 m = 3 和 n = 3, 返回 6.
給出 m = 4 和 n = 5, 返回 35.java

思路

用座標i,j標識格子的位置,左上角爲(0,0),右下角爲(m-1,n-1)
狀態轉移方程:
f(i,j) = i>0?f(i-1,j):0 + j>0?f(i,j-1):0  //f(i,j)表示(i,j)位置的路徑數量,i-1和j-1都要在容許的範圍裏,不然直接取值0

代碼:

var M = 3;
var N = 3;
var LOG = console.log;
(()=>{
    main()
})();
function countPaths(m,n){
    return (m==n && m==0) ? 1 : ((m > 0 ? countPaths(m-1,n) : 0) + (n > 0 ? countPaths(m,n-1) : 0));
}
function main(){
    console.log(countPaths(M-1,N-1));
}

其實三年前我學數據結構這門課的時候作過一道相似的題,不過是求全部可能的路徑。當時編碼量不到800行,因此屁都不懂,就去網上找了一個解答,使用DFS。因爲是第一次寫比較複雜的程序,因此有很深的印象。就用dfs寫一個解答緬懷一下吧:算法

/**
 * 從左上角到右下角可能的路徑數量  使用DFS算法
 * @param {[type]} m [description]
 * @param {[type]} n [description]
 */
function DFS_Pro(m,n){
    var count = 0;
    function dfs(x,y){
        if(x == m && y == n){
          count ++;
        }else{
          if(x < m)
            dfs(x+1,y)
          if(y < n)
            dfs(x,y+1)
        }
    }

    dfs(0,0);
    return count;
}
相關文章
相關標籤/搜索