遞推--街區

萌新待開發發表於2020-11-02

第一行首先輸入街區的維數和障礙數,第二行開始輸入障礙的座標,人從左上角開始只能進行右移動或是向下移動,目的地為右下角。

輸出共有幾種路線。

 

 

# include<iostream>
using namespace std;
int dp[101][101];  // 儲存走到每個街區的路數

int main()
{
	int i;
	for (i = 0; i <= 100; i++)
		for (int j = 0; j <= 100; j++)
			dp[i][j] = 1;
	int n, m;  // 街區的維數和障礙數
	cin >> n >> m;
	while (m--)  // 將每個有障礙的街區置為0 
	{
		int a, b;
		cin >> a >> b;
		dp[a][b] = 0;
	}
	for (i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
		{
			if (dp[i][j] != 0)  //不考慮已經被置為0的有障礙的街區 
			{
				if (i == 1 && j != 1)  // 給第一行街區賦值,不包括初始位置 
					dp[i][j] = dp[i][j - 1];
				else if (i != 1 && j == 1)  // 給第一列街區賦值,不包括初始位置
					dp[i][j] = dp[i - 1][j];
				else if (i != 1 || j != 1)  //除初始位置的其他位置 
					dp[i][j] = (dp[i][j - 1] + dp[i - 1][j]) % 10000; // 每個街區的路徑數為左邊街區的路徑數和上方路徑數之和 
			}
		}

	cout << dp[n][n] << endl;
	return 0;
}

 

相關文章