第一行首先输入街区的维数和障碍数,第二行开始输入障碍的坐标,人从左上角开始只能进行右移动或是向下移动,目的地为右下角。
输出共有几种路线。
# 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;
}