求助
查看原帖
求助
701230
Jesusdalao楼主2022/7/13 22:06

第3,4个点超时

#include<bits/stdc++.h>
using namespace std;
int tot,x,y,n,m;
//花花卡的神秘力量 
int F[8][2]={{-1,-2},{-2,-1},{-2,1},
				{-1,2},{1,2},{2,1},{2,-1},{1,-2}};//马的8种走法
bool f[25][25]={1};
void dfs(int x1,int y1)//深度优先搜索
{
	if(x1==n&&y1==m) 
	{
		tot++;
		return;
	}//到达终点记录并回溯
	if(x1+1<=n&&!f[x1+1][y1])//向下走,判断边界和标记
	{
		f[x1+1][y1]=1;//标记
		dfs(x1+1,y1);//继续走
		f[x1+1][y1]=0;//回溯取消标记
	}
	if(y1+1<=m&&!f[x1][y1+1])//向左走
	{
		f[x1][y1+1]=1;
		dfs(x1,y1+1);
		f[x1][y1+1]=0;
	}
}
int main()
{
	scanf("%d%d%d%d",&n,&m,&x,&y);
	f[x][y]=1;//马的位置也一定要标记
	for(int i=0;i<8;i++)
		if(x+F[i][0]<=n&&x+F[i][0]>=0&&y+F[i][1]<=m&&y+F[i][1]>=0)//判断边界
			f[x+F[i][0]][y+F[i][1]]=1;//标记马的控制点
	dfs(0,0);//从起点开始走
	printf("%d",tot);
}
2022/7/13 22:06
加载中...