Dijistra算法 和 Dijistra的进阶堆优化的设计(优先队列实现) (单源最短路径,从一个点到其他点的最短距离)

[算法] Dijkstra 堆优化详解 0.前置芝士、声明 知道 朴素 dijkstra(O(n2)O(n^2)O(n2)) 的写法。 知道 堆、优先队列的写法。 规定下列变量的意义: //maxn 为自定义常量,随着题目限制更改,表示 n 的上界 bool b[maxn];//标记数组,b[i]=1时表示这个点已被访问过 int dist[maxn];//距离数组,dist[i]代表 s 到 i 的最短距离 顺便存图: //maxm 代表边数的上界 int ey[maxm],ez[maxm],hd[maxn],nx[maxm],ec; //e 阅读详情

https://www.cnblogs.com/jason2003/p/7222182.html

(1)for先设定从1到2,3的连线值为无穷大,再选择其中到1距离最小节点为新的起点,后从新起点链接到的点继续第一步。

(2)进阶:堆优化。使用从小到大的优先队列,每次选择长度最小的边指向的未选中的节点。

(3)有负权值使用SPFA算法,无负权值用堆优化的Dijistra算法。

for(int i=0;i<n-1;i++)//遍历除开始节点外的所有的点的数目
    {                     //就是需要n-1次的寻找最小权值,就是需要选择剩下的所有节点
        int minn=INF,u;
        
        for(int j=0;j<n;j++)//在所有的到起点的距离的边里找出最小权值的边
        {                   //因为不知道有从它出来有多少条边,因此全都遍历一遍,
            if(book[j]==0 && dis[j]<minn)//是从起点到未走过的指定点的最短值,是选择边的最短值
            {//而且设定就是为dis[]就是起点所有节点的距离,就算没有权值也可以说是无穷大
                minn=dis[j];
                u=j;
            }
        }
        book[u]=1;
        
        for(int j=0;j<n;j++)//全部更新一遍,更新到那个节点的最小的距离值
        {                   //不知道新选择的边有多少条路出去,所以最好全部更新一遍
            if(book[j]==0 && dis[u]+mp[u][j]<dis[j])
            {
                dis[j]=dis[u]+mp[u][j];
            }
        }

#include<stdio.h>
#include<string.h>
#include<iostream>
#define INF 0x3f3f3f3f
using namespace std;
int mp[1010][1010],dis[1010],book[1010],n,m;

void dijkstra(int v0)
{
	for(int i=1;i<=n;i++)//遍历所有的点,得出从起点的各个边
	{
		dis[i]=mp[v0][i];
	}
	book[v0]=1;

	for(int i=0;i<n-1;i++)//遍历除开始节点外的所有的点的数目
	{                     //就是需要n-1次的寻找最小权值,就是需要选择剩下的所有节点
		int minn=INF,u;

		for(int j=1;j<=n;j++)//在所有的到起点的距离的边里找出最小权值的边
		{                   //因为不知道有从它出来有多少条边,因此全都遍历一遍,
			if(book[j]==0 && dis[j]<minn)//是从起点到未走过的指定点的最短值,是选择边的最短值
			{//而且设定就是为dis[]就是起点所有节点的距离,就算没有权值也可以说是无穷大
				minn=dis[j];
				u=j;
			}
		}
		book[u]=1;

		for(int j=1;j<=n;j++)//更新到那个节点的最小的距离值
		{
			if(book[j]==0 && dis[u]+mp[u][j]<dis[j])
			{
				dis[j]=dis[u]+mp[u][j];
			}
		}
	}
}

int main()
{
	while(cin>>n>>m)
	{
	    memset(dis,INF,sizeof(dis));//把dis数组附最大值(88不是十进制的88,其实很大)
	    memset(book,0,sizeof(book));
	    memset(mp,INF,sizeof(mp));
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				if(i==j) mp[i][j]=0;
				else mp[i][j]=INF;
			}
		}
		int a,b,c;
		for(int i=0;i<m;i++)
		{
			//scanf("%d%d%d",&u,&v,&w);
			cin>>a>>b>>c;
			if(c<mp[a][b])
            mp[a][b]=mp[b][a]=c;
		}
		int first,second;
		//scanf("%d%d",&s,&t);
		cin>>first>>second;
		//first--;
		//second--;
		dijkstra(first);

		//if(dis[second]==INF) cout<<"-1"<<endl;
		//else
		cout<<dis[second]<<endl;
	}
	return 0;
}

