迪杰斯特拉算法(Dijkstra):求一点到另外一点的最短距离

两种实现方法:

邻接矩阵,时间复杂度O(n^2)

邻接表+优先队列,时间复杂度O(mlogn)(适用于稀疏图)

(n:图的节点数,m:图的边数)

(参考 https://leetcode-cn.com/problems/path-with-maximum-probability/solution/gai-lu-zui-da-de-lu-jing-by-leetcode-solution/)

leetcode经典例题:

(1)

743. 网络延迟时间

https://leetcode-cn.com/problems/network-delay-time/  邻接矩阵,时间复杂度O(n^2)

class Solution {
public:
int networkDelayTime(vector<vector<int>>& times, int N, int K) {
vector<int> visit(N,0);
vector<vector<int>> d(N, vector<int>(N,INT_MAX));
for(auto& t:times)
{
d[t[0]-1][t[1]-1] = t[2];
}
if(N==1)
return 0; int result=-1; visit[K-1] = 1;
for(int i=0;i<N-1;i++)
{
int k, min_v = INT_MAX;
for(int j=0;j<N;j++)
{;
if(visit[j]==0 && d[K-1][j]<min_v)
{
min_v = d[K-1][j];
k = j;
}
}
if(min_v == INT_MAX)
{
result = -1;
break;
} if(min_v >result)
result = min_v; visit[k] = 1;
for(int j=0;j<N;j++)
{
//cout<<"second j:"<<j<<endl;
if(visit[j]==0 && d[k][j]!=INT_MAX)
{
if(d[K-1][j] > d[K-1][k]+d[k][j])
d[K-1][j] = d[K-1][k]+d[k][j];
}
} } return result;
}
};

(2)

1514. 概率最大的路径

https://leetcode-cn.com/problems/path-with-maximum-probability/ 邻接表+优先队列,时间复杂度O(mlogn)

class Solution {
public:
double maxProbability(int n, vector<vector<int>>& edges, vector<double>& succProb, int start, int end) {
vector<int> visit(n,0);
vector<vector<pair<double, int>>> neighbor(n);
for(int i=0;i<edges.size();i++)
{
neighbor[edges[i][0]].push_back({succProb[i], edges[i][1]});
neighbor[edges[i][1]].push_back({succProb[i], edges[i][0]});
}
vector<double> d(n,0);
d[start] = 1; typedef pair<double,int> P;
priority_queue<P, vector<P>, less<P>> q; //最大堆,因为是要求概率值最大,如果是路径最短,应该用最小堆
q.push({1,start});
while(!q.empty())
{
auto t = q.top();
q.pop();
if(visit[t.second] == 1)
continue; visit[t.second] = 1;
for(auto& i:neighbor[t.second])
{
if(visit[i.second]==0 && d[i.second]< d[t.second]*i.first)
{
d[i.second] = d[t.second]*i.first;
q.push({d[i.second], i.second});
}
}
}
return d[end];
}
};

图论——迪杰斯特拉算法(Dijkstra)实现,leetcode的更多相关文章

  1. 迪杰斯特拉算法(Dijkstra) (基础dij+堆优化) BY:优少

    首先来一段百度百科压压惊... 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最 ...

  2. C# 迪杰斯特拉算法 Dijkstra

    什么也不想说,现在直接上封装的方法: using System; using System.Collections.Concurrent; using System.Collections.Gener ...

  3. 图->最短路径->单源最短路径(迪杰斯特拉算法Dijkstra)

    文字描述 引言:如下图一个交通系统,从A城到B城,有些旅客可能关心途中中转次数最少的路线,有些旅客更关心的是节省交通费用,而对于司机,里程和速度则是更感兴趣的信息.上面这些问题,都可以转化为求图中,两 ...

  4. 迪杰斯特拉算法dijkstra(可打印最短路径)

    #include <iostream> #include <iomanip> #include <string> using namespace std; #def ...

  5. 图解Dijkstra(迪杰斯特拉)算法+代码实现

    简介 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很有代表性的 ...

  6. 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)

    迪杰斯特拉(dijkstra)算法:求最短路径的算法,数据结构课程中学习的内容. 1 . 理解 算法思想::设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合 ...

  7. 最短路径之迪杰斯特拉(Dijkstra)算法

    迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...

  8. dijkstra算法(迪杰斯特拉算法)

    dijkstra算法(迪杰斯特拉算法) 用途:有向图最短路径问题 定义:迪杰斯特拉算法是典型的算法,一般的表述通常有两种方式,这里均采用永久和临时标号的方式,该算法要求图中不存在负权边 用永久和临时标 ...

  9. 理解最短路径——迪杰斯特拉(dijkstra)算法

    原址地址:http://ibupu.link/?id=29 1.       迪杰斯特拉算法简介 迪杰斯特拉(dijkstra)算法是典型的用来解决最短路径的算法,也是很多教程中的范例,由荷兰计算机科 ...

随机推荐

  1. 内网渗透 day3 -metasploit的使用

    metasploit的使用 目录 一.msf基本操作 1 二.msf模块(比较重要的四个) 2 三.木马生成 2 四.开启监听模块(最常用的模块) 3 一.msf基本操作 1. 使用msfconsol ...

  2. 《<SPRING5高级编程(第5版)>_王净译》笔记-【目录】

    第一次写这玩意,不知道什么时候能写完,今天项目比较近,期望年底能看完吧. 先定个小目标 20201228 完成 第1章 Spring介绍 第2章 入门 第3章 在Spring中引入IoC和DI 第4章 ...

  3. File 方法

    File类说明 存储在变量,数组和对象中的数据是暂时的,当程序终止时他们就会丢失.为了能够永 久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中.这些文件可以移动,传送,亦可以被其他程序使用 ...

  4. leetcode 30day--1

    Single Number Given a non-empty array of integers, every element appears twice except for one. Find ...

  5. Linux ---搭建SFTP服务器

    在Centos 6.6环境使用系统自带的internal-sftp搭建SFTP服务器. 打开命令终端窗口,按以下步骤操作. 0.查看openssh的版本 ssh -V 使用ssh -V 命令来查看op ...

  6. ubuntu 18.04安装RTL8821CE无线网卡驱动

    疫情期间闲下来无聊,把办公室的旧机器装了ubuntu,但是无法连接无线网. 打开终端 #查看无线网卡信息. -i 是不区分大小写 tjj@ubuntu:~/Documents$ lspci | gre ...

  7. Web基础_0x00_Web工作方式

    web工作方式 对于普通的上网过程,系统其实是这样做的:浏览器本身是一个客户端,当输入URL的时候,首先浏览器会去请求DNS服务器,通过NDS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服 ...

  8. 如何将各种音频视频素材导入Vegas?

    使用vegas制作视频时,我们经常需要将音频和视频素材导入到媒体库中,以此来达到完美的视听结合效果.其实vegas导入素材并不难,因此很多有剪辑经验的朋友完全可以不用看下去了,主要是纯小白自学视频剪辑 ...

  9. 学习netty遇到的关于 LineBasedFrameDecoder 的问题

    最近在看<Netty权威指南>这本书,关于TCP粘包/拆包,书中使用的是 LineBasedFrameDecoder 来解决的,但是我在实践的过程中出现了问题,上代码吧. 这个是 serv ...

  10. Flink-1-状态化流处理概述

    第1章 状态化流处理概述 参考书籍 Stream Processing with Apache Flinkhttps://www.oreilly.com/library/view/stream-pro ...