请教思路指正
查看原帖
请教思路指正
504142
micmic楼主2022/5/26 09:40

萌新请教思路错在哪里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];
}
2022/5/26 09:40
加载中...