找出从A到B一共有几条路,马在的地方和能去的地方不能走
分析:
可以用递推a[i][j]=a[i][j-1]+a[i-1][j];
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int n,a[20][20]={0},i,j,m,c,d;
cin>>n>>m>>c>>d;
c+=2;
d+=2;
for(i=c-2;i<c+3;i++)
for(j=d-2;j<d+3;j++)
{
if((abs(j-d)==2&&abs(i-c)==1)||(abs(j-d)==1&&abs(i-c)==2)||(i==c&&j==d))
a[i][j]=1;
}
for(i=2;i<n+3;i++)
for(j=2;j<m+3;j++)
{
if(a[i][j]==1)
a[i][j]=0;
else
if(i==2&&j==2)
a[i][j]=1;
else
if(i==2)
a[i][j]=a[i][j-1];
else
if(j==2)
a[i][j]=a[i-1][j];
else
a[i][j]=a[i][j-1]+a[i-1][j];
}
cout<<a[n+2][m+2]<<endl;
}
感受:
这个题我看过一遍原题,并且照着敲了一遍,但是真要到自己想了,就是费事,细节好多都没有注意,比如说越界,加了不该加的的数,最重要的感悟就是你感觉会了不一定是真的会了,必须倒过来再敲几遍,最好一次过。。。