对于没有路障问题的路径问题
对于不是第一行和第一列的坐标有 f(i)(j)=f(i-1)(j)+f(i)(j-1)
对于有路障问题,比如本题中(0)(5)之后的坐标均为0
我们可以列出如下等式
假设有误路障用数组A表示,A[0][5]=1
#include <iostream>
using namespace std;
int main(){
int m=4;
int n=8;
int f[m+1][n+1]={0};
int A[m+1][n+1]={0};
A[0][5]=A[1][3]=A[2][5]=1;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(A[i][j]==1){
f[i][j]=0;
continue;
}
if(i==0 && j==0){
f[i][j]=1;
continue;
}
f[i][j]=0;
if(i>0) f[i][j] += f[i-1][j];
if(j>0) f[i][j] += f[i][j-1];
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++)
cout<<f[i][j]<<" " ;
cout<<endl<<endl;
}
}
对应本题给的例子求得如下