acwing2019. 拖拉机(最短路径)

本文介绍了一种基于双端队列的简洁版迪杰斯特拉算法,用于解决边权只有0和1的最短路径问题。通过广搜结合双端队列的方式,优化了节点的遍历顺序,从而减少了计算时间。

题目描述:(边权只有0和1的最短路径问题)
在这里插入图片描述
在这里插入图片描述

可以走出矩阵
点权{走障碍物:1,不走障碍物:0}
最短路径=路径上障碍物的数量
双端队列:0的时候入队首,1的时候入队尾(只能出队一次,但可以入队很多次)
双端队列的前半段是全为0,后半段全为1.
bfs(实际上是一种迪杰斯特拉算法)迪杰斯特拉中的堆使用双端队列来实现
双端队列+广搜=简洁版的迪杰斯特拉算法
在这里插入图片描述
原题链接
视频讲解

#include<iostream>
#include<stdio.h>
#include<bits/stdc++.h>

#include<deque>
//双端队列的库函数 双端队列 即队列的两端都可以进行插入和删除操作 
#define  x first
#define  y second
using namespace std;
typedef pair<int,int> PII;

const int N = 10010;
 
bool g[N][N],st[N][N];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值