/*

5 6
1 2 5
1 3 8
2 3 1
2 4 3
4 5 7
2 5 2
1 5
-1

*/
#include<stdio.h>
#include<string.h>
#include<iostream>
#define INF 0x3f3f3f3f
using namespace std;
int mp[1010][1010],dis[1010],book[1010],n,m;

void dijkstra(int v0)
{
	for(int i=1;i<=n;i++)//遍历所有的点,得出从起点的各个边
	{
		dis[i]=mp[v0][i];
	}
	book[v0]=1;

	for(int i=0;i<n-1;i++)//遍历除开始节点外的所有的点的数目
	{                     //就是需要n-1次的寻找最小权值,就是需要选择剩下的所有节点
		int minn=INF,u;

		for(int j=1;j<=n;j++)//在所有的到起点的距离的边里找出最小权值的边
		{                   //因为不知道有从它出来有多少条边,因此全都遍历一遍,
			if(book[j]==0 && dis[j]<minn)//是从起点到未走过的指定点的最短值,是选择边的最短值
			{//而且设定就是为dis[]就是起点所有节点的距离,就算没有权值也可以说是无穷大
				minn=dis[j];
				u=j;
			}
		}
		book[u]=1;

		for(int j=1;j<=n;j++)//更新到那个节点的最小的距离值
		{
			if(book[j]==0 && dis[u]+mp[u][j]<dis[j])
			{
				dis[j]=dis[u]+mp[u][j];
			}
		}
	}
}

int main()
{
	while(cin>>n>>m)
	{
	    memset(dis,INF,sizeof(dis));//把dis数组附最大值(88不是十进制的88,其实很大)
	    memset(book,0,sizeof(book));
	    memset(mp,INF,sizeof(mp));
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				if(i==j) mp[i][j]=0;
				else mp[i][j]=INF;
			}
		}
		int a,b,c;
		for(int i=0;i<m;i++)
		{
			//scanf("%d%d%d",&u,&v,&w);
			cin>>a>>b>>c;
			if(c<mp[a][b])
            mp[a][b]=mp[b][a]=c;
		}
		int first,second;
		//scanf("%d%d",&s,&t);
		cin>>first>>second;
		//first--;
		//second--;
		dijkstra(first);

		if(dis[second]==INF) 
        cout<<"-1"<<endl;
		else
		cout<<dis[second]<<endl;
	}
	return 0;
}

/*

5 6
1 2 5
1 3 8
2 3 1
2 4 3
4 5 7
2 5 2
1 5
7


*/

 

堆优化:使用优先队列进行堆优化,排列出最小的路径,每次选择出最小的路径进行下一次的运算。

#include <bits/stdc++.h>
using namespace std;
int n,m;
struct node{
    int to;
    int w;
};
int edgeNum[100];
vector<node> vec[100];
int dis[100];
bool vis[100];

void addEdge(int a,int b,int w){
    edgeNum[a]++;
    node *p=new node();
    p->to=b;
    p->w=w;
    vec[a].push_back(*p); 
}

void init(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int a,b,w;
        cin>>a>>b>>w;
        addEdge(a,b,w);
        addEdge(b,a,w);
    }
}

