图论——迪杰斯特拉算法(Dijkstra)实现,leetcode
迪杰斯特拉算法(Dijkstra):求一点到另外一点的最短距离
两种实现方法:
邻接矩阵,时间复杂度O(n^2)
邻接表+优先队列,时间复杂度O(mlogn)(适用于稀疏图)
(n:图的节点数,m:图的边数)
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的更多相关文章
- 迪杰斯特拉算法(Dijkstra) (基础dij+堆优化) BY:优少
首先来一段百度百科压压惊... 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最 ...
- C# 迪杰斯特拉算法 Dijkstra
什么也不想说,现在直接上封装的方法: using System; using System.Collections.Concurrent; using System.Collections.Gener ...
- 图->最短路径->单源最短路径(迪杰斯特拉算法Dijkstra)
文字描述 引言:如下图一个交通系统,从A城到B城,有些旅客可能关心途中中转次数最少的路线,有些旅客更关心的是节省交通费用,而对于司机,里程和速度则是更感兴趣的信息.上面这些问题,都可以转化为求图中,两 ...
- 迪杰斯特拉算法dijkstra(可打印最短路径)
#include <iostream> #include <iomanip> #include <string> using namespace std; #def ...
- 图解Dijkstra(迪杰斯特拉)算法+代码实现
简介 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很有代表性的 ...
- 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)
迪杰斯特拉(dijkstra)算法:求最短路径的算法,数据结构课程中学习的内容. 1 . 理解 算法思想::设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合 ...
- 最短路径之迪杰斯特拉(Dijkstra)算法
迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...
- dijkstra算法(迪杰斯特拉算法)
dijkstra算法(迪杰斯特拉算法) 用途:有向图最短路径问题 定义:迪杰斯特拉算法是典型的算法,一般的表述通常有两种方式,这里均采用永久和临时标号的方式,该算法要求图中不存在负权边 用永久和临时标 ...
- 理解最短路径——迪杰斯特拉(dijkstra)算法
原址地址:http://ibupu.link/?id=29 1. 迪杰斯特拉算法简介 迪杰斯特拉(dijkstra)算法是典型的用来解决最短路径的算法,也是很多教程中的范例,由荷兰计算机科 ...
随机推荐
- charles技能之修改请求参数/返回数据(map Local、Rewrite、Breakpoints)
之前一直用postman调接口比较多,但有时候想要去修改APP的页面展示,造数据又会比较麻烦,此时可以用以下三种方法修改请求参数或修改响应: map Local(本地映射).Breakpoints(打 ...
- 【java从入门到精通】day-06-基本运算符-自增自减运算符
1.运算符 java语言支持如下运算符: 算术运算符:+,-,*,/,%,++,-- 赋值运算符:= 关系运算符:>,<,>=,<=,==,!=,instanceof 逻辑运算 ...
- WIN10下安装python3.7.2出现“尝试创建C:\Users\XX\AppData\Roaming\Microsoft\Installer时出错”
WIN10下安装python3.7.2出现"尝试创建C:\Users\XX\AppData\Roaming\Microsoft\Installer时出错" 1.右键点击安装包以管理 ...
- rhel8/centos8网络网卡设置ping不通,连接不上,各种问题
[解决问题]: 1-ping不通宿主机 2-ping不通外网 3-ping不通网关 4-网络中心VMnet8 VMnet1 VMnet0 不见了 5-rhel8网络设置全攻略 环境:win10宿主机+ ...
- DockerPush
1.阿里云镜像发布流程 2.镜像生成 语法:docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]] [root@pluto data]# docker imag ...
- Java8 方法引用和构造方法引用
如果不熟悉Java8新特性的小伙伴,初次看到函数式接口写出的代码可能会是一种懵逼的状态,我是谁,我在哪,我可能学了假的Java,(・∀・(・∀・(・∀・*),但是语言都是在进步的,就好比面向对象的语言 ...
- vue 常见记录
# vuex在组件中如何获取vuex的state对象中的属性 https://blog.csdn.net/gavincz/article/details/81049461 # vuex全局变量使用 h ...
- 讲一讲Java的字符串常量池,看完你的思路就清晰了
前言 很多朋友Java的字符串常量池的概念困扰了很长一段时间,最近研究了一下jvm指令码,终于对它有了大概的了解. 在展示案例前,我们需要先搞清楚一个概念,众所周知,jvm的内存模型由程序计数器.虚拟 ...
- java大厂面经-阿里腾讯、网易美团、京东、华为、快手、字节全在这里了
前言 在这篇文章详细说了该如何去复习,之前也答应各位把面经整理一下,但是因为入职的事情耽搁了,现在整理出来回馈给大家! 美团 一面 0.自我介绍1.问项目(项目详细介绍.用到什么技术.有什么优化)2. ...
- Echo Delay:FL中好用的声音制作处理方法
今天来一起研究FL Studio的Echo Delay的作用,Echo Delay可以从MIDI输入创建回声,并允许我们通过音量,声像,切除和共振,音高和时间来操纵延迟. 图1:Echo Dealy ...