AcWing 2019. 拖拉机(双端BFS)
题目链接
https://www.acwing.com/problem/content/2021/
思路
一个有0代价和1代价边权的最短路,我们用双端队列将0和1边权用一个双端队列分开存储,然后进行一个类迪杰斯特拉的最短路即可,值得注意的是,这个二维平面是无限大的,但是我们只需要多使用一层(这一圈都是空的)就好了,因为效果都一样,详情请看代码
代码
#include <bits/stdc++.h>
using namespace std;const int N = 1e3+10;bool mp[N][N];
int dis[N][N];
bool vis[N][N];
typedef pair<int,int> PII;
int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};bool check(int x,int y) {if(x >= 0 && x < N && y >= 0 && y < N) {return true;}return false;
}int bfs(int sx,int sy){deque<PII> que;que.push_back({sx,sy});memset(dis,0x3f,sizeof dis);dis[sx][sy] = 0;while(!que.empty()){PII p = que.front();que.pop_front();int x = p.first;int y = p.second;if(vis[x][y]) continue;vis[x][y] = true;if(x == 0 && y == 0) break;for(int i = 0;i < 4; ++i) {int nx = x + dy[i];int ny = y + dx[i];if(check(nx,ny)) {int w = 0;if(mp[nx][ny]) w = 1;if(dis[nx][ny] > dis[x][y] + w) {dis[nx][ny] = dis[x][y] + w;if(!w) que.push_front({nx,ny});else que.push_back({nx,ny});}}}}return dis[0][0];
}int main(){int n,sx,sy;cin>>n>>sx>>sy;int x,y;for(int i = 1;i <= n; ++i) {cin>>x>>y;mp[x][y] = true;}cout<<bfs(sx,sy)<<endl;return 0;
}
AcWing 2019. 拖拉机(双端BFS)相关推荐
- AcWing 2019. 拖拉机(双端队列BFS)
[题目描述] 干了一整天的活,农夫约翰完全忘记了他把拖拉机落在田地中央了. 他的奶牛非常调皮,决定对约翰来场恶作剧. 她们在田地的不同地方放了NNN捆干草,这样一来,约翰想要开走拖拉机就必须先移除一些 ...
- 【双端队列广搜/搜索+图论】AcWing 2019.拖拉机 USACO 2012 March Contest Silver Division
[题目描述] 干了一整天的活,农夫约翰完全忘记了他把拖拉机落在田地中央了. 他的奶牛非常调皮,决定对约翰来场恶作剧. 她们在田地的不同地方放了 NNN 捆干草,这样一来,约翰想要开走拖拉机就必须先移除 ...
- P4554 小明的游戏(双端bfs)
P4554 小明的游戏https://www.luogu.com.cn/problem/P4554 #pragma warning(disable:4996) #include <iostrea ...
- 广度优先搜索BFS进阶(一):多源BFS、优先队列BFS、双端队列BFS
一.多源BFS 在上一篇博客:广度优先搜索BFS基础中,我们接触到的BFS均是单起点(单源)的,但是对于某一些问题,其有多个起点,此类问题我们称为多源BFS问题.先思考下面一道例题: 1.腐烂的橘子 ...
- 2019 拖拉机(双端队列广搜)
1. 问题描述: 干了一整天的活,农夫约翰完全忘记了他把拖拉机落在田地中央了.他的奶牛非常调皮,决定对约翰来场恶作剧.她们在田地的不同地方放了 N 捆干草,这样一来,约翰想要开走拖拉机就必须先移除一些 ...
- 双端队列BFS:拖拉机
原题链接:https://www.acwing.com/problem/content/2021/ 一个裸的双端队列广搜. #include <iostream> #include < ...
- QIIME 2用户文档. 18序列双端合并read-joining(2019.7)
前情提要 NBT:QIIME 2可重复.交互和扩展的微生物组数据分析平台 1简介和安装Introduction&Install 2插件工作流程概述Workflow 3老司机上路指南Experi ...
- 双端队列 BFS + Chamber of Secrets CodeForces - 173B
题意: 一个 n×mn\times mn×m 的图,现在有一束激光从左上角往右边射出,每遇到 '#',你可以选择光线往四个方向射出,或者什么都不做,问最少需要多少个 '#' 往四个方向射出才能使光线在 ...
- AcWing 342. 道路与航线 (双端队列广搜问题,SPFA)
题目描述 农夫约翰正在一个新的销售区域对他的牛奶销售方案进行调查. 他想把牛奶送到T个城镇,编号为1~T. 这些城镇之间通过R条道路 (编号为1到R) 和P条航线 (编号为1到P) 连接. 每条道路i ...
最新文章
- 网络编程中的注意问题
- python观察日志(part25)--创建numpy数组
- vue 集成html5 plus - 懒懒de尐彪 - 博客园
- 迪杰斯特拉算法(最短路径)
- Windows 2003 服务器安全设置-批处理 (附参考链接)
- 怎么二值化后找字_邓婕美肤团队:秋季皮肤出现问题后怎么办 找对护肤方法是关键_美肤吧...
- Node.js Web开发框架
- 什么是技术驱动型公司?阿里算吗?
- Lodash兼容IE6~IE8
- 华为P40怎么解账号锁P40Pro忘记密码ID账号锁解除方案开机设备解锁帐号软件使用方法
- LNBP11L_LNB电源和控制电压调节器——科时进商城
- LeetCode 714. 买卖股票的最佳时机含手续费(动态规划)
- 在html中写响应式布局的代码,CSS实现响应式布局的方法
- 源代码防泄密加密介绍
- 二维码解码器Zbar 的配置和基本使用
- 正则表达式-匹配横杠-本身
- 按揭买房的朋友请仔细看,怎样办理贷款最省钱
- [原创] 火焰文字的教程
- Mac美术绘画软件Corel Painter 2018激活汉化教程分享
- Web前端开发技术课程大作业,期末考试(英雄联盟LOL游戏静态网站制作 )