这题需要注意的点是
第一种初始化表格边界的方式是:
f[1][1] = 1;
循环内部是这样写的
if(i - 1 > 0) f[i][j] += f[i-1][j];
if(j - 1 > 0) f[i][j] += f[i][j-1];
第二种是
for(int i=0; i<=n; i++){
if(!b[i][0])f[i][0] = 1;
else if(b[i][0]) break;
}
for(int i=0; i<=m; i++){
if(!b[0][i])f[0][i] = 1;
else if(b[0][i]) break;
}
初始化x轴和y轴 但是在初始化之后要去处理那些题目给出的不能走的点
如果提前把不能走的点设置好了,这里初始化又会把那些点设置回去
#include <cstdio>
int f[1000][1000];
int b[1000][1000];
int main()
{
int m,n;
int c1,c2;
scanf("%d%d%d%d",&n,&m,&c1,&c2);
b[c1][c2]=1;
b[c1-2][c2-1]=1;
b[c1-1][c2-2]=1;
b[c1+2][c2+1]=1;
b[c1+1][c2+2]=1;
b[c1-2][c2+1]=1;
b[c1-1][c2+2]=1;
b[c1+1][c2-2]=1;
b[c1+2][c2-1]=1;
for(int i=0; i<=n; i++){
if(!b[i][0])f[i][0] = 1;
else if(b[i][0]) break;
}
for(int i=0; i<=m; i++){
if(!b[0][i])f[0][i] = 1;
else if(b[0][i]) break;
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
f[i][j]=f[i][j-1]+f[i-1][j];
if(b[i][j])
f[i][j]=0;
}
}
printf("%d",f[n][m]);
return 0;
}

本文详细介绍了一种路径寻找算法的实现过程,包括初始化边界条件的方法及如何处理障碍物。通过具体的代码示例,展示了如何利用递推关系计算从起点到终点的不同路径数量。

680

被折叠的 条评论
为什么被折叠?



