SPFA总结

动态逼近法:设立一个先进先出的队列用来保存待优化的结点,优化时每次取出队首结点u,并且用u点当前的最短路径估计值对离开u点所指向的结点v进行松弛操作,如果v点的最短路径估计值有所调整,且v点不在当前的队列中,就将v点放入队尾。这样不断从队列中取出结点来进行松弛操作,直至队列空为止。

#include <iostream>
#include <queue>
#include <cstring>
#define inf 1<<29
using namespace std;
int map[105][105];
int dict[105];
queue <int> Q;
bool vis[105];
int c[105];




void build_map(int n,int m)
{
    for(int i=0;i<=n;i++)
    for(int j=0;j<=n;j++)
    if(i==j)
    map[i][j]=0;
    else map[i][j]=inf;
    for(int i=0;i<m;i++)
    {
        int b,e,v;
        cin>>b>>e>>v;
        map[b][e]=map[e][b]=v;
    }
}


bool SPFA(int n,int x)
{
    for(int i=1;i<=n;i++)
    dict[i]=inf;
    dict[x]=0;
    memset(vis,false,sizeof(vis));
    memset(c,0,sizeof(c));
    Q.push(x);
    vis[x]=true;
    while(!Q.empty())
    {
        int q=Q.front();
        Q.pop();
        vis[q]=false;
        c[q]++;
        if(c[q]>n)
        return false;
        for(int i=1;i<=n;i++)
        {
            if(dict[i]>dict[q]+map[q][i])
            {
                dict[i]=dict[q]+map[q][i];
                if(!vis[i])
                {
                    Q.push(i);
                    vis[i]=true;
                }
            }
        }
    }
    return true;
}


