【概述】

从一个点出发,经过一条简单路径回到起点,称为图的环,而图的负权环就是环中所有的边的权值均为负值。

所谓负权环问题,就是判断图中是否存在一个环,里面包含的边的边权总和<0

【Bellman-Ford 算法】

Bellman-Ford 算法在计算单源最短路径时可以判断是否存在负环

关于 Bellman-Ford 算法:点击这里

int n,w,m;
int dis[N];
int k;
struct Node{int start;int endd;int value;
}edge[N];
void add(int u,int v,int w){edge[k].start=u;edge[k].endd=v;edge[k].value=w;k++;
}
bool Ford(int s){memset(dis,INF,sizeof(dis));dis[s]=0;for(int i=0;i<n;i++){bool flag=true;for(int j=0;j<k;j++){int u=edge[j].start;int v=edge[j].endd;int w=edge[j].value;if(dis[u]+w<dis[v]){flag=false;dis[v]=dis[u]+w;if(i==n-1)return true;}}if(flag)return false;}return false;
}

【SPFA 算法】

SPFA 算法作为 Bellman-Ford 算法的优化,其同样可以在求单源最短路的同时判断是否存在负环

关于 SPFA 算法:点击这里


struct Edge{int from;int to;int dis;Edge(int f,int t,int d):from(f),to(t),dis(d){}
};
int head[N],next[N],num;
int dis[N];
bool vis[N];
int outque[N];//进队次数
void init(){num=0;memset(head,-1,sizeof(head));
}
void addEdge(int from,int to,int w){edge[num]=Edge(from,to,w);next[num]=head[from];head[from]=num++;
}//计算以s为源点的最短路径
//如果图中存在s能到达的负圈,那么返回true
bool SPFA(int s){memset(vis,false,sizeof(vis));memset(outque,0,sizeof(outque));memset(dis,INF,sizeof(dis));dis[s]=0;queue<int> Q;Q.push(0);while(!Q.empty()){int x=Q.front();Q.pop();vis[x]=false;outque[x]++;if(outque[x]>n-1)return true;for(int i=head[x];i!=-1;i=next[i]){Edge &e=edge[i];if(dis[e.to]>dis[x]+e.w){dis[e.to]=dis[x]+e.w;if(!vis[e.to]){vis[e.to]=true;Q.push(e.to);}}}}return false;
}

图论 —— 环与块 —— 负权环相关推荐

  1. 图论 —— 环与块 —— DAG 图判定

    [概述] 有向无环图(Directed Acyclic Graph),即 DAG 图,是指任意一条边有方向且不存在环路的图. 判断 DAG 图的方法有:拓扑排序 O(E).Bellman-Ford 算 ...

  2. 图论(四)------非负权有向图的单源最短路径问题,Dijkstra算法

    Dijkstra算法解决了有向图G=(V,E)上带权的单源最短路径问题,但要求所有边的权值非负. Dijkstra算法是贪婪算法的一个很好的例子.设置一顶点集合S,从源点s到集合中的顶点的最终最短路径 ...

  3. 图论 —— 环与块 —— 最小环

    [概述] 从一个点出发,经过一条简单路径回到起点,称为图的环,而图的最小环就是所有环中长度最小的. 所谓最小环问题,最小环就是指在一张图中找出一个环,使得这个环上的各条边的权值之和最小. [求最小环] ...

  4. SPFA算法判断负权环(bfs_spfa,dfs_spfa)

    判断给定的有向图中是否存在负环. 利用 spfa 算法判断负环有两种方法: 1) spfa 的 dfs 形式,判断条件是存在一点在一条路径上出现多次. 2) spfa 的 bfs 形式,判断条件是存在 ...

  5. 图论 —— 环与块 —— 连通块的计数

    [概述] 对于给出 n 个点 m 条边的图来说,对任意两点,从顶点 Vi 到顶点 Vj 有路径,则称 Vi 和 Vj 是连通的,两者可视为一个连通块,因此,连通块的计数本质就是求其连通分量,可采用 d ...

  6. Spfa算法(可以求有负权的图)

    S p f a Spfa Spfa s p f a spfa spfa 通常用于求含负权边的单源最短路径,以及判负权环. s p f a spfa spfa 最坏情况下复杂度和朴素 B e l l m ...

  7. 【图论专题】负环与01分数规划

    整理的算法模板合集: ACM模板 题目列表: 题目 算法 AcWing 904. 虫洞 spfa判负环 AcWing 361. 观光奶牛 最优比率环.01分数规划 AcWing 1165. 单词环 0 ...

  8. Algorithm:C++语言实现之图论算法相关(图搜索广度优先BFS、深度优先DFS,最短路径SPF、带负权的最短路径Bellman-ford、拓扑排序)

    Algorithm:C++语言实现之图论算法相关(图搜索广度优先BFS.深度优先DFS,最短路径SPF.带负权的最短路径Bellman-ford.拓扑排序) 目录 一.图的搜索 1.BFS (Brea ...

  9. 最短路之 SPFA(判环+负权)

    下面有两种写法不同的时间复杂度可以根据自己的理解程度去选择 第一种: void Add(int u,double cost,int v)//邻接表存储关系 {w[top] = cost;Key[top ...

最新文章

  1. 深度神经网络对基于EEG的情绪识别的关键频带和通道的研究
  2. 使用MCI方法操作声音文件
  3. 2018-2019-1 20165323 20165333 20165336 实验五 通讯协议设计
  4. vue项目:(全局变量设置与调用)API接口封装 - 代码篇
  5. Git相关整理以及学习
  6. 如何判断函数极值点与拐点
  7. phpmyadmin java_phpMyAdmin的配置
  8. 云计算发展现状及未来趋势
  9. php 16进制 声明,php16进制转换
  10. mysql常用语句五:DQL中的查询操作
  11. 联发科毫米波雷达解决方案芯片MT2706(Autus R10)
  12. CRS-0804:PROC-26: Error while accessing the physical storage
  13. Landesk学习笔记1_Landesk三种拖送方式
  14. Lora SX1278芯片 模块引脚的功能介绍
  15. Hadoop入门——初识Hadoop 自学hadoop视频教程
  16. 「高级java工程师」常见面试题及其答案(持续更新)
  17. JavaScript实现心形div块跟随鼠标移动(幻影效果)
  18. FTP服务器和客户端
  19. mysql深入优化篇
  20. python压缩视频文件_python实现视频压缩功能

热门文章

  1. 在输出终端中消除多余空格
  2. net 自定义表单的设计
  3. 华为、中兴圈地IPTV金矿 中小企业南柯一梦
  4. 计算机处理负数加法,怎么让加法器实现两个负数相加
  5. 开源:如何优雅的实现一个操作日志组件
  6. IDEA 2021.3 重磅发布!远程开发 (Beta) 、机器学习、故障自检、体验优化......
  7. 又发现一款牛逼的 API 敏捷开发工具
  8. 一年前3-1对应阿里P7,贬值得有点快,但说对标好像差点意思...
  9. 性能优越的轻量级日志收集工具,微软、亚马逊都在用!
  10. 花了一个月时间梳理了一下公司的微服务核心架构,原来也不是太难...