题目链接

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)相关推荐

  1. AcWing 2019. 拖拉机(双端队列BFS)

    [题目描述] 干了一整天的活,农夫约翰完全忘记了他把拖拉机落在田地中央了. 他的奶牛非常调皮,决定对约翰来场恶作剧. 她们在田地的不同地方放了NNN捆干草,这样一来,约翰想要开走拖拉机就必须先移除一些 ...

  2. 【双端队列广搜/搜索+图论】AcWing 2019.拖拉机 USACO 2012 March Contest Silver Division

    [题目描述] 干了一整天的活,农夫约翰完全忘记了他把拖拉机落在田地中央了. 他的奶牛非常调皮,决定对约翰来场恶作剧. 她们在田地的不同地方放了 NNN 捆干草,这样一来,约翰想要开走拖拉机就必须先移除 ...

  3. P4554 小明的游戏(双端bfs)

    P4554 小明的游戏https://www.luogu.com.cn/problem/P4554 #pragma warning(disable:4996) #include <iostrea ...

  4. 广度优先搜索BFS进阶(一):多源BFS、优先队列BFS、双端队列BFS

    一.多源BFS 在上一篇博客:广度优先搜索BFS基础中,我们接触到的BFS均是单起点(单源)的,但是对于某一些问题,其有多个起点,此类问题我们称为多源BFS问题.先思考下面一道例题: 1.腐烂的橘子 ...

  5. 2019 拖拉机(双端队列广搜)

    1. 问题描述: 干了一整天的活,农夫约翰完全忘记了他把拖拉机落在田地中央了.他的奶牛非常调皮,决定对约翰来场恶作剧.她们在田地的不同地方放了 N 捆干草,这样一来,约翰想要开走拖拉机就必须先移除一些 ...

  6. 双端队列BFS:拖拉机

    原题链接:https://www.acwing.com/problem/content/2021/ 一个裸的双端队列广搜. #include <iostream> #include < ...

  7. QIIME 2用户文档. 18序列双端合并read-joining(2019.7)

    前情提要 NBT:QIIME 2可重复.交互和扩展的微生物组数据分析平台 1简介和安装Introduction&Install 2插件工作流程概述Workflow 3老司机上路指南Experi ...

  8. 双端队列 BFS + Chamber of Secrets CodeForces - 173B

    题意: 一个 n×mn\times mn×m 的图,现在有一束激光从左上角往右边射出,每遇到 '#',你可以选择光线往四个方向射出,或者什么都不做,问最少需要多少个 '#' 往四个方向射出才能使光线在 ...

  9. AcWing 342. 道路与航线 (双端队列广搜问题,SPFA)

    题目描述 农夫约翰正在一个新的销售区域对他的牛奶销售方案进行调查. 他想把牛奶送到T个城镇,编号为1~T. 这些城镇之间通过R条道路 (编号为1到R) 和P条航线 (编号为1到P) 连接. 每条道路i ...

最新文章

  1. 网络编程中的注意问题
  2. python观察日志(part25)--创建numpy数组
  3. vue 集成html5 plus - 懒懒de尐彪 - 博客园
  4. 迪杰斯特拉算法(最短路径)
  5. Windows 2003 服务器安全设置-批处理 (附参考链接)
  6. 怎么二值化后找字_邓婕美肤团队:秋季皮肤出现问题后怎么办 找对护肤方法是关键_美肤吧...
  7. Node.js Web开发框架
  8. 什么是技术驱动型公司?阿里算吗?
  9. Lodash兼容IE6~IE8
  10. 华为P40怎么解账号锁P40Pro忘记密码ID账号锁解除方案开机设备解锁帐号软件使用方法
  11. LNBP11L_LNB电源和控制电压调节器——科时进商城
  12. LeetCode 714. 买卖股票的最佳时机含手续费(动态规划)
  13. 在html中写响应式布局的代码,CSS实现响应式布局的方法
  14. 源代码防泄密加密介绍
  15. 二维码解码器Zbar 的配置和基本使用
  16. 正则表达式-匹配横杠-本身
  17. 按揭买房的朋友请仔细看,怎样办理贷款最省钱
  18. [原创] 火焰文字的教程
  19. Mac美术绘画软件Corel Painter 2018激活汉化教程分享
  20. Web前端开发技术课程大作业,期末考试(英雄联盟LOL游戏静态网站制作 )

热门文章

  1. Matlab之矩阵的特征值与特征向量求解
  2. 论文写作--表格解读
  3. 【python】MAC链接oracle
  4. Windows 程序基础
  5. 1064. Complete Binary Search Tree
  6. POJ3169 Layout(差分约束)
  7. HDU3549+Ford-Fulkerson
  8. Netflix的快速产品集成测试
  9. 【c++模板实现】二叉查找树
  10. java比c,Java比C ++更好