zoukankan      html  css  js  c++  java
  • 边表+SPFA

    传说中效率很NB的单元最短路径算法,传说中时间复杂度为O(kE),k为长度,平均值为2,不知道这话是谁说的,一说流传oi界几年了

    边表就是数组模拟邻接表,没学会很难,学会很简单的样子啊

    #include <iostream>
    #include <cstring>
    #include <queue>
    using namespace std;
    struct edge
    {
        int v,w,next;
    }a[500001];
    int link[10001],d[10001],n,m,s,X,Y,Z;
    bool v[10001];
    queue<int>q;
    void add(int u,int v,int w)
    {
        static int p=0;
        p++;
        a[p].v=v;
        a[p].w=w;
        a[p].next=link[u];
        link[u]=p; 
    }
    
    int main()
    {
        cin >> n >> m >> s;//分别为顶点数 有向边数 源点
        for(int i=1;i<=m;i++)
        {
            cin >> X >> Y >> Z;//是有向边 x->y 长度z
            add(X,Y,Z);
        }
        q.push(s);
        v[s]=true;
        memset(d,0x3F,sizeof(d));
        d[s]=0;
        while(!q.empty())
        {
            int x=q.front();
            q.pop();
            v[x]=false;
            for(int i=link[x];i!=0;i=a[i].next)
            {
                if(d[x]+a[i].w<d[a[i].v])
                {
                    d[a[i].v]=d[x]+a[i].w;
                    if(v[a[i].v]==false)
                    {
                        v[a[i].v]=true;
                        q.push(a[i].v);
                    }
                }
            }
        }
        for(int i=1;i<=n;i++)
        {
            cout << d[i] << ' ';
        }
        return 0;
    }
    

    233 

  • 相关阅读:
    String对象的属性和方法
    Math对象的属性和方法
    对象Date的方法
    HTML5和CSS3阶段,我是如何学习的?
    移动端项目开发心得
    关于元素隐藏/显示的各种方法
    啊哈算法(一)
    项目心得。
    CSS篇之DIV+CSS布局
    CSS篇之动画(2)
  • 原文地址:https://www.cnblogs.com/oier/p/5931349.html
Copyright © 2011-2022 走看看