void dijkstra(int start){
    memset(dis,0x3f,sizeof(dis));
    dis[start]=0;
    for(int i=0;i<edgeNum[start];i++) {
        int b=vec[start][i].to;
        int w=vec[start][i].w;
        dis[b]=w;
    }
    vis[start]=1;
    for(int k=1;k<=n-1;k++){
        int minV=0x7fffffff,min_i;
        for(int i=1;i<=n;i++){
            if(!vis[i]&&dis[i]<minV){
                minV=dis[i];
                min_i=i;
            }
        }
        vis[min_i]=true;
        for(int i=0;i<edgeNum[min_i];i++){
            int b=vec[min_i][i].to;
            int w=vec[min_i][i].w;
            if(!vis[b]&&dis[b]>dis[min_i]+w){
                dis[b]=dis[min_i]+w;
            } 
        } 
        
    }    
}



//dijkstra的堆优化
struct qnode{
    int i_i;
    int dis_i;
    qnode(int i,int dis_i){
        this->i_i=i;
        this->dis_i=dis_i;
    }
}; 
struct myCmp{//从小到大的排序
    bool operator ()(const qnode &p1,const qnode &p2){
        return p1.dis_i > p2.dis_i;
    }
};
priority_queue<qnode,vector<qnode>,myCmp> q;

void dijkstra_2(int start)
{
    memset(dis,0x3f,sizeof(dis));//和SPFA一样,这里最开始全都是无穷大 
    dis[start]=0;
    q.push( qnode(start,dis[start]) );
    while(!q.empty()){
            
        qnode p=q.top();
        q.pop();
    
        int min_i= p.i_i;
        int minV=p.dis_i;
        
        if(vis[min_i]) continue;
        vis[min_i]=true;
        
        for(int i=0; i < edgeNum[min_i] ;i++){
            int b=vec[min_i][i].to;
            int w=vec[min_i][i].w;
            
            if(!vis[b]&&dis[b]>dis[min_i]+w){
                dis[b]=dis[min_i]+w;
                q.push(qnode(b,dis[b]));
            }
        }
        
    }
} 

void print(){
    for(int i=1;i<=n;i++)
        cout<<dis[i]<<" ";
    cout<<endl;    
}

int main(){
    //freopen("in.txt","r",stdin);
    init();
    //dijkstra(2);
    dijkstra_2(1);
    print();
    return 0;
}
/*
5 5 1
2 3 2
1 2 -3
1 5 5
4 5 2
3 4 3
0 -3 -1 2 4
*/

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>

#define in(a) a=read()
#define REP(i,k,n) for(long long i=k;i<=n;i++)

#define MAXN 10010
using namespace std;

typedef pair<long long,long long> P;

inline long long read()
{
    long long x=0,t=1,c;
    while(!isdigit(c=getchar()))
        if(c=='-')
            t=-1;
    while(isdigit(c))
        x=x*10+c-'0',c=getchar();
    return x*t;
}

long long n,m,s;
long long total=0, head[MAXN], nxt[MAXN<<10], to[MAXN<<10], val[MAXN<<10];
long long dis[MAXN],vis[MAXN];

priority_queue <P, vector<P>,greater<P> > Q;//优先队列优化,从小到大

inline void adl(long long a,long long b,long long c)
{
    total++;
    to[total]=b;
    val[total]=c;

    nxt[total]=head[a];

    head[a]=total;
    
    return ;
}

inline void Dijkstra()
{
    REP(i,1,n)  dis[i]=2147483647;

    dis[s]=0;

    Q.push( P(0,s) );
    while(!Q.empty())
    {
        long long u=Q.top().second;//取出dis最小的点
        Q.pop();//弹出
        if(vis[u])
            continue;
        vis[u]=1;
        
        for(long long e=head[u]; e; e=nxt[e])
        {
            if(dis[ to[e] ]>dis[u]+val[e])
            {
                dis[to[e]]=dis[u]+val[e];

                Q.push( P( dis[to[e]],to[e] ) );//插入
            }
        }

    }
    return ;
}
/*
5 5 1
2 3 2
1 2 -3
1 5 5
4 5 2
3 4 3
0 -3 -1 2 4
*/
int main()
{
    in(n),in(m),in(s); //s指起点
    long long a,b,c;
    REP(i,1,m)  in(a),in(b),in(c),adl(a,b,c);

    Dijkstra();
    REP(i,1,n)  printf("%lld ",dis[i]);
}

 

 

