• Spfa(最短路求解)


    spfa(最短路求解)

    模板:

    
    #include<iostream>  
    #include<cstdio>  
    #include<queue>  
    #include<cstring>  
    using namespace std;  
    const int maxn = 105;  
    const int maxm = 100005;  
    struct Edge{  
        int to,w,next;  
    }edge[maxm<<1];  
    int tot = 0,dis[maxn],cnt[maxn],head[maxn];  
      
    void addedge(int u,int v,int w)  
    {  
        edge[tot].to = v;edge[tot].w = w;edge[tot].next = head[u];  
        head[u] = tot++;  
    }  
      
    void spfa(int st,int ed)  
    {  
        int i;  
        queue<int>que;  
        while (!que.empty())    que.pop();  
        memset(dis,0x3f3f3f3f,sizeof(dis));  
        memset(cnt,0,sizeof(cnt));  
        que.push(st);  
        dis[st] = 0;  
        cnt[st] = 1;  
        while (!que.empty())  
        {  
            int u = que.front();  
            que.pop();  
            if (u == ed)    continue;  
            for (i = head[u];i != -1;i = edge[i].next)  
            {  
                int v = edge[i].to;  
                if (dis[u] + edge[i].w < dis[v])  
                {  
                    dis[v] = dis[u] + edge[i].w;  
                    if (!cnt[v])    que.push(v);  
                    cnt[v] = cnt[u];  
                }  
                else if (dis[u] + edge[i].w == dis[v])  
                {  
                    if (!cnt[v])    que.push(v);  
                    cnt[v] += cnt[u];  
                }  
            }  
        }  
    }  
      
    int main()  
    {  
        int N,M,S,E,u,v,w,i;  
        memset(head,-1,sizeof(head));  
        scanf("%d%d%d%d",&N,&M,&S,&E);  
        while (M--)  
        {  
            scanf("%d%d%d",&u,&v,&w);  
            addedge(u,v,w);  
            addedge(v,u,w);  
        }  
        spfa(S,E);  
        printf("%d %d
    ",dis[E],cnt[E]);  
        return 0;  
    }  
    
    

    也可以计算有多少个最小生成树

  • 相关阅读:
    UIButton 动态改变文本闪烁问题
    利用GDataXML解析XML文件
    限制键盘只能输入数字
    获得view所在的控制器
    使用Canvas绘制简单的时钟控件
    Spring整合ActiveMq消息队列
    Symmetric Key Encryption DES
    OSPF 高级实验
    OSPF 基础实验
    EIGRP 高级实验
  • 原文地址:https://www.cnblogs.com/fzuljz/p/6115512.html
Copyright © 2020-2023  润新知