7个AC,3个TLE,怎么避免TLE?
  • 板块P1443 马的遍历
  • 楼主Eric12
  • 当前回复7
  • 已保存回复7
  • 发布时间2021/8/5 12:54
  • 上次更新2023/11/4 11:56:39
查看原帖
7个AC,3个TLE,怎么避免TLE?
481471
Eric12楼主2021/8/5 12:54
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int gotox[8]={2,-2,2,-2,1,1,-1,-1},gotoy[8]={1,1,-1,-1,2,-2,-2,2}; //千辛万苦的数组,因为把不清格子和点了。 
int n,m,x,y,a[401][401],visited[401][401];
struct node
{
	int x,y,step;
	int cj(int xxx,int yyy,int sss)
	{
		x=xxx;y=yyy;step=sss;
	}
};
void bfs(int fx,int fy)
{
	queue<node>q;
	node abc={x,y,0};
	q.push(abc);
	memset(visited,0,sizeof(visited));
	while(!q.empty())
	{
		abc=q.front();
		int xx=abc.x,yy=abc.y,ss=abc.step;
		if(xx==fx&&yy==fy)
		{
			a[fx][fy]=ss;
			return;
		}
		for(int i=0;i<8;i++)
		{
			int nextx=xx+gotox[i],nexty=yy+gotoy[i];
			if(nextx<=n&&nextx>=1&&nexty<=m&&nexty>=1&&!visited[nextx][nexty])
			{
				visited[nextx][nexty]=true;
				abc.cj(nextx,nexty,ss+1);
				q.push(abc); 
			}
		}
		q.pop();
	}
	a[fx][fy]=-1;
}
int main()
{
	scanf("%d%d%d%d",&n,&m,&x,&y);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			bfs(i,j);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
			printf("%-5d",a[i][j]);//据说printf很实用,就在这里。
		printf("%c",'\n'); 
	}
	return 0;
} 
2021/8/5 12:54
加载中...