60分TLE求助
查看原帖
60分TLE求助
1304706
yanrs1019楼主2024/5/5 10:53
#include<bits/stdc++.h>
using namespace std;
int n,m,cnt;
bool mapn[25][25];
void put(int x,int y)//放置马和马能走道的地方,标记为不能走 
{
	if(x>=0&&x<=n&&y>=0&&y<=m)mapn[x][y]=1;
}
void dfs(int x,int y)
{
	if(x==n&&y==m)
	{
		cnt++;
		return ;
	}
	if(x+1<=n&&!mapn[x+1][y])dfs(x+1,y);
	if(y+1<=m&&!mapn[x][y+1])dfs(x,y+1);
}
int main()
{
	int cx,cy,i,j,k,l;
	cin>>n>>m>>cx>>cy;
	put(cx,cy);
	for(i=1;i<=2;i++)//i是put第一个参数的加或者减的判断 
		for(j=1;j<=2;j++)//j是put第二个参数的加或者减的判断 
			for(k=1;k<=2;k++)//k是put第一个参数加或者减的值 
				for(l=1;l<=2;l++)//l是put第二个参数加或者减的值 
				{
					if(k==l)continue;//马不能走田,所以如果加减相等要跳过
					//放置马 
					if(i==1)
					{
						if(j==1)put(cx-k,cy-l);
						else put(cx-k,cy+l);
					}
					else
					{
						
						if(j==1)put(cx+k,cy-l);
						else put(cx+k,cy+l);
					}
				}
	dfs(0,0);//递归搜索 
	cout<<cnt;
	return 0;
}

2024/5/5 10:53
加载中...