spfa最短路

来源:互联网 发布:软件稳定性测试方法 编辑:程序博客网 时间:2024/04/30 10:37
int n;//表示n个点,从1到n标号int s, t;//s为源点,t为终点int d[N];//d[i]表示源点s到i的最短路int p[N];//记录路径(记录前驱)queue <int> q; ////一个队列bool vis[N];//vis[i] = 1表示点i在队列中int spfa_bfs(int s){    queue<int> q;    memset(d, 0x3f, sizeof(d));    d[s] = 0;    memset(c, 0, sizeof(c));    memset(vis, 0, sizeof(vis));    q.push(s);    vis[s] = 1;    c[s] = 1;    int ok = 1;    while(!q.empty())    {        int x;        x = q.front();        q.pop();        vis[x] = 0;        for(int k = f[x]; k != 0; k = next[k])        {            int u = v[k];            if(d[x] + w[k] < d[y])            {                d[y] = d[x] + w[k];                if(!vis[y])                {                    vis[y] = 1;                    c[y]++;                    q.push(y);                    if(c[y] > nn)                    {                        return okk = 0;                    }                }            }        }    }    return ok;}int spfa_dfs(int u){    vis[u] = 1;    for(int k = f[u]; k != 0; k = e[k].next)    {        int v = e[k].v, w = e[k].w;        if(d[u] + w < d[v])        {            d[v] = d[u] + w;            if(!vis[v]){            if(spfa_dfs(v))            {                return 1;            }            }            else{                return 1;            }        }    }    vis[u] = 0;    return 0;}
0 0
原创粉丝点击