前段时间用到单向和双向dijkstra去跑地图,比对时间
今天来把双向dijkstra的模板放到这里


/*
比起单向来说,双向dijkstra将搜索半径缩小到原来的1/2,理想情况下,相同地图时间缩小至少一半
下面的模板以无向图为例猜想:双向dijkstra只适用于无向图 为何双向dijkstra中不需要用bool型st数组?
答:可以从小的地方思考,如果这个点恰巧是最优解的点,如果被正向搜索过标记后,则永远不会被后向
搜索到,那么当计算min_dis=d1[u]+d2[u],会导致d2[u]永远为无穷,那么则永远得不到最优解,最小距离都是用相同的结点确定的,
*/
#include<iostream>
#include<queue>
using namespace std;
typedef pair<int, int> PII;
const int N = 1010;
int h[N], ne[N], e[N], idx;
int w[N];
int d1[N], d2[N];
void add(int a, int b, int c)
{w[idx] = c;e[idx] = b;ne[idx] = h[a];h[a] = idx;idx++;
}
int bin_dijkstra(int s,int t)
{int min_dis = 999999;d1[s] = 0;d2[t] = 0;priority_queue<PII, vector<PII>, greater<PII> >heap_s, heap_t;heap_s.push({ 0,s });heap_t.push({ 0,t }); while (heap_s.size() && heap_t.size()){auto t1 = heap_s.top(); heap_s.pop();int ver = t1.second;min_dis = min(min_dis, d1[t1.second] + d2[t1.second]);for (int i = h[ver]; i != -1; i = ne[i]){int j = e[i];if (d1[j] > t1.first + w[i]){d1[j] = t1.first + w[i];heap_s.push({ d1[j],j });}}auto t2 = heap_t.top(); heap_t.pop();ver = t2.second;min_dis = min(min_dis, d1[ver] + d2[ver]);for (int i = h[ver]; i != -1; i = ne[i]){int j = e[i];if (d2[j] > t2.first + w[i]){d2[j] = t2.first + w[i];heap_t.push({ d2[j],j });}}if (heap_s.size() && heap_t.size()){auto t1 = heap_s.top(); int ver1 = t1.second;auto t2 = heap_t.top(); int ver2 = t2.second;if (d1[ver1] + d2[ver2] >= min_dis)break;//停止条件}}return min_dis;
}
int main()
{memset(h, -1, sizeof h);memset(d1, 0x3f, sizeof d1);memset(d2, 0x3f, sizeof d2);for (int i = 0; i < 10; i++){int a, b, c;cin >> a >> b >> c;add(a, b, c);add(b, a, c);}cout << bin_dijkstra(1, 9) << endl;
}
/*
1 2 1
2 3 1
3 4 1
4 8 1
8 9 2
1 5 8
5 7 2
9 7 6
6 9 1
1 6 4
**答案是:5***/

双向dijkstra相关推荐

  1. 双向Dijkstra算法、Dijkstra算法对比

    去看[原文] Dijkstra算法是一种单向的最短路径算法,有研究者就提出了一种优化方法,即双向Dijkstra算法.其主要思想就是从起点和终点同时开始搜索,这样应该能够提升算法效率.事实证明,在大部 ...

  2. pytorch 训练过程acc_深度学习Pytorch实现分类模型

    今天将介绍深度学习中的分类模型,以下主要介绍Softmax的基本概念.神经网络模型.交叉熵损失函数.准确率以及Pytorch实现图像分类.01Softmax基本概念 在分类问题中,通常标签都为类别,可 ...

  3. Centos7安装PostgreSQL 12.4 + postgis安装

    Centos7安装PostgreSQL 12.4 + postgis安装 环境:Centos7.8-Mini + PostgreSQL 12.4 + # 关闭防火墙 systemctl  stop f ...

  4. 东南亚的超级APP是如何用Go打造Grab的路径规划和ETA引擎

    胡泊:Grab/地图团队资深架构师. 入行10年,前端.后端.大数据均有涉猎.现就职于Grab,从零开始搭建了Grab路径规划服务,经过三年努力,在多项指标上击败国际地图服务商和东南亚本地地图服务商, ...

  5. L3-011 直捣黄龙

    L3-011 直捣黄龙(30 分) 本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不 ...

  6. 理解OSRM(4)-MLD算法总览

    转载自这里. Multi-Level Dijkstra算法来源自CRP算法论文Customizable route planning in road networks.. 设计目标 应用于大陆级别的实 ...

  7. 算法(Python版)|156Kstars|神级项目-(1)The Algorithms - Python简介

    文章目录 算法(Python版) 项目地址 项目概况 说明 参与入门 社区频道 算法列表 Arithmetic Analysis 算术分析 Audio Filters 音频过滤器 Backtracki ...

  8. php二叉树最短路径,二叉树最短路径

    建立城市道路网络模型及其数据库 , 应用一种改进的 Dijkst ra 算法对城市道路进行最短路径查询 , 该算法是从起点和终点分别用二叉树按起点到终点 和终点到起点的...... 本文提出的双向 D ...

  9. C++bidirectional dijkstra双向最短路径算法(附完整源码)

    C++bidirectional dijkstra双向最短路径算法 C++bidirectional dijkstra双向最短路径算法的完整源码(定义,实现,main函数测试) C++bidirect ...

最新文章

  1. 十六进制字符转化为十进制数字
  2. centos7上搭建http服务器以及设置目录访问
  3. Java Remote Debug(远程调试)
  4. 关于Java“回调”的详细理解及使用
  5. 批次管理的质量跟踪案例分享_食品加工行业
  6. leetcode278. 第一个错误的版本(二分查找)
  7. Metasploit没有db_autopwn命令的解决办法
  8. 使用SDKMAN包管理器,在BSD-Unix系统上快捷安装软件(MacOS/OpenBSD/Solaris)
  9. 【乐理知识】第二章 音符 休止符
  10. hyper-v 尝试更改 状态时 应用程序遇到错误 无法初始化
  11. 如何解决”ArcGIS Server Site is currently being configured by another administrative operation“的问题
  12. 用 servlet 来创建一个用户登录界面
  13. Linux 内存管理之 SLUB分配器(6):slub debug 实例测试
  14. 用ssh反向隧道访问内网机器
  15. Linux查找启动的隐藏服务,Linux服务器入侵检测排查方法
  16. Wing IDE Pro 6 for Mac(Python开发工具)安装破解图文教程
  17. Linux系统编程——进程间的通信(三)消息队列原理以及用法
  18. c语言结构体编程时钟,c语言简单数学时钟(结构体,指针),求大佬帮助
  19. golang interface 与 反射
  20. Html5 canvas 简单画布画板涂鸦例子

热门文章

  1. C# FileInfo(System.IO)
  2. svn提交代码报错:svn: E175002: Unexpected HTTP status 502 ‘Bad Gateway‘
  3. 力扣 2303. 计算应缴税款总额
  4. mybatis报错:parameter ' ' not fount.Available parameters are [0, 1, param1, param2]
  5. 数仓维度建模系列-数仓规范篇
  6. CCO2017 Vera and Trail Building 构造+图论
  7. jn5168烧写方法
  8. QCC3040/QCC3046 ANC(主动降噪)调测
  9. 71.JAVA编程思想——JAVA与CGI
  10. @PersistenceContext和@Autowired在EntityManager上应用的区别。