Dijkstra算法在数学建模中的核心应用与Python/Matlab实战指南 图论是解决复杂网络优化问题的数学基础,其核心在于将实体抽象为节点,关系抽象为边。Dijkstra算法基于贪心策略,通过逐步确定单源最短路径,为带非负权重的图提供了确定性的最优解。该算法的技术价值在于其逻辑清晰、易于实现,并能作为基础模块嵌入物流配送、设施选址、网络流分析等更复杂的优化模型中。在数学建模场景下,理解如何将实际问题(如交通时间、运输成本)抽象为图的权重,并熟练应用堆优化等高效数据结构实现算法,是解决路径规划类问题的关键。本文深入探讨了Dijkstra算法在数学建模中的典型应用,并提供了可直接复用 阅读详情

相关推荐

堆优化的dijkstra算法(dijkstra+邻接表+heap)

用堆优化的dijkstra,接口为邻接链表。

调整

Description 已给定一个 N 个点 M条边的有向图,点编号为 1到N,第i 条边为(ui,vi) , 权值为wi。你可以进行一次操作,使得任意一条边的权值变成任意非负整数。要 求进行尽量少的操作次数,使得点 1到点N 的最短路径长度变成c。 题目保证,c小于在未进行任何操作之前的原图中 1到N 的最短路长度。 Input 输入文件tweak.in 第一行三个整数,N,M和c 接下来M行,...

Beautiful women in tights 294

Dijistra最短路径算法源码

Dijistra最短路径算法邻接矩阵结构的VC实现源码

最短路:dijkstra堆优化

最短路:dijkstra堆优化

fakerzhang的博客 4004

OpenMMLab实战指南:从环境搭建到首个检测模型运行

本文是一份详细的OpenMMLab实战指南,重点介绍了如何从零开始搭建环境并运行首个目标检测模型。内容涵盖Miniconda环境配置、PyTorch与CUDA版本匹配、使用MIM工具安装MMCV和MMDetection的核心步骤,并通过RTMDet-tiny模型演示了完整的推理流程,帮助开发者高效入门这一计算机视觉开源算法体系。

weixin_28678151的博客 155

保姆级教程:在CentOS 8上用libvirt + QEMU/KVM搭建ARM64虚拟机(含UEFI配置与常见坑点)

本文提供在CentOS 8上使用libvirt + QEMU/KVM搭建ARM64虚拟机的详细教程,涵盖UEFI配置与常见问题解决方案。通过环境准备、特殊配置要点、UEFI固件安装等步骤,帮助用户在x86架构服务器上高效运行ARM64虚拟化环境,特别适合开发测试与跨平台应用场景。

weixin_30292745的博客 129

dijkstra算法堆优化

我们知道dijkstra算法的时间复杂度是O(N^2),外层循环松弛的次数,N个点要松弛N-1次为O(N),而内层循环是遍历dis数组每次找到距离顶点最小的点,时间复杂度也是O(N),堆优化就是优化这一过程降为O(logN),如果M(边)远小于N^2储存图用邻接表,这样优化的总时间复杂度为(N+M)logN,堆优化需要3个数组:1.dis数组记录单源顶点到其余点的距离2.h数组是一个最小堆,(注意:h数组不是按照编号大小来建立最小堆的,而是按照顶点在数组dis中对应的值来建立这个最小堆)

2301_80336512的博客 2225

Deep Reinforcement Learning - 1. DDPG原理和算法

Deep Reinforcement Learning - 1. DDPG原理和算法 背景描述 DDPG的定义和应用场景 DDPG算法相关基本概念定义 DDPG实现框架和算法 DDPG对于DPG的关键改进 下一篇 以下用RL作为Reinforcement Learning 的简称。背景描述概括来说,RL要解决的问

kenneth_yu的博客 14万+

dijkstra的堆优化

