当前位置: 首页 > news >正文

BF算法的优化之SPFA算法

介绍

全称Shortest Path Faster Algorithm.

优化思想:

1.由int path[maxn]定义的记录最短距离的容器,只有在path[i]+value<path[j]时才会更新,它们两者的值相等时path的值仍保持不变。由此优化容器,选择用一个队列来替path数组辅助记录最短路径。
2.优化BF算法判断负环:
如果最短路径未在队列中,则加入,入队次数累加,直至队列为空时结束。其中,如果一个顶点的入队次数超过顶点个数V-1,说明在进行V-1趟比较操作后,仍存在更小的路径,即图中存在从源点可达的负环。

实现

const int maxn=100;
const int INF=1000000000;
int path[maxn],num[maxn];
bool isin[maxn]={false};//是否在队列中
struct node{int v;int value;
};
vector<node> table[maxn];
int n;//顶点个数bool SPFA(int b){fill(path,path+maxn,INF);memset(num,0,sizeof(num));queue<int> q;q.push(b);path[b]=0;num[b]++;//记录入队次数isin[b]=true;while(!q.empty()){int front=q.front();q.pop();num[front]--;isin[front]=false;//边记录边判断:以出队元素为中心展开for(int j=0;j<table[front].size();j++){int v=table[front][j].v;int value=table[front][j].value;if(path[front]+value<path[v]){if(!isin[v]){//最优路径不在队列中q.push(v);//入队num[v]++;isin[v]=true;if(num[v]>=n)//存在负环return false;}}}}}return true;
}
http://www.lryc.cn/news/309942.html

相关文章:

  • java 基础(核心知识搭配代码)
  • ctf_show笔记篇(web入门---信息收集)
  • html基本标签
  • 端游如何防破解
  • 用 TVMC 编译和优化模型(2)
  • 第八节 龙晰Anolis 8.8 安装 DDE 桌面环境
  • SpringBoot之Actuator的两种监控模式
  • 【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?
  • 神经网络冻结参数后权重仍然更新
  • STM32学习7 按键扫描
  • 图像物体的边界- 华为OD统一考试(C卷)
  • .idea文件详解
  • 安卓JNI基础知识
  • Nginx高级技巧:实现负载均衡和反向代理
  • 2024年2月最新微信域名检测拦截接口源码
  • 1、Linux-安装
  • flutter 父组件调用子组件方法
  • 京东云硬钢阿里云:承诺再低10%
  • Phoncent博客:探索AI写作与编程的无限可能
  • 【Go-Zero】测试API查询信息无法返回数据库信息与api、rpc文件编写规范
  • SpringBootWeb快速入门
  • 【书生·浦语大模型实战营】第 2 节 -课后作业
  • Java如何使用OpenCV
  • C++指针(三)
  • 消息中间件之RocketMQ源码分析(二十七)
  • C习题002:澡堂洗澡
  • 智能双星:遥测终端机与柳林“巡检机器人“,助力智能运维新升级!
  • 算法复习之前缀和【备战蓝桥杯】
  • IDEA基础——Maven配置tomcat
  • 数据结构测试题