zoukankan      html  css  js  c++  java
  • SPFA()判环

    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(1);
        mark[1]=1;
        dis[1]=0;
        num[1]=1;
        while(que.size()){
            int u=que.front();
            que.pop();
            mark[u]=0;
            for(int i=head[u];i!=-1;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]=1;
                        num[v]++;
                        if(num[v]>=n) return 1;
                        que.push(v);
                    }
                }
            } 
        } 
        return 0;
    }

    2 SPFA()判正环

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

  • 相关阅读:
    js数组删除数组元素!
    ASP.NET安全问题--ASP.NET安全架构
    片滚动插件myScroll
    JS 回车提交,兼容IE、火狐、Opera、Chrome、Safari
    poj_2386_dfs
    poj_1852_Ants(复杂问题简单化)
    File Mapping
    Creating a File View
    next_permutation
    Creating a File Mapping Object
  • 原文地址:https://www.cnblogs.com/Accepting/p/12743214.html
Copyright © 2011-2022 走看看