SPFA求最短路并保存最短路径_带路径保存的spfa,保存所有最短路径-程序员宅基地

技术标签: 最短路径  ACM-最短/长路径  SPFA  

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

const int INF=1e15;

typedef struct{
    int to;
    int val;
}Point;

int n,m,c;
vector<Point> map[120];
int dis[120];
int path[120];

void SPFA()
{
    for(int i=2;i<=n;i++)
        dis[i]=INF;
    dis[1]=0;
    queue<int>q;
    q.push(1);
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        for(int i=0;i<map[u].size();i++)
        {
            Point v=map[u][i];
            if(dis[v.to]>dis[u]+v.val)
            {
                dis[v.to]=dis[u]+v.val;
                path[v.to]=u; //存每个点的前一个点
                q.push(v.to);
            }
        }
    }
}

int main()
{
    //n为顶点数,m为边数,c为终点
    while(scanf("%d%d%d",&n,&m,&c)!=EOF)
    {
        memset(path,0,sizeof(path));
        for(int i=0;i<=n;i++)
            map[i].clear();
        for(int i=1;i<=m;i++)
        {
            //u到v有一条有向边,权值为e
            int u,v,e;
            scanf("%d%d%d",&u,&v,&e);
            Point s;
            s.to=v;
            s.val=e;
            map[u].push_back(s);
        }
        SPFA();
        int num[120];
        int cnt=0;
        printf("%d\n",dis[c]); //最短路径长
        printf("1->"); //起始都是从1开始出发
        for(int i=c;i!=1;i=path[i])
        {
            num[cnt++]=i;
        }
        for(int i=cnt-1;i>0;i--)
        {
            printf("%d->",num[i]);
        }
        printf("%d\n",num[0]);
    }
    return 0;
}

保存1->c的最短路径:用path[ ]记录在每个点最后一次松弛操作中,其前面那个点即可(保证了是最短路径)。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/luyehao1/article/details/79401027

智能推荐

fabric系列一:适用于ubuntu18的Hyperledger-fabric2020年最新版2.3.0环境搭建_fabric v2.3.0 搭建-程序员宅基地

文章浏览阅读2.4k次,点赞9次,收藏34次。Hyperledger-fabric2.3.0环境搭建1. 安装docker1.1 首先,更新需求项1.2 添加更新源1.3 添加docker下载镜像1.4 加入密钥与相关设置1.5 安装docker最后的准备(可有可无吧,这一步不需要成功,应该是只需要其中的一些启动项)实施安装查看版本1.6 加入用户将用户加入该group内,然后退出并重新登陆重启docker服务当前用户切换到docker数组2. 安装docker-compose2.1 安装依赖工具2.1 补充[升级python为3]2.2 准备2.3 _fabric v2.3.0 搭建

SAP ABAP BDC 的使用及代码详解-程序员宅基地

文章浏览阅读1.6w次,点赞20次,收藏99次。首先介绍一下BDC即Batch Data Conversion。由于某种原因,当我们需要大量并且重复的输入保存变更删除数据的操作,且没有对应的BAPI可以使用的时候,可以使用BDC的方式进行。其原理是sap通过录屏的方式将业务操作记录下来,然后让计算机重复的进行操作。一,录制业务操作输入TCode:SHDB进入BDC录制初始界面单击工具栏 Newrecording 按钮创建一个新的BDC,系统将弹出Create Recording对话框,要求输入记录名称(此名称可以不用Y或Z开头来定义)和录制程_abap bdc

Linux环境下安装JDK11_java 11 linux 百度网盘下载-程序员宅基地

文章浏览阅读1.5k次。Linux环境下安装JDK11安装包下载链接:https://pan.baidu.com/s/1PpORKQ5dcynRl9L0jvInjw提取码:rxdj安装步骤将下载的文件放入Linux的文件中并使用如下命令进行解压tar -xvf jdk-11.0.12_linux-x64_bin.tar.gz修改环境变量, vim /etc/profile 添加如下内容(目录为自己解压的路径)# JAVA_HOME# /home/software/jdk11为自己解压的路径e_java 11 linux 百度网盘下载

Linux中执行sh文件时提示:nohup: 无法运行命令“./startup.sh“: 权限不够_nohup ./startup.sh &-程序员宅基地

