n*n的網格,從左上角到右下角有多少條線路

1個2*2的網格,從左上角到右下角有6條線路(不可回頭),如圖所示

請問,一個n*n的網格,從左上角到右下角有多少條線路。

方法一、
把網格看做二維座標,向下爲正,向右爲正:
設f(m,n)代表從座標(0,0)到座標(m,n)的移動方法,則
f(m,n)=f(m-1,n)+f(m,n-1)
開始爲f(0,0)=0,f(0,1)=1,f(1,0)=1
進行遞歸運算,退出條件就是m,n至少有個爲0,否則就要繼續遞歸運算。
long getRoutCount(int m, int n)  
{  
	if (m==0 && n==0) return 0;  
	if (m==0 && n==1) return 1;  
	if (m==1 && n==0) return 1;           
	if (m==0) return getRoutCount(m, n-1);             
	if (n==0) return getRoutCount(m-1, n);  
	else   
		return getRoutCount(m-1,n)+getRoutCount(m,n-1);  
}  

方法二、
對於m*n的網格,只需要向右走次,向下m走次,共走m+n次,所以 在(m+n)次中,隨便選m次向下走,剩下的n次向右走就可以了,就是求組合公式C(m+n,n)的值

(不知道這樣解決這個問題對不對,這是我筆試回來後的思考,當時沒有做出來,如有問題,希望多多指教。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章