1. 程式人生 > >網格走法

網格走法

題目 highlight brush ios for 計算 pre 下標 space

有一個X*Y的網格,小團要在此網格上從左上角到右下角,只能走格點且只能向右或向下走。請設計一個算法,計算小團有多少種走法。給定兩個正整數int x,int y,請返回小團的走法數目。

/*動態規劃:
     對於x*Y網格,dp[i][j]表示(i,j)位置一共有多少種走法,
     由於只能向左和向右走,所以第一列和第一行所有位置的走法都是1,即dp[i][0]=1,dp[0][j]=1(0=<i<=x,0<=j<=y),
     對於其他位置,走法應該等於其左邊格點的走法和其上面格點的走法之和,dp[i][j]=dp[i-1][j]+dp[i][j-1],
     畫個圖比較容易理解。
*/  
/*例如題目中的輸入3 2 其實就是一個4*3的格子,至於為什麽是4*3是因為小團是從左上角走到右下角,即小團
並不在這個格子裏,這個是整個問題理解的關鍵。3*2網絡的各個點的走法數目如下:
10 6 3 1
4  3 2 1
1  1 1 1
3*2的走法就是格子中4*3的那個格子的走法數目
*/
#include<iostream>
using namespace std;

int main()
{
	int x, y;
	cin >> x >> y;
	int array[11][11];
	for (int i = 0; i <=x; i++)
	{
		array[i][0] = 1;
	}
	for (int i = 0; i <=y; i++)
	{
		array[0][i] = 1;
	}
	for(int i=1;i<=x;i++)
		for (int j = 1; j <=y; j++)
		{
			array[i][j] = array[i - 1][j] + array[i][j - 1];
		}
	cout << array[x][y] << endl;//這裏的數組下標是從0開始的,所以array[x][y],就是x和y都增加了1
	return 0;
}

  

網格走法