核心:priority_queue< pair<int,int> > 用优先队列来取最近的点,就不用遍历找点了 在pq中,是按pair的第一个元素(first)由大到小排序的,所以pair<距离,点号>,注意因为要的是最小值,所以距离要存负值 其实距离是纯纯的工具人,我们只是需要它来维持点的排序 每次取队首h,取出的就是dis最短的点 还要注意: 如果这个点的dis不等于h的dis,说明这个点在入队之后被更新了,那么我们就不用这个点了,直接continue; 因为后面

m0_60544208的博客 2668

疲劳容器的定义_FKM规范针对非焊接构件疲劳强度评估实例介绍(下篇)

一、写在前面FKM Inside ANSYS软件,该软件是在FKM 规范的基础上,在ANSYS Workbench内开发的进行非焊接构件及焊缝静强度和疲劳强度评估的工具包。基于ANSYS计算模型的信息,在图形用户界面定义相关设置,利用有限元分析计算结果,自动嵌入FKM规范要求的静强度计算和疲劳强度计算流程和方法,自动将应力结果和相关物理量传递给工具包,无须手动预先选择评估的热点区域,可以...

weixin_35925298的博客 1885

Zephyr RTOS 嵌入式 C 编程 (使用嵌入式 RTOS POSIX API)8. Zephyr RTOS 与以太网、Wi-Fi 及 TCP/IP

支持的 BSD 函数包括:socket()、close()、recv()、recvfrom()、send()、sendto()、connect()、bind()、listen()、accept()、fcntl()(用于设置非阻塞模式)、getsockopt()、setsockopt()、poll()、select()、getaddrinfo()和 getnameinfo()。向开发板烧录代码也可能存在问题。可以通过调用 net_if_up() 开启网络接口 ,调用 net_if_down() 关闭接口。

1342

【算法导论】基本图算法及其设计与分析一站式解决(Dijistra,(斐波那契,二叉堆)堆优化Dijistra,Bellman,Floyed,Johnson,单源最短(小)路,多源最短(小)路)

本文设计了图算法的单源,多源最短路径的算法,分析了Dijistra及其堆优化版本(包括斐波那契堆优化),一般化单源最短路解决办法Bellman-Ford算法,多源最短路的一般算法Floyed,和适用于稀疏图的Johnson算法的设计。

qq_73301283的博客 1750

Eureka自我保护机制

