首页 > 其他分享 >dijkstra模板

dijkstra模板

时间:2023-10-31 23:26:52浏览次数:35  
标签:idx int void vis dijkstra wt 模板

暴力—时间复杂度O(n^2)

int ne[N],h[N],idx,e[N],wt[N];//wt[]表示边权

void add(int u,int v,int w) //链式前向星存图
{
    idx++;
    e[idx]=v;
    wt[idx]=w; //边权
    ne[idx]=h[u];
    h[u]=idx;
}

int vis[N]; //vis[i]表示i点是否在s集合中
int d[N]; //d[i]表示 s->i 的最短路径

int p[N]; //p[i]表示i点是从哪个点过来的

void dijkstra(int s)
{
    for(int i=1;i<=n;i++)
    {
        d[i]=INF;
        //如果多次求d
        //要更新vis[]
        //要更新p[]
    }
    d[s]=0;
    //执行n次把点从t集合到s集合
    for(int i=1;i<=n;i++)
    {
        //1,找到最短路u
        int u;
        int minn=INF;
        for(int j=1;j<=n;j++)
        {
            //s集合与t集合的最短边
            if(d[j]<minn&&vis[j]==0)
            {
                u=j;
                //把最小值的下标给u
                minn=d[j];
                //把最小值给minn
            }
        }

        //2,把u移到s集合中
        vis[u]=1; //移到s集合中

        //3,在t集合中,跟u相邻的点进行松弛操作
        for(int j=h[u];j;j=ne[j])
        {
            int v=e[j];
            int w=wt[j];
            if(vis[v]==0&&d[v]>d[u]+w)
            {
                d[v]=d[u]+w;
                p[v]=u;//到达v的路径是从u来的
            }
        }
    }
}

优先队列—时间复杂度O(mlogm)

struct node 
{
    int to;
    int we;
};
vector<node >g[N];

bool vis[N];
int d[N];

//点u,d[u]

struct vnode
{
    int p;//点
    int d;//距离
    bool operator< (const vnode&b)  const//小顶堆——重载运算符
    {
        return d>b.d;
    }
};

void dijkstra(int s)
{
    priority_queue<vnode > q; 
    for(int i=1;i<=n;i++)
    {
        d[i]=INF;
    }
    d[s]=0;
    q.push({s,0});
    while(!q.empty())
    {
        int u=q.top().p;//找顶堆元素
        q.pop();
        if(vis[u])  //如果已经找到了,就不用再操作了
        {
            continue;
        }
        //如果在s集合中,就不用操作了,只有在t集合中,我们才拿进去,然后松弛
        vis[u]=1;
        for(auto e:g[u])
        {
            int v=e.to;
            int w=e.we;
            if(vis[v]==0&&d[v]>d[u]+w)
            {
                d[v]=d[u]+w;
                q.push({v,d[v]});
            }
        }
    }
}

标签:idx,int,void,vis,dijkstra,wt,模板
From: https://www.cnblogs.com/gongyuchen/p/17801959.html

相关文章

  • 快速幂模板
    //快速幂//底数128longlongksm(__int128a,longlongb,longlongp){ __int128res=1; while(b){ if(b&1)res=res*a%p; b>>=1; a=a*a%p; } returnres;}//不带模参数,非128longlongksm(longlonga,longlongb){ longlongre......
  • 二分模板 Acwing 789 数的范围
     二分一定有解,若出现无解,一定是题目中无解二分步骤:定义check函数,先找到一个x,使得区间左边满足条件区间右边不满足条件,定义mid=l+r>>1去判断于x的关系,此时需要判断边界关系,例如当a[mid]小于x时,说明二分值在x的左边,此时缩小范围为【mid,r】,即令l=mid,此时返回check函数,......
  • 洛谷P3805 【模板】manacher
    题目链接:https://www.luogu.com.cn/problem/P3805manacher算法模板题。参考资料:https://oi-wiki.org/string/manacher/示例程序:#include<bits/stdc++.h>usingnamespacestd;constintmaxn=2.2e7+5;intn;chars[maxn/2],a[maxn];intp[maxn];voidinit(){......
  • Mac OS XML禁用app模板 配合work space one 使用
    参考link:https://www.youtube.com/watch?v=NOVZpp2kNUA支持禁用字段:name/cdhash/path/bundleId1<dict>2<key>Restrictions</key>3<array>4<dict>5<key>Attributes</key>6&......
  • java根据模板生成表格和列表
    1、模板所有的标签都是以{{开始,以}}结束。{{template}}文本{{@template}}图片{{#template}}表格{{*template}}列表{{+template}}Word文档合并{{?template}}{{/template}}if和foreach功能 2、引入包<!--POI依赖使用xlsxxml的格式(即X......
  • 装饰器模板
    双层装饰器defoutter(func):defwrapper(*args,**kwargs): #wrapper是未来要运行的函数#此处加功能res=func(*args,**kwargs) #func是被装饰的函数returnresreturnwrapper三层装饰器:给双层装饰器加参数的defsanceng():......
  • django基础到高手知识笔记总结 共4大模块50页md文档 第2章:django视图和模板的使用
    当你考虑开发现代化、高效且可扩展的网站和Web应用时,Django是一个强大的选择。Django是一个流行的开源PythonWeb框架,它提供了一个坚实的基础,帮助开发者快速构建功能丰富且高度定制的Web应用完整版笔记直接地址:请移步这里共10章,31子模块,总计18647字工程搭建学习目标......
  • 提高组常见模板总结
    注$^1$:本文中带有~~小粉兔~~字样的文字均指不怎么重要的东西。~~主要是不会~~注$^2$:马蜂良好,可以超,没问题的##~~【小粉兔】~~区间数据结构###1.ST表适用范围:有函数$f$使得$x=f(x,x)$,如$\max,\gcd$等。代码实现:```cppvoidinit(){ for(inti=0;i<n;i++)s......
  • 【模板】自动清空数组 acarray
    这个板子有什么意义?检测对编译器的了解程度。template<classT,intN>structacarray{Tval[N],rev;inttim,vis[N];structrefer{int*tim,*vis;T*val,*rev;refer()=delete;refer(acarray&a,size_tpos):tim(&a.tim),vi......
  • WPF 控件模板
    控件模板WPF的ControlTemplate是一种用于定义和自定义控件的外观和结构的模板,它可以完全替换控件的默认模板,实现个性化和复杂的效果。WPF的ControlTemplate有以下几个特点:ControlTemplate是一个XAML元素,它可以包含任何类型的UI元素,如布局、形状、图像、文本等,这些元素......