Why TLE!!!!!!
  • 板块P1443 马的遍历
  • 楼主xk2013
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/16 11:28
  • 上次更新2024/7/16 13:03:36
查看原帖
Why TLE!!!!!!
998662
xk2013楼主2024/7/16 11:28

rt!

#include <cstdio>
#include <cstring>
#include <queue>

struct Node
{
	int x;
	int y;
	int step;
};

bool vis[401][401];
const int dir[8][2] = {{-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}};
int n, m, x, y;
int bfs(int fx, int fy);

int main(void)
{
	scanf("%d %d %d %d", &n, &m, &x, &y);
	
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			printf("%-5d ", bfs(i, j));
		}
		
		putchar('\n');
	}
	
	return 0;
}

int bfs(int fx, int fy)
{
	std::queue <Node> q;
	memset(vis, 0, sizeof vis);
	
	q.push(Node{x, y, 0});
	vis[x][y] = true;
	
	while (!q.empty())
	{
		Node f = q.front();
		q.pop();
		
		if (f.x == fx && f.y == fy)
		{
			return f.step;
		}
		
		for (int i = 0; i < 8; i++)
		{
			int tx = f.x + dir[i][0];
			int ty = f.y + dir[i][1];
			
			if (0 < tx && tx <= n && 0 < ty && ty <= m && !vis[tx][ty])
			{
				vis[tx][ty] = true;
				q.push(Node{tx, ty, f.step + 1});
			}
		}
	}
	
	return -1;
}

2024/7/16 11:28
加载中...