邻接表|SPFA

邻接表简易定义
//定义简易邻接表

struct edge {
    int to,cost;
};
vector <edge> adjmap[maxn];

int dis[maxn];
int vis[maxn];
int path[maxn];
int inque[maxn];

SPFA不完整实现

bool SPFA(int s,int totalnode) {
    queue<int> q;
    dis[s] = 0;

    q.push(s);
    inque[s] = 1;
    //统计入队次数
    while(!q.empty()) {
        int u = q.front();
        q.pop();
        vis[u] = 0;
        //队头元素出队 消除标记
        //遍历定点u邻接表
        for(int v=0; v<adjmap[u].size(); v++) {
            int to = adjmap[u][v].to;
            if(dis[u]+adjmap[u][v].cost<dis[to]) {
                dis[to] = dis[u]+adjmap[u][v].cost;//relax
                if(!vis[to]) {
                    //定点to不在队列内
                    vis[to] = 1;//标记
                    inque[to]++;//统计次数
                    q.push(to);//入队
                    if(inque[to]>totalnode) {
                        //超过如对次数上限 说明有负数环
                        return false;
                    }
                }
            }
        }
    }
    return true;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容