Eureka自我保护机制 默认情况下,当eureka server在一定时间内没有收到实例的心跳,便会把该实例从注册表中删除(默认是90秒),但是,如果短时间内丢失大量的实例心跳,便会触发eureka server的自我保护机制,比如在开发测试时,需要频繁地重启微服务实例,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews threshold和Renews(last

Soul_Ming的博客 541

dijistra算法思想以及最优c++实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

zero1Hu的博客 246

【Jlink & C#】通过C#实现Jlink RTT上位机的功能

某天看到安富莱家的自己开发的调试器可以实现输出中文调试信息到自己编写的Jlink RTT上位机上,觉得无比神奇,略好奇到底是如何做的,找了很久,发现其上位机的对应的实现好像也没有完全开源出来。后来经过很多搜索确认,知道了几个事实:那么有没有可能用C#来控制Jlink呢?答案是,有!!! 解决思路在于,C#调用JLinkARM.dll里面的函数 这里转载下我认为很有意义的发现结合以上的几个发现,加上我自己的测试,我把我对接JLinkARM.dll的C#接口分享出来,不保证都能用,我只是测试了几个常用的功能,R

一只爱做笔记的码农 9144

【Claude】媒体文件处理错误:PDF 与 Image 过大的检测与预处理方法 bug报错已解决

图片压缩是必须的:原始图片的 base64 会占用大量 TokenPDF 提取文本优于传图片:文本版 PDF 比扫描版更省 Token分块处理大文件:不要一次性处理整个大文件控制分辨率:800x800 通常足够 Claude 分析。

博客 6359

hdu1874(dijk+堆优化)

题目 HDU1874 思路 学习图论的第二天,从最简单的Dijkstra算法开始,hdu1874可以算是一道单源最短路问题的裸题,坑点是两个点之间的路径不唯一,应该选取最小的那条,Dijkstra算法就不用介绍了,具体思路是选取当前最短路径的点,向周围的点进行优化,然后出队,重新选取最短路径点进行更新,堆优化的作用是减少挑选当前最短路径点的时间复杂度,不用for循环逐个访问,而是用一个堆来维护这组...

微风的博客 375

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Dijkstra算法详细解读

Dijkstra算法 = 贪心选择 + 距离更新 + 非负权图它是图论中最基础、最重要的算法之一,掌握其思想和实现,对理解更高级的图算法(如A*、Floyd、网络流等)至关重要。

软件行业技术文化交流。 1708

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

DIJISTRA

#include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; #include&lt;iostream&gt; #include&lt;string&gt; #include&lt;vector&gt; #include&lt;stack&gt; #include&lt;bitset&gt; #in

Electrodeless_key的博客 351

Dijkstra算法的java实现代码

Dijkstra算法的java实现代码 #转载#https://blog.youkuaiyun.com/LZH984294471/article/details/50950879 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展...

qq_36142139的博客 478

TJU Term24251《Problem Modeling and Solving》Chapter 8 Graph Algorithm

1.概念:(1)生成子图:保留全部的点以及部分的边。(2)生成树:符合树的定义(无回路,边数等于节点数加1)的生成子图。(3)最小生成树:生成树的各边权值之和最小的。2.Prim算法:思路:一种构造性算法,从点集出发,遍历剩余所有的点,将距离点集最小的点加入,同时更新剩余的所有的点到点集的最小距离,重复|V|次,如果点集中的点的数目少于|V|说明图不连通。特点:时间复杂度为O(|V|^2),适合边稠密的图。

Aestheticism1021的博客 649

Dijkstra/Floyd

本周我做了大量的关于数据结构的练习其中树和图的练习用到了邻接矩阵储存树和图的状态 代码如下 int ji[MAX][MAX]; for(int i=0; i<m; i++) { cin>>x>>y; ji[x][y]=1; } 还有并差集的练习 int bcj[2000+10],vi[2000+10]; void iny() { for(int i=0; i<2000+5; i++) { bcj[i]=i; vi[i]=0; } } ..

m0_56422883的博客 495

最短路径-Dijkstra算法(迪杰斯特拉算法)

Dijkstra算法是由荷兰计算机科学家Edsger W. Dijkstra于1956年提出的一种用于寻找图中单源最短路径的经典算法。该算法适用于所有边权值为非负数的图,能够高效地计算出从指定源点到图中所有其他点的最短路径。

d3y1`5 81_09 957

最短路算法学习总结和感悟

总的来说有这些最短路算法:floyd,Dijkstra,Bellman,SPFA floyd的思想极其精炼,基于动态规划思想,代码极其简单for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ if(dis[i][j]>dis[i][k]+dis[k][j]) dis[i][j]=dis[i][k]

kalilili的专栏 1766

Acing4871. 最早时刻(dijistra有禁止离开时刻,出发时等待直到不禁止)

【代码】Acing4871. 最早时刻(dijistra有禁止离开时刻,出发时等待直到不禁止)

qq_51070956的博客 186

201609-4交通规划(Dijkstra的变形)

问题描述 试题编号: 201609-4 试题名称: 交通规划 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家也建设一个高速铁路系统。   建设高速铁路投入非常大,为了节约建设成本,G国国王决定不新建铁路,而是将已有的铁路改造成高速铁路...

Kobe_1314的博客 600
上一篇: 并查集(合并与查找的集合)
下一篇: Bell-man ford算法 和 它的进阶算法:SPFA算法(队列实现,类似BFS的实现)(从一点到其余点的最短路径,解决了负权值边的问题)
while_black
博客等级 码龄9年 25粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值