spfa_dfs的优化

spfa的朴素优化

void spfa(Node){
    instack[Node] = true;
    for(Node,v) in E:
        if dis[v]>dis[Node]+edge(Node,v)){
            dis[v] = dis[Node]+edge(Node,v);
            if not instack[v] {
                spfa(v);
            }else{
               return;
            }
        }
    instack[Node] = false;
}

spfa的限制修改优化

void spfa_init(node){
    for(node,v) in e
        if dis[node] + edge(node,v)<dis[v]{
        dis[v] = dis[node] + edge(node,v);
        spfa_init(v);
        return true;
    }
    return false;
}
main{
    for node in v:
        while spfa_init(node);
    for node in v:
        spfa(node);
}