蒟蒻求救
  • 板块灌水区
  • 楼主osfly
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/3/10 17:05
  • 上次更新2023/11/5 02:14:14
查看原帖
蒟蒻求救
339299
osfly楼主2021/3/10 17:05

原题传送门

#include<cstdio>
#include<cstring>
int n;
int l;
int dp[3030][3030];
bool vis[3030][3030];
int sx,sy,ex,ey;
int minn;
int nxtx[8]={2,1,-2,-1,2,1,-2,-1};
int nxty[8]={1,2,-1,-2,-1,-2,1,2};
int min(int a,int b){if(a<b) return a;else return b;}
void dfs(int x,int y,int step)
{
	if(x==ex&&y==ey)
	{
		minn=min(step,minn);
		return ;
	}
	if(step>minn) return ;
	if(step>dp[x][y]) return ;
	dp[x][y]=step;
	vis[x][y]=true;
	for(int i=0;i<8;i++)
	{
		int nx=x+nxtx[i];
		int ny=y+nxty[i];
		if(nx<0||ny<0||nx>l-1||ny>l-1) continue;
		if(vis[nx][ny]) continue;
		dfs(nx,ny,step+1);
	}
	vis[x][y]=false;
}
int main()
{
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d",&l);
		scanf("%d%d",&sx,&sy);
		scanf("%d%d",&ex,&ey);
		if(sx==ex&&sy==ey) printf("0\n");
		else
		{ 
			minn=0x3f3f3f3f;
			memset(dp,0x3f3f3f3f,sizeof(dp));
			dfs(sx,sy,0);
			printf("%d\n",minn);
		}
	}
	return 0;
}

TLE了,0分

2021/3/10 17:05
加载中...