文章浏览阅读6.7k次,点赞2次,收藏6次。场景Linux服务器,在运行启动的.sh文件时nohup ./startup.sh &提示nohup: 无法运行命令"./startup.sh": 权限不够注:博客:https://blog.csdn.net/badao_liumang_qizhi关注公众号霸道的程序猿获取编程相关电子书、教程推送与免费下载。实现这是因为权限不够,首先进入bin目录下,在bin目录下执行chmod u+x *.sh然后再运行就可以了..._nohup ./startup.sh &

C语言的输入与输出_c语言实现hdmi输入输出-程序员宅基地

文章浏览阅读332次。今天感觉过的有点迷,早上是电脑系统更新了一早上,下午是刚到了HDMI转VGA的数据线,一直想着尝试,感觉今儿的学习状态极差反正。今晚好好整理一波了,总归是要收获知识的。1.关于putchar: 函数:int putchar ( int c ) 功能是向终端输出一个字符,而这个参数呢,可以是变量,字符常量,整数常量或者是表达式,像putchar(65+32)之类的,感觉需要注_c语言实现hdmi输入输出

Android OpenGL ES 3.0开发实战(01):Android OpenGL ES 3.0 Native开发环境搭建_android native opengl-程序员宅基地

文章浏览阅读1.7k次。Android OpenGL ES 3.0开发实战_android native opengl

随便推点

sharding-jdbc实现按年分库按月分表_sharding以年分库 以月分表-程序员宅基地

文章浏览阅读6.4k次。原文地址 sharding-jdbc官方文档:https://shardingsphere.apache.org/document/current/cn/overview/ 本文采用当当的shardingjdbc实现按年分库,按月分表 最终数据库结果如下 image.png 例如有如下sql语句 s..._sharding以年分库 以月分表

vue3焦点获取、动态定位焦点,vue3光标定位,vue3 input focus_vue3setup怎么使用focus-程序员宅基地

文章浏览阅读4.8k次。vue3焦点获取、动态定位焦点,v <div> //获取焦点主要就是定义一个ref <input v-model="inputvalue" ref="inputVal"/> <button @click="addItem">提交</button> </div> methods:{ //事..._vue3setup怎么使用focus

angular ng-model 中接收后台的时间戳格式化_angular ngmodel 时间格式化-程序员宅基地

文章浏览阅读6.9k次。1,将input 上的后天传回的时间戳格式化年月日,首先在网上百度各种,有的说不用ng-model ,直接用value,在valeu中将入过滤器,应为ng-model是不能直接加过滤器的展示代码如下: value="{{g.accepTime |date:'yyyy-MM-dd'}} "style="cursor: pointer;">时间是格式化了,但是不能双向绑定了,向后台传入时间,故_angular ngmodel 时间格式化

Android自定义控件androidx.constraintlayout.widget.ConstraintLayout-程序员宅基地

文章浏览阅读3.5k次。<androidx.constraintlayout.widget.ConstraintLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/tvMsg" android:layout_width="match_parent" android:layout_h..._androidx.constraintlayout.widget.constraintlayout

NSUndoManager 的 removeAllActions 方法失败问题,[self.undoManager undo]崩溃_swiftui undomanager undo 崩溃-程序员宅基地

文章浏览阅读1.3k次。NSUndoManager 被用做撤消和反撤消功能,具体的用法百度和google就好了。这里主要对我项目中的出现的[self.undoManagerundo]; 崩溃问题做一个记录。出现的问题是这样的,当第一次进入A界面时,A界面的地址为0x123,这时我做了2步操作,可以进行两次[self.undoManager undo]。问题从这里产生,如果退出界面前,我没有清掉撤消栈的_swiftui undomanager undo 崩溃

Linux:httpd服务(一)_httpd 静态文件-程序员宅基地

文章浏览阅读751次。Socket套接字:IP和端口的组合HTTPhttp:Hyper text transfer protocol 超文本(包含连接的文件,点击地址会跳转到令一个资源)传输协议 端口:80/TCP 主要传输html编码的数据 http是应用层协议,基于传输层的tcp协议传输 html:Hyper text markup language 超文本标记语言,编程语言 html示例&lt..._httpd 静态文件

推荐文章

热门文章

相关标签