最短路-SPFA(Shortest Path Faster Algorithm)

【最短路径算法】#2 贝尔曼福特Bellman-Ford与弗洛伊德Floyd 阅读详情

SPFA求单源最短路

SPFA是使用了队列优化的单源最短路算法,与Dijkstra不同的是,它可以判断是否图中有负环。

它的实现与dijistra很相似,据说时间复杂度比dijkstra好

先看一下百度百科上的伪码:

ProcedureSPFA;
Begin
    initialize-single-source(G,s);
    initialize-queue(Q);
    enqueue(Q,s);
    while not empty(Q) do begin
        u:=dequeue(Q);
        for each v∈adj[u] do begin
            tmp:=d[v];
            relax(u,v);
            if(tmp<>d[v])and(not v in Q)then enqueue(Q,v);
        end;
    end;
End;

实现代码如下:

int SPFA(int u,int NV,int v)//参数依次:源<span style="font-family: Arial, Helvetica, sans-serif;">点</span><span style="font-family: Arial, Helvetica, sans-serif;">,图节点总数,终点</span>
{
    int Queue[N];
    int Count[N];//记录每个节点入队次数
    for(int i=1;i<=NV;i++)
    {
        dist[i]=MAX;
        vist[i]=0;
        Count[i]=0;
    }
    int head=0,rear=0;//队头队尾
    dist[u]=0;
    Queue[rear++]=u;
    Count[u]++;
    vist[u]=1;
    while(head<rear)
    {
        u=Queue[head++];
        vist[u]=0;//注意这里出队后把标记置回原来的0
        for(int i=1;i<=NV;i++)
        {
            if(dist[u]+Metrix[u][i]<dist[i])//这里是不是很熟悉
            {
                dist[i]=dist[u]+Metrix[u][i];
                if(vist[i]==0)
                {
                    Queue[rear++]=i;
                    vist[i]=1;
                    Count[i]++;
                    if(Count[i]>=NV)//这个if是判断负环的
                    {
                        return -1;
                    }
                }
            }
        }
    }
    return dist[v];
}




shortest path faster algorithm sqrt((x2-x0)^2+(y2-y0)^2)-sqrt((x1-x0)^2+(y1-y0)^2)=t 立即下载

相关推荐

芯片低功耗设计的两种常用EDA流程

如题。

EricWZY2008的专栏 5556

【算法】最短路径之SPFA

1.算法描述 SPFA(Shortest Path Faster Algorithm)算法是西南交通大学的段凡丁于1994提出,是队列优化版的Bellman-Ford。将源点加入队列;每次从队列出来一个点,对相邻的点,进行松弛操作;被松弛成功且不在队列的点依次进入队列;重复操作,直至队列为空算法结束。 dis[u]表示源点到点u的最短距离;用数组queue[ ]模拟队列,head, r...

haierboos 287

宜搭,高级认证实操2,FaaS连接器指导教程

找到FaasEntry.java将如下代码整体替换,注意引包。如图所示在util下新建EDSUtil.java代码如下。回到连接器界面点击右上角测试-->测试。连接器工厂-->新建FaaS连接器。保存-->前往云IDE开发。返回如图所示代码,部署成功。

2301_80286061的博客 3342

常用最短路算法详解

