1 SPFA()判负环

SPFA()判负环的原理就是在求最短路的过程中,如果存在负环,比如说要求从A到a的最短距离,设为s,但是经过a->c->b->a可以更短,所以如果一直经过a->c->b的话,会一直减小。所以说程序会一直对a进行是松弛,那么最多松弛多少次我们会发现有环呢?,答案是n次(n为点的个数)。(至于为什么,还不太理解以后再补吧)

code:

void add(int x,int y,int z){
edge[cnt].to=y;
edge[cnt].weight=z;
edge[cnt].nxt=head[x];
head[x]=cnt++;
}
bool SPFA(){
queue<int >que;
que.push();
mark[]=;
dis[]=;
num[]=;
while(que.size()){
int u=que.front();
que.pop();
mark[u]=;
for(int i=head[u];i!=-;i=edge[i].nxt){
int v=edge[i].to;
if(dis[v]>dis[u]+edge[i].weight){
dis[v]=dis[u]+edge[i].weight;
if(!mark[v]) {
mark[v]=;
num[v]++;
if(num[v]>=n) return ;
que.push(v);
}
}
}
}
return ;
}

2 SPFA()判正环

判断正环是在最长路的基础上判断的, 原理个判负环一样,当存在正环时,正环会让环外一点到环上一点的距离无限增大。代码就是将判断条件换成 dis[v]<dis[u]+edge[i].weight.

最新文章

  1. 【经验】在CSS中定义超链接样式a:link、a:visited、a:hover、a:active的顺序
  2. Linux常用命令及shell脚本
  3. android + red5 + rtmp
  4. Middleware的艺术
  5. 十天冲刺---Day2
  6. git无法clone远程代码库及git代理设置
  7. VIM大作战之C++简易集成编译环境(Windows篇)
  8. 3298: [USACO 2011Open]cow checkers
  9. asp.net core源码飘香:Configuration组件
  10. Spring框架学习笔记(5)——自动装配
  11. [Swift]LeetCode254.因子组合 $ Factor Combinations
  12. MT【317】两次判别式
  13. Java之&quot;instanceof&quot;和&quot;isInstance&quot;代码举例
  14. 【转】VISUAL STUDIO 2008代码指标为您节省资金
  15. hdu2066 一个人的旅行 最短路
  16. dstat 性能测试工具常用选项
  17. 去除ArcMap连接空间数据库中多余的属性表
  18. iOS_2_button控制物体形变
  19. HTTPS的误解(一)
  20. Linux系统——最小化安装

热门文章

  1. wr720n v4 折腾笔记(三):网络配置与扩充USB
  2. 使用SparkSQL编写wordCount的词频统计
  3. OpenCV-Python 轨迹栏作为调色板 | 九
  4. Rust入坑指南:居安思危
  5. 维护你的请求队列,处理token异常
  6. Python python lamda 表达式
  7. Python库的安装方式
  8. while与until
  9. 6L-单向链表实现
  10. (C#、JavaScript)面向对象的程序设计