萌新请教思路错在哪里qwq
#include<iostream>
using namespace std;
int n,m;
int cx,cy; //马的坐标
int dp[22][22]; //dp[i][j]代表卒走到(i,j)的路径条数
int main(){
cin>>n>>m;
cin>>cx>>cy;
//马能走到的地方:(cx-1,cy-2) (cx-1,cy+2)
//(cx+1,cy-2) (cx+1,cy+2)
//卒不能走到这些地方
int flag=0;
//初始化
for(int i=0;i<n;i++){
//第1列
if( (i==cx-1 && cy-2==0) || (i==cx+1 && cy-2==0) )
flag=1; //设flag=1是因为一旦这里走不了,那ta下面都走不到了
if(flag==0)
dp[i][0]=1;
if(flag==1)
dp[i][0]=0;
}
flag=0; //归零
for(int i=0;i<m;i++){
//第一行
if( (cx-1==0 && cy-2==i) || (cx-1==0 && cy+2==i) )
flag=1;
if(flag==0)
dp[0][i]=1;
if(flag==1)
dp[0][i]=0;
}
for(int i=1;i<n;i++){
for(int j=1;j<m;j++){
if((i==cx-1 &&j==cy-2) || (i==cx-1 && j==cy+2 )
|| (i==cx+1 && j==cy-2 )|| (i==cx+1 && j==cy+2))
dp[i][j]=0;
else
dp[i][j]=dp[i-1][j]+dp[i][j-1]; //从上面走来的路径数+从左面走来的路径数
}
}
cout<<dp[n-1][m-1];
}