[USACO08FEB] Meteor Shower S BFS

这篇具有很好参考价值的文章主要介绍了[USACO08FEB] Meteor Shower S BFS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

共有 M M M颗流星 ( 1 ≤ M ≤ 50000 ) (1≤M≤50000) (1M50000)会坠落在农场上,其中第 i i i颗流星会在时刻 T i T_i Ti砸在坐标为 ( X i , Y i ) ( 0 ≤ X i , Y i ≤ 300 ) (X_i,Y_i)(0≤X_i,Y_i≤300) (Xi,Yi)(0Xi,Yi300) 的格子里。流星会将它所在的格子,以及周围 4 4 4个相邻的格子都化为焦土,无法在这些格子上行走。贝茜在时刻 0 0 0开始行动,只能在第一象限中,平行于坐标轴行动,每 1 1 1个时刻中,移动到相邻的格子中。计算最少需要多少时间才能到达一个安全的格子。如果不可能到达输出 − 1 −1 1
本题要求计算最少需要多少时间可以看出需要使用广度搜索,需要注意的是我们需要计算每个格子化为焦土的时间,这个时间应该是最小值。文章来源地址https://www.toymoban.com/news/detail-613525.html

#include<bits/stdc++.h>
using namespace std;
int dx[5]={0,1,0,-1,0};
int dy[5]={0,0,1,0,-1};
int flag[310][310],vis[310][310];
int m,xx,yy,Time;
int ans[301][301];
queue<int> q[2];
int main()
{
	cin>>m;
	memset(flag,-1,sizeof(flag));
	for(int i=1;i<=m;i++)
	{
		cin>>xx>>yy>>Time;
		for(int j=0;j<=4;j++)
		if((xx+dx[j])>=0&&(yy+dy[j])>=0)
		{
			if(flag[xx+dx[j]][yy+dy[j]]!=-1)
			flag[xx+dx[j]][yy+dy[j]]=min(Time,flag[xx+dx[j]][yy+dy[j]]);
			else flag[xx+dx[j]][yy+dy[j]]=Time;
		}
	}
	q[0].push(0);q[1].push(0);
	while(q[0].empty()==0&&q[1].empty()==0)
	{
		int x,y;
		x=q[0].front();y=q[1].front();
		q[0].pop();q[1].pop();
		
		if(flag[x][y]==-1){cout<<ans[x][y]<<endl;return 0;}
		for(int i=1;i<=4;i++)
		{
			int x1=x+dx[i],y1=y+dy[i];
			if(x1>=0&&y1>=0&&vis[x1][y1]!=1&&((flag[x1][y1]>(ans[x][y]+1))||flag[x1][y1]==-1))
			{
			    //cout<<x1<<" "<<y1<<endl;
				q[0].push(x1);q[1].push(y1);
				ans[x1][y1]=ans[x][y]+1;
				vis[x1][y1]=1;
			}
		}
	}
	cout<<"-1"<<endl;
	return 0;
}

到了这里,关于[USACO08FEB] Meteor Shower S BFS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数青蛙​、[USACO10FEB]Chocolate Giving S

    一、1419. 数青蛙 思路 这道题有俩种解法,一是记数,二是贪心 记数: 这是官方的题解 我们用frog_ num来表示现在正在发出蛙鸣声的青蛙数目,用cnt[c] 示已经发出-次有效蛙鸣中的字符c的青蛙个数,比如当cnt[\\\'c\\\'] = 2时表示当前有2只青蛙已经发出了有效蛙鸣中的字符‘c’,下

    2024年02月03日
    浏览(31)
  • P3045 [USACO12FEB] Cow Coupons G ( 反悔堆

    利用差值来表示更换优惠卷的操作 比如你现在已经用了k张优惠卷,如果你想要用更换优惠卷,就用补差价, 如果补的差价+物品的优惠值 = 直接再买一个(和前面的物品并不是同一个)  那就直接不用优惠卷买

    2024年02月12日
    浏览(31)
  • 【算法手札】深入理解宽度遍历(bfs)和深度遍历(dfs)搜索

        算法的重要性不言而喻,现在我们的生活也已经离不开各种算法,一个好的算法能大大提高程序的运行效率,是学习编程的一个重要模块,而遍历算法也是算法里的一个大的模块,今天我们一起来学习一下深度遍历算法(depth first search)和 广度优先遍历(broad first searc

    2024年02月21日
    浏览(44)
  • 【算法】广度优先遍历 (BFS)

    (1) 广度优先遍历 (Breadth First Search) ,又称 宽度优先遍历 ,是最简便的图的搜索算法之一。 (2)已知图 G = (V, E) 和一个源顶点 start,宽度优先搜索以一种系统的方式探寻 G 的边,从而“发现” start 所能到达的所有顶点,并计算 start 到所有这些顶点的距离(最少边数),

    2024年02月08日
    浏览(39)
  • 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次。(连通图与非连通图) 1、访问指定的起始顶点; 2、若当前访问的顶点的邻接顶点有未被访问的,则任选一个访问之;反之,退回到最近访问过的顶点;直到与起始顶点相通的全部顶点都访问完毕; 3、若

    2024年01月17日
    浏览(46)
  • 【数据结构与算法】搜索算法(深度优先搜索 DFS和广度优先搜索 BFS)以及典型算法例题

    【数据结构与算法】系列文章链接: 【数据结构与算法】递推法和递归法解题(递归递推算法典型例题) 【数据结构与算法】系列文章链接: 【数据结构与算法】C++的STL模板(迭代器iterator、容器vector、队列queue、集合set、映射map)以及算法例题 【数据结构与算法】系列文章链

    2024年04月13日
    浏览(63)
  • 深度优先搜索(DFS)和广度优先搜索(BFS)两种算法c++

    深度优先搜索(DFS)和广度优先搜索(BFS)是一种用于遍历或搜索树图的一种算法,在这个过程中保证图或数的每个结点被访问且仅被访问一次,再按照每个结点访问的顺序不同分为深搜和广搜。 本文只讨论这两种算法在搜索方面的应用! 深度优先搜索 ( Depth-First-Search,DFS )它 沿

    2024年02月13日
    浏览(47)
  • Python 算法基础篇:深度优先搜索( DFS )和广度优先搜索( BFS )

    深度优先搜索( DFS )和广度优先搜索( BFS )是两种常用的图遍历算法,用于在图中搜索目标节点或遍历图的所有节点。本篇博客将介绍 DFS 和 BFS 算法的基本概念,并通过实例代码演示它们的应用。 😃😄 ❤️ ❤️ ❤️ 深度优先搜索( DFS )是一种用于遍历或搜索图或树

    2024年02月07日
    浏览(65)
  • 【Python搜索算法】广度优先搜索(BFS)算法原理详解与应用,示例+代码

    目录 1 广度优先搜索     2 应用示例 2.1 迷宫路径搜索 2.2 社交网络中的关系度排序 2.3 查找连通区域         广度优先搜索(Breadth-First Search,BFS)是一种图遍历算法,用于系统地遍历或搜索图(或树)中的所有节点。BFS的核心思想是从起始节点开始,首先访问其所有相

    2024年02月08日
    浏览(46)
  • 基于邻接矩阵的有向图的广度优先遍历(BFS)和深度优先遍历(DFS)算法

    概念: 广度优先遍历算法是图的另一种基本遍历算法,其基本思想是尽最大程度辐射能够覆盖的节点,并对其进行访问。 以迷宫为例,广度优先搜索则可以想象成一组人一起朝不同的方向走迷宫,当出现新的未走过的路的时候,可以理解成一个人有分身术,继续从不同的方

    2024年02月06日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包