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