zoukankan      html  css  js  c++  java
  • 最短路(判负环

    void Add(int u,double cost,int v)//邻接表存储关系
    {
        w[top] = cost;
        Key[top] = v;
        next[top] = head[u];
        head[u] = top++;
    }
     
    bool SPFA(int x)
    {
     
        memset(vis,false,sizeof(vis));
        memset(inq,0,sizeof(inq));
        queue<int> Q;
        for(int i = 1;i <= n;i++) dis[i] = (i == x ? 0 : INF);
        vis[x] = true;
        inq[x] = 1;
        Q.push(x);
        while(!Q.empty())
        {
            int cur = Q.front();
            Q.pop();
            vis[cur] = false;
            for(int e = head[cur] ; e != -1; e = next[e])
            {
                int v = Key[e];
                if(dis[v] < dis[cur] * w[e])
                {
                    dis[v] = dis[cur] * w[e];
                    if(!vis[v])
                    {
                        inq[v] ++;
                        if(inq[v] >= n) return true;//如果入队次数超过n-1次说明存在环或负权
                        Q.push(v);
                        vis[v] = true;
                    }
                }
            }
        }
        return false;
    }
    View Code

    初始map为INF

    bool SPFA(int x)
    {
        queue<int> Q;
        memset(vis,false,sizeof(vis));
        memset(in,false,sizeof(in));
        for(int i = 1;i <= n;i++)   dis[i] = (i==x?0: INF);
        vis[x] = true;
        Q.push(x);
        in[x] = 1;
        while(!Q.empty())
        {
            int cur = Q.front();
            Q.pop();
            vis[cur] = false;
            for(int i = 1;i <=n;i++)
            {
                if(map[cur][i]!=-INF&&dis[i] < dis[cur] * map[cur][i])
                {
                    dis[i] = dis[cur] * map[cur][i];
                    if(!vis[i])
                    {
                        in[i] ++;
                        if(in[i] >= n) return true;//如果入队次数超过n-1次说明存在环或负权
                        Q.push(i);
                        vis[i] = true;
                    }
                }
            }
        }
        return false;
    }                                                                                                                                                         
    View Code
  • 相关阅读:
    Linux日志清除
    QT vs x64编译
    VC调用QT的UIDLL
    QT UI获得控件ID(HWND)
    安卓黑客工具
    VMware+Windgb+Win7内核驱动调试
    ubuntu 键盘布局修改
    魅族MX3 smart bar处失灵
    把NDK的工具链提取出来单独使用
    arm指令版本
  • 原文地址:https://www.cnblogs.com/DWVictor/p/10294754.html
Copyright © 2011-2022 走看看