文章目录1.弗洛伊德 Floyd-Warshall2.迪杰斯塔拉 Dijkstra2.1.算法流程2.2.一些解释3.SPFA3.1.前面两种算法的局限性3.2.Bellman-Ford算法3.3.SPFA(Shortest Path Faster Algorithm)4.负权环路 1.弗洛伊德 Floyd-Warshall 主要想法是,通过逐渐增加允许经过的节点,来更新最短路,本质上是动态规划方法 求取图中任意两点之间的距离 f[k][x][y] :只允许经过节点 1 到 k(不包括两个端点,两个

qq_52852138的博客 1243

FPGA实现串口升级及MultiBoot(十)串口升级SPI FLASH实现

采用软核进行串口升级的原因主要有以下几点:1、官方推荐:官方以前也推出了针对逻辑进行升级的程序《XAPP1081_QuickBoot》,但是从今年起(2024年)官方就停止更新相关例程了(详见下面截图),所以采用官方推荐的软核更新;2、简单并具有通用性:针对SPI或者BPI官方都有相关的IP,可应对市场上80%以上的FLASH,并且官方IP通用性极强,只需要修改几个参数就可以对不同厂家的芯片进行升级操作;

OpenFPGA的博客 1996

Unity Sprite Atlas C++底层原理全解析 —— “像素聚合工厂”的秘密

Unity Sprite Atlas C++底层实现简析 Sprite Atlas是Unity中用于优化2D渲染性能的核心机制,其C++底层实现如同一个高效的"像素聚合工厂"。该系统通过将多个小纹理合并为一个大纹理,显著减少Draw Call次数和GPU纹理切换开销。 在数据结构上,底层采用SpriteAtlasData存储图集元数据,PackedTexture管理合并后的大纹理,SpriteFrame记录每个子精灵的位置信息,并通过哈希表实现快速查找。编辑器阶段使用最大矩形等算法优化空

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 204

SPFA 算法(Shortest Path Faster Algorithm)

一、算法背景求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm。 SPFA算法是西南交通大学段凡丁于1994年发表的。有人称spfa算法是最短路的万能算法。二、适用范围:    给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路...

qq_37763204的博客 1815

【原创】下载RealEstate10K数据集原始视频的方法

目前互联网上能搜到下载RealEstate10K数据集原始视频的方法都已经不能用了,这篇博客介绍一种目前可用的下载RealEstate10K数据集原始视频的方法,并给出自动化的脚本代码。

沉迷单车的追风少年 2461

SPFA算法

SPFA算法 一.算法简介 SPFA(Shortest Path Faster Algorithm)算法是求单源最短路径的一种算法,它是Bellman-ford的队列优化,它是一种十分高效的最短路算法。 很多时候,给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。SPFA的复杂度大约是O(kE),...

weixin_30511039的博客 1536

关闭搜狗输入法右下角广告的解决方案

本文主要介绍了关闭搜狗输入法右下角广告的解决方案,希望能对使用搜狗输入法的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

Openlayers 教程 02 - 地图添加 WKT WKB GeoJson 格式的点线面数据

WebGIS 开发中,对于数据量不是很大的场景,可以直接从数据库读取数据,通过创建点线面要素(Feature),然后添加到矢量图层(vectorLayer)中,在地图上展示。添加点线面的方法可以封装一下,方便使用。...

非科班Java出身GISer的博客 3854

单源最短路之SPFA——Shortest Path Faster Algorithm

   SPFA是目前相当优秀的求最短路径的算法,值得我们掌握。   SPFA对Bellman-Ford算法优化的关键之处在于意识到:只有那些在前一遍松弛中改变了距离估计值的点,才可能引 起他们的邻接点的距离估计值的改变。因此,用一个先进先出的队列来存放被成功松弛的顶点。初始时,源点s入队。 当队列不为空时,取出对首顶点,对它的邻接点进行松弛。如果某个邻接点松弛成功,且该邻接点不在队列中,则将其...

yangzhongmin21的专栏 187

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

spfa(求单源最短路)

一、简介 spfa :Shortest Path Faster Algorithm 单源最短路:给定一个带权值的有向图,给定图中的一个定点V,则V称为源,V能到达所有的顶点的最短距离称为单源最短路 二、图的存储方式 #include<bits/stdc++.h> #define inf 0x3f3f3f3f #define M 500005 using namesp...

卑鄙的我 461

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OV9734 DATASHEET,完整规格书

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

[SPFA] 最短路 HDU图论01

最短路Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 140   Accepted Submission(s) : 74Font: Times New Roman | Verdana | GeorgiaFont Size: ← →Problem...

博客 225

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

最短路(SPFA)

Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路...

G191018的博客 255

AcWing851 spfa求最短路(最短路、spfa)

题目: 题解目录前言一、题目陈述二、解决思路三、代码实现总结 前言 一、题目陈述 二、解决思路 三、代码实现 总结

codertea的博客 350

Roadblocks——SPFA求次短路

题目: 描述 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友。贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样,选择最短路。 贝茜所在的乡村有R(1<=R<=100,000)条双向道路,每条路都联结了所有的N(1<=N<=5000)个农场中的某两个。贝茜居住在农场1,她的朋友们居住在农场N(即贝茜每次旅行的目的地)。 贝茜选择的第二短的路径中,可以包含任何一条在最短路中出现的道路,并且,一条路可以重复走多

全机房最蒟蒻的博客 463

C++最短路算法

题目描述【题意】给出一个图,起始点是1,结束点是N,边是双向的。求点1到点N的最短距离。哈哈,这就是标准的最短路径问题。 【输入格式】第一行为两个整数N(1≤N≤10000)和M(0≤M≤200000)。N表示图中点的数目,M表示图中边的数目。下来M行,每行三个整数x,y,c表示点x到点y之间存在一条边长度为c。(x≠y,1≤c≤10000)【输出格式】输出一行,一个整数,即为点1到点N的最短距离...

zsyzClb的博客 3466

最短路(path)

SSL比赛 1141.最短路(path), spfa 加 dfs 。

欢迎您的光顾awa 233

HDU 2544 最短路

Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?   Input 输入包括多组数据。每组数据第一行是两个整数N、M(N 输入保证至少存在1条商店到赛场的路线。

__ElemenT 719

spfa(STL写法)简单讲解+最短路(spfa)例题 acm寒假集训日记22/1/7

前言:SPFA(Shortest Path Faster Algorithm)算法是求单源最短路线的一种算法,它是Bellman-ford的队列优化,它是一种十分高效的最短路算法。 spfa 其实可以看作 Dijkstra + 队列 的优化 知识储备:Dijkstra 与 队列 spfa通过队列优化,可以减少不必要的relax(松弛)! 本篇博客将以c++ STL写法实现spfa,当然您也可以通过结构体来实现(个人认为STL写法更加方便与简洁)! 接下来——》直奔主题!!! 如何存储信息

m0_60593173的博客 419

HDU - 一个人的旅行(最短路)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢...

ityanger的技术栈 2635

hdu 2544 最短路 spfa算法 可判断负环

Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据。每组数据第一行是两个整数N、M(N&lt;=100,M&lt;=10000),N表示成都的大街上有几个路口,标号为1的路...

weixin_44012730的博客 217

最短路之SPFA模板

一:邻接矩阵版本SPFA//如果要判断负环的话加一个记录入队的数组就行,当入队次数大于n的时候出现负环 int d[MAXN],vis[MAXN],w[MAXN][MAXN]; int n; void SPFA(int s) { fill(d,d+n,INF); d[s]=0; queue q; q.push(s); while(!q.empty())

逍遥小章 1652

第三章 搜索与图论 最短路算法之SPFA算法

1、算法思路 1. 算法适用范围 这两个算法用于解决存在负权边的单源最短路问题。其中SPFA算法是Bellman-Ford算法的优化。尽管可以用于负权图中,但是对于存在负权环的图两个算法无法有效工作,但是可以利用这两个算法判断图中是否存在负权环。 2.Bellman-Ford算法 Bellman-Ford 算法采用动态规划(Dynamic Programming)进行设计,实现的时间复杂度为 O(V*E),其中 V 为顶点数量,E 为边的数量。 1.算法流程 创建源顶点 v 到图中所有顶点的距离的集合 d

刘胖仔学后端 540
上一篇: 最短路-Dijkstra算法
下一篇: 次短路(第二最短路径)
WayToAccept
博客等级 码龄14年 21粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值