AT5220 [ABC151D] Maze Master

题目传送门:AT5220

这个题目用 BFS 解决即可,对于每一个点 (i, j),判断是否是空格,是的话就 BFS 搜索即可,总的复杂度是 O(H2W2)O(H^2W^2),完全够用。

代码:

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;

const int N = 25;
char ch[N][N];
int dx[4] = { 0, 0, 1, -1 };
int dy[4] = { 1, -1, 0, 0 };
int H, W;
int ans;
bool visit[N][N];

struct Node
{
	int x, y, times;
};

void bfs(int x, int y)
{
	queue<Node> q;
	Node t;
	t.x = x; t.y = y; t.times = 0;
	q.push(t);
	visit[x][y] = true;
	while (!q.empty())
	{
		Node l = q.front();
		ans = max(ans, l.times);
		q.pop();
		for (int i = 0; i < 4; i++)
		{
			int new_x = l.x + dx[i];
			int new_y = l.y + dy[i];
			if (new_x < 1 || new_x > H || new_y < 1 || new_y > W || visit[new_x][new_y] || ch[new_x][new_y] == '#')
			{
				continue;
			}
			Node tmp;
			tmp.x = new_x;
			tmp.y = new_y;
			tmp.times = l.times + 1;
			q.push(tmp);
			visit[new_x][new_y] = true;
		}
	}
}

int main()
{
	cin >> H >> W;
	for (int i = 1; i <= H; i++)
	{
		for (int j = 1; j <= W; j++) cin >> ch[i][j];
	}
	for (int i = 1; i <= H; i++)
	{
		for (int j = 1; j <= W; j++)
		{
			if (ch[i][j] == '.')
			{
				memset(visit, false, sizeof(visit));
				bfs(i, j);
			}
		}
	}
	cout << ans << endl;
	return 0;
}
posted @   HappyBobb  阅读(6)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示