蒟蒻BFS 35分求条,悬关
查看原帖
蒟蒻BFS 35分求条,悬关
1073879
Karl_Wan楼主2024/10/23 14:37
#include <iostream>
#include <queue>
using namespace std;
int m;
int danger[305][305];
void add(int x,int y,int t)
{
	danger[x][y]=t;
	if(x>0) danger[x-1][y]=t;
	if(y>0) danger[x][y-1]=t;
	danger[x+1][y]=danger[x][y+1]=t;
}
struct node
{
	int x,y,dis;
};
bool vis[305][305];
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
queue<node> q;
int bfs()
{
	q.push({0,0,0});
	vis[0][0]=1;
	while(!q.empty())
	{
		node now=q.front();
		q.pop();
		if(danger[now.x][now.y]==(-1))
		{
			return now.dis;
		}
		for(int i=0;i<4;i++)
		{
			int tx=now.x+dir[i][0];
			int ty=now.y+dir[i][1];
			if(tx>=0&&ty>=0&&tx<=300&&ty<=300)
			{
				if(!vis[tx][ty]&&(danger[tx][ty]==(-1)||danger[tx][ty]>now.dis+1))
				{
					vis[tx][ty]=1;
					q.push({tx,ty,now.dis+1});
				}
			}
		}
	}
	return -1;
}
int main()
{
	for(int i=0;i<=300;i++)
	{
		for(int j=0;j<=300;j++) danger[i][j]=(-1);
	}
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		int x,y,t;
		cin>>x>>y>>t;
		add(x,y,t);
	}
	cout<<bfs(); 
	
	return 0;
}

评测记录:https://www.luogu.com.cn/record/184198176

思路:

题目意思简单来说就是有的格子会在特定时间之后变为墙,要去到一个不会变成墙的格子,因此bfs即可

谢谢!

2024/10/23 14:37
加载中...