SPFA(队列优化的Bellman-Ford算法)

简介: 笔记

SPFA(Shortest path faster algorithm)

算法思想基于Bellman-Ford算法

进行优化的方式是 在进行某一次松弛操作中 如果起点到一个点的距离不变 那么以这个点为中转点能到达的点距起点的距离不变


如果这个点的距离发生了变化 就将这个点入队列 以求通过这个点中转的点距起点的位置是否发生了变化


vis数组标记当前位于队列中的顶点


显然 一个顶点出队列时 要取消标记

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define mod 1000000007
#define IOS ios::sync_with_stdio(false)
#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<int, int>p;
const int maxn = 205;
int n, m;
int d[maxn], vis[maxn];
vector<p>vec[maxn];
void init() {
  for (int i = 0;i < maxn;++i)d[i] = INF;
  for (int i = 0;i < maxn;++i)vec[i].clear();
  for (int i = 0;i < maxn;++i)vis[i] = 0;
}
int main() {
  while (~scanf("%d %d", &n, &m)) {
    init();
    for (int i = 0;i < m;++i) {
      //无向图
      int x, y, z;cin >> x >> y >> z;
      vec[x].push_back(make_pair(y, z));
      vec[y].push_back(make_pair(x, z));
    }
    int s, t;cin >> s >> t;
    queue<int>q;
    d[s] = 0;
    q.push(s);
    vis[s] = 1;
    while (!q.empty()) {
      int now = q.front();
      q.pop();vis[now] = 0;
      for (int i = 0;i < vec[now].size();++i) {
        int v = vec[now][i].first;
        if (d[v] > d[now] + vec[now][i].second) {
          d[v] = d[now] + vec[now][i].second;
          if (!vis[v]) {
            vis[v] = 1;
            q.push(v);
          }
        }
      }
    }
    if (d[t] == INF)printf("-1\n");
    else printf("%d\n", d[t]);
  }
}
目录
相关文章
|
5月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
6月前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
348 14
|
5月前
|
机器学习/深度学习 算法
采用蚁群算法对BP神经网络进行优化
使用蚁群算法来优化BP神经网络的权重和偏置,克服传统BP算法容易陷入局部极小值、收敛速度慢、对初始权重敏感等问题。
447 5
|
6月前
|
canal 算法 vr&ar
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
203 1
|
6月前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
301 1
|
5月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
240 0
|
5月前
|
机器学习/深度学习 算法 物联网
基于遗传方法的动态多目标优化算法
基于遗传方法的动态多目标优化算法
|
6月前
|
机器学习/深度学习 存储 算法
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
276 0
|
6月前
|
存储 边缘计算 算法
【太阳能学报EI复现】基于粒子群优化算法的风-水电联合优化运行分析(Matlab代码实现)
【太阳能学报EI复现】基于粒子群优化算法的风-水电联合优化运行分析(Matlab代码实现)
124 0