int main()
{
    int n,m;
    while(cin>>n>>m&&n!=0&&m!=0)
    {
        build_map(n,m);
        if(SPFA(n,1))
        cout<<dict[n]<<endl;
        else
        cout<<"有负环"<<endl;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我们总结了 3 大使用建议,并首次公开 Nacos3.0 规划图

Nacos 是什么 Nacos 是 Dynamic Naming and Configuration-Service 的首字母简称&#xff0c;定位于一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。从 2018 年 7 月开始宣布开源以来&#xff0c;已经走过了第四个年头&#xff0c;在这四年里&#xff0c;备…

容斥原理 和 欧拉函数

在概率论中&#xff0c;对于概率空间中的事件A1&#xff0c;……&#xff0c;An&#xff0c;当n 2时容斥原理的公式为&#xff1a; 当n 3时&#xff0c;公式为&#xff1a; 一般地&#xff1a; 正数n的唯一素因子分解式p1^a1 * p2^a2 * p3^a3 ……* pk^ak 。求1&#xff0c;2…

递归函数时间复杂度分析

递归函数时间复杂度分析 (1) 递归执行过程 例子&#xff1a;求N!。 这是一个简单的"累乘"问题&#xff0c;用递归算法也能解决。 n! n * (n - 1)! n > 1 0! 1, 1! 1 n 0,1 因此&#xff0c;递归算法如下&#xff1a; Jav…

Dubbo 3 StateRouter:下一代微服务高效流量路由

目前的微服务架构中&#xff0c;通常包含服务消费者、服务提供者、注册中心、服务治理四元素&#xff0c;其中服务消费者会向注册中心获取服务提供者的地址列表&#xff0c;并根据路由策略选出需要调用的目标服务提供者地址列表&#xff0c;最后根据负载算法直接调用提供者。当…

首次全面解析云原生成熟度模型:解决企业「诊断难、规划难、选型难」问题

从“上云”到“云上”原生&#xff0c;云原生提供了最优用云路径&#xff0c;云原生的技术价值已被广泛认可。当前行业用户全面转型云原生已是大势所趋&#xff0c;用户侧云原生平台建设和应用云原生化改造进程正在加速。 然而&#xff0c;云原生复杂的技术栈和传统IT的历史包…

有效预警6要素:亿级调用量的阿里云弹性计算SRE实践

编者按&#xff1a;随着分布式系统和业务需求的飞速发展&#xff0c;监控告警在我们保障系统稳定性和事故快速恢复的全周期中都是至关重要的。9月3号&#xff0c;阿里云弹性计算管控SRE李成武老师(花名佐井)&#xff0c;受「TakinTalks稳定性社区」邀请&#xff0c;在线分享日常…

SSE指令集入门

Intel公司的单指令多数据流式扩展&#xff08;SSE&#xff0c;Streaming SIMD Extensions&#xff09;技术能够有效增强CPU浮点运算的能力。Visual Studio .NET 2003提供了对SSE指令集的编程支持&#xff0c;从而允许用户在C代码中不用编写汇编代码就可直接使用SSE指令的功能。…

浮点运算是什么?

简单说就是小数的加减乘除运算。 在计算机的硬件中是没有小数点这个东西的。cpu能处理的东西都是整的。所以&#xff0c;小数就要用类似科学计数法的方式来表示。如1.234在计算机里面&#xff0c;可以理解成用1234和-3两个整数来表示1234*10的-3次方&#xff0c;这类数就叫浮点…

CISC与RISC的区别?

CISC是指复杂指令系统计算机&#xff08;Complex Instruction Set Computer&#xff09;&#xff1b;RISC是指精简指令系统计算机&#xff08;Reduced Instruction Set Computer&#xff09;。这里的 计算机指令系统 指的是计算机的最低层的 机器指令 &#xff0c;也就是CPU能够…

EMR 重磅发布智能运维诊断系统(EMR Doctor)——开源大数据平台运维利器

大数据运维的挑战—如何保证集群稳定与运行效率 企业级大数据集群通常拥有海量的数据存储、日常运算成干上万的计算任务&#xff0c;需要满足各类上层业务的计算需求。对于这类集群的运维往往充满着挑战&#xff1a;海量的数据、庞杂的组件以及组件之间复杂的依赖关系、对于时…

DP为王——动态规划法学习笔记

动态规划英文名Dynamic Programming&#xff0c;这个名称总让人有一种时曾相识的感觉&#xff0c;可能是因为容易和“线性规划”之类的概念搞混。 首先&#xff0c;适用动态规划的问题十分广泛和常见——地图路径搜索&#xff08;深度优先、广度优先、A*&#xff09;&#xff0…

从中间件到分布式数据库,PolarDB-X 的透明之路

PolarDB-X前身是淘宝内部使用的分库分表中间件TDDL&#xff08;2007年&#xff0c;Java库的形态&#xff09;&#xff0c;早期以DRDS&#xff08;2012年开始研发&#xff0c;2014年上线&#xff0c;分库分表中间件MySQL Proxy的形态&#xff09;的品牌在阿里云上提供服务&#…

阿里云EMAS 移动测试,帮您快速掌握移动端兼容性测试技巧

一、兼容性测试可以查到哪些问题 界面适配问题&#xff0c;确定是否能正常安装、启动。各个页面潜在的崩溃、无响应等问题。应用性能问题&#xff0c;例如启动时间、页面加载时间、功耗等。 二、阿里云兼容性测试工具的功能优势 提供在线录制功能&#xff0c;可视化录制出功能…

零信任策略下K8s安全监控最佳实践(K+)

云原生架构新风险与需求概述 安全风险概述 传统的网络安全架构理念是基于边界的安全架构&#xff0c;企业构建网络安全体系时&#xff0c;首先要做的是寻找安全边界&#xff0c;把网络划分为外网、内网等不同的区域&#xff0c;然后在边界上部署防火墙、入侵检测、WAF等产品。…

ATC‘22顶会论文RunD:高密高并发的轻量级 Serverless 安全容器运行时

编者按&#xff1a;目前的安全容器软件栈 — 包括 host 操作系统中的 cgroup、guest 操作系统和用于函数工作负载的容器 rootfs&#xff0c;都会导致低部署密度和在低并发能力。为此&#xff0c;RunD 作为一种轻量级安全容器运行时&#xff0c;提出了 host-to-guest 的全栈优化…

getline函数

getline&#xff08;istream &in, string &s&#xff09; 从输入流读入一行到string s •功能&#xff1a;–从输入流中读入字符&#xff0c;存到string变量–直到出现以下情况为止&#xff1a;•读入了文件结束标志•读到一个新行•达到字符串的最大长度–如果getline…

Dubbo Mesh:从服务框架到统一服务控制平台

Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题&#xff0c;官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力&#xff0c; 利用 Dubbo 提供的丰富服务治理特性&…

struct和typedef struct彻底明白了

struct和typedef struct 分三块来讲述&#xff1a;   1 首先&#xff1a;//注意在C和C里不同     在C中定义一个结构体类型要用typedef:     typedef struct Student     {     int a;     }Stu;     于是在声明变量的时候就可&#xff1a;Stu stu1;…

智能搜索引擎 | 驱动电商业务增长实践

开放搜索是阿里集团搜索业务中台&#xff0c;基于大数据深度学习在线服务体系打造的智能搜索云服务产品。拥有核心引擎、召回排序、搜索引导、充分开放等核心能力&#xff0c;可应用在电商行业、教育行业、内容行业等场景。目前帮助数千家客户搭建自己的搜索业务。 实践案例&a…

c++ map 函数

cMap是STL的一个关联容器&#xff0c;它提供一对一&#xff08;其中第一个可以称为关键字&#xff0c;每个关键字只能在map中出现一次&#xff0c;第二个可能称为该关键字的值&#xff09;的数据处理能力&#xff0c;由于这个特性&#xff0c;它完成有可能在我们处理一对一数据…