首页 > 其他分享 >dijkstra的封装模版

dijkstra的封装模版

时间:2024-08-02 19:39:42浏览次数:9  
标签:封装 DIJ int 模版 long dijkstra que dis

/**   - swj -
   *         
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /   ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ
 
**/
#include <bits/stdc++.h>
using namespace std;
using i64=long long;

struct DIJ{
    using i64=long long;
    using pii=pair<i64,i64>;
    vector<i64>dis;//存点到点的最小距离
    vector<vector<pii> >G;//存起点和终点的编号,边权
    
    DIJ() {}//防止默认状态报错,类似vector<int>a, 
    
    //为dijkstra初始化
    DIJ(int n)
    {
        dis.assign(n+1,1e18);//把所有元素设置为1e18
        G.resize(n+1);//把G的大小设置为n+1
    }
    
    void add(int u,int v,int w){
        G[u].emplace_back(v,w);//u v为点,w为边权
    }
    //堆优化版的dijkstra
     void dijkstra(int s) {
        priority_queue<pii> que;
        dis[s] = 0;
        que.push({0, s});
        while (!que.empty()) {
            auto p = que.top();
            que.pop();
            int u = p.second;
            if (dis[u] < p.first) continue;
            for (auto [v, w] : G[u]) {
                if (dis[v] > dis[u] + w) {
                    dis[v] = dis[u] + w;
                    que.push({ -dis[v], v});
                }
            }
        }
    }
};

int main()
{
    ios::sync_with_stdio(false),cin.tie(0);
    int n,m;
    cin>>n>>m;//点和边数
   //初始化
    DIJ dij(n);//只找一个点这样初始化,多个点建vector<DIJ>dij
    //如果你只开了n的大小就会段错误,题目数据v w可能大于n
   
    for(int i=0;i<m;i++)
    {
        int u,v,w;
        cin>>u>>v>>w;
        
        
            dij.add(u,v,w);
            dij.add(v,u,w);

    }
    
     dij.dijkstra(1);
    
 
    
    int q; cin>>q;
    while(q--)
    {
        int u,v; cin>>u>>v;
        //输出题目要求的东西
    }
    

    
}




标签:封装,DIJ,int,模版,long,dijkstra,que,dis
From: https://www.cnblogs.com/swjswjswj/p/18339462

相关文章

  • vue3统一封装axios
    1.在src下新建文件夹apis在apis下新建一个index.ts2.在index.ts添加importaxiosfrom'axios';exportconsthttpInstance=axios.create();3.在终端输入npmrunlint确定文件没有问题4.定义并导出一个后端的数据类型exporttypeBkResponse={data:any;code:numb......
  • Java SE核心技术——7封装
    封装的概述对外部隐藏内部细节1、封装的目的是隐藏对象的内部状态和实现细节,只暴露出一个可以被外界访问和操作的接口。通过将类的属性设置为私有(private),防止外部直接访问和修改这些属性。2、好处:高内聚低耦合(面向对象设计的最高原则)(1)隐藏事物的实现细节降低使用难度(2)提高了......
  • Flutter 插件之http(介绍、使用、二次封装)
    背景在我们日常开发过程中,经常会使用到网络请求,而在Flutter插件中,最常用的请求插件一共两个,分别是:1、dio2、http其中dio我已经做过详细介绍了(post、get等请求、文件上传、请求重试等),这里就不做过多阐述,下面附上文章链接,如有需要可前往查看。https://blog.csdn.net/WangQin......
  • 鸿蒙 HarmonyOS PullToRefresh下拉刷新二次封装
    ✍️作者简介:小北编程(专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向)......
  • 封装,private关键字,this关键字
    我们上一个案例,使用private关键字将成员进行修饰,外界无法直接访问,讲了那么长时间,实际上就是在传输一个思想面向对象编程的三大特征,第一大特征:封装封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。private关键字:1、被private修饰的成员,外......
  • Vue Hook 封装图片懒加载通用业务
     一、什么是图片懒加载图片懒加载(LazyLoading)是一种在用户需要的时候(通常是滚动到可视区域)才加载图片的技术。通过这种方式,可以减少页面的初始加载时间,减少带宽消耗,提高用户体验。二、Vue中使用IntersectionObserver实现图片懒加载IntersectionObserver是一个现代浏览器......
  • Vue Hook 封装通用型表格
    一、创建通用型表格的需求实现一个通用型表格组件,具备以下功能:动态列配置。分页功能。排序功能。可扩展的行操作功能。二、设计通用型表格组件首先,需要设计一个基础的表格组件,它接受列配置、数据和分页信息等参数。1.创建useTableHook在src/hooks目录下创建useTa......
  • 小程序http封装
    constui=require('./ui');constBASE_URL='http://119.23.227.211:8011'/***网络请求request*obj.data请求接口需要传递的数据*obj.showLoading控制是否显示加载Loading默认为false不显示*obj.contentType默认为application/json*obj.method请求......
  • 封装Echarts组件
    构建配置文件,按需引入相关组件//echarts.config.js//*需要哪些组件和配置,请在import时手动添加。import*asechartsfrom'echarts/core';//引入用到的图表import{BarChart,PieChart}from'echarts/charts';//引入提示框、数据集等组件import{DataZoomCo......
  • 封装
    封装目录封装封装的概念什么是封装类?封装的特点:实现Java封装的步骤封装的概念将东西包在一起,然后以新的完整的形式呈现出来。将方法和字段包装到一个单元中,单元以类的形式实现信息隐藏,隐藏对象的实现细节,不让外部直接访问到。将数据和方法包装进类,加上具体实现的隐藏(访问修饰符......