首页 > 其他分享 >链式前向星封装版

链式前向星封装版

时间:2024-03-06 20:13:28浏览次数:22  
标签:封装 idx int ne add resize forstar 链式 前向星

类 - 链式前向星(封装)

by 橙之夏

Code

struct forstar
{
    vector<int> _h, _e, _ne, _w;
    int idx = 0;
    forstar(int n) // 初始化,n为容量
    {
        _h.resize(n + 1, -1), _e.resize(n + 1), _ne.resize(n + 1), _w.resize(n + 1);
    }
    void add(int a, int b, int c = 0)
    {
        _e[idx] = b, _w[idx] = c, _ne[idx] = _h[a], _h[a] = idx++;
    }
    int h(int idx) // 返回h[idx]
    {
        return _h[idx];
    }
    int to(int idx) // 返回e[idx]
    {
        return _e[idx];
    }
    int operator[](int idx) // 返回w[idx]
    {
        assert(~idx);
        return _w[idx];
    }
    void next(int &u) // next
    {
        u = _ne[u];
    }
};

接口以及成员函数

  • forstar(int n)
    初始化一组链式前向星,n为容量(最大边的数量)

  • void add(int a, int b, int c = 0)
    添加一条边,a为起点,b为终点,c为边权(可选)

  • int h(int idx)
    返回h[idx],即返回idx的链表头

  • int to(int idx)
    返回e[idx],即返回idx的终点

  • int operator[](int idx)
    返回w[idx],即返回idx的边权

  • void next(int &u)
    让u指向下一个点

example:

signed main()
{
    forstar star(100); //初始化一个可以容纳100条边的链式前向星
    star.add(1,2); //从1向2添加一条有向边,默认边权为0
    star.add(2,3); //从2向3添加一条有向边,默认边权为0
    star.add(1,3,5); //从1向3添加一条边,边权为5
    star.add(1,4); //从1向4添加一条有向边,默认边权为0
    int i = star.h(1); // 定义 i 为节点1的链表头
    while(~i) // 如果i非空
    {
        cout << star.to(i) << " " << star[i] << endl;
        // 输出 i 指向的点以及边权
        star.next(i); //向后移动i指针
    }
}

VS Code 配置文件

将以下内容复制到你的配置文件中,即可使用该代码段

触发词: forstar

"链式前向星(封装版)": {
  "prefix": "forstar",
  "body": [
    "struct forstar",
    "{",
    "    vector<int> _h, _e, _ne, _w;",
    "    int idx = 0;",
    "    forstar(int n) // 初始化,n为容量",
    "    {",
    "        _h.resize(n + 1, -1), _e.resize(n + 1), _ne.resize(n + 1), _w.resize(n + 1);",
    "    }",
    "    void add(int a, int b, int c = 0)",
    "    {",
    "        _e[idx] = b, _w[idx] = c, _ne[idx] = _h[a], _h[a] = idx++;",
    "    }",
    "    int h(int idx) // 返回h[idx]",
    "    {",
    "        return _h[idx];",
    "    }",
    "    int to(int idx) // 返回e[idx]",
    "    {",
    "        return _e[idx];",
    "    }",
    "    int operator[](int idx) // 返回w[idx]",
    "    {",
    "        assert(~idx);",
    "        return _w[idx];",
    "    }",
    "    void next(int &u) // next",
    "    {",
    "        u = _ne[u];",
    "    }",
    "};"
  ],
  "description": "链式前向星(封装版)"
}

标签:封装,idx,int,ne,add,resize,forstar,链式,前向星
From: https://www.cnblogs.com/orangecodelog/p/18057423

相关文章

  • JDBC工具类封装v2.0
    JDBC工具类封装v2.01packagecom.atsyc.api.utils;23/*4*TODO:5*利用线程本地变量,存储连接信息,确保一个线程的多个方法可以获取同一个connection6*优势:事务操作的时候service和dao属于同一个线程,不用再传递参数了7*大家都可以调......
  • JDBC工具类封装v1.0
    JDBC工具类封装1.0版1privatestaticDataSourcedataSource=null;//连接池对象23static{4//初始化连接池对象5Propertiesproperties=newProperties();6InputStreamips=JdbcUtils.class.getClassLoader().getResour......
  • a-modal使用hooks封装状态逻辑并添加全屏切换效果
    /hooks/useModal.jsimport{nextTick,ref}from'vue'import{isFunction}from"lodash-es";exportfunctionuseModal(){ //标题 //执行ok、cancel方法 constvisible=ref(false) constloading=ref(false) consthideModal=()=>{......
  • (持续更新)c++中的继承、封装、多态
    c++面向对象的三大特性为:继承、封装和多态c++认为万事万物都皆为对象,对象上有其属性和行为例如:人可以作为对象,属性有姓名、年龄、身高、体重…,行为有走、跑、跳、吃饭、唱歌⋯车也可以作为对象,属性有轮胎、方向盘、车灯…行为有载人、放音乐、放空调…具有相同性......
  • Golang(Go语言)字符串转时间格式封装以及填坑
    先看代码:packagemainimport( "fmt" "time")funcmain(){ timeStr:="2021-05-2100:00:00" utcTime,_:=time.Parse(time.DateTime,timeStr) fmt.Println(utcTime)fmt.Println(utcTime.Local())}执行结果:从这里可以看出,字符串转换为时......
  • 一类链式并查集问题
    链接:https://ac.nowcoder.com/acm/contest/69510/G来源:牛客网你在一个星球上,外星人amiloac想让你管理一条河流,该河流有\(x\)段,每两段之间有一个挡板隔开,每一段都有各自的颜色\(a\)。你需要管理\(q\)天,每一天你需要做以下的一种操作。\(1\l\r\)将第\(l\)至\(r\)段河流的所有未......
  • list集合转map 封装
    //list转map很多情况下,需要遍历2层for循环,时间复杂度为O(n的平方),可以借助转map,遍历循环一层for循环,需要的从map中取数据,提升速度,//map的时间复杂度为O(1)可忽略不计,一下是对list转map的封装publicstatic<T,K>Map<K,T>list2Map(List<T>list,Function<?superT......
  • KBU808-ASEMI整流桥KBU808参数、尺寸、封装
    编辑:llKBU808-ASEMI整流桥KBU808参数、尺寸、封装型号:KBU808品牌:ASEMI封装:KBU-4正向电流(Id):8A反向耐压(VRRM):800V正向浪涌电流:300A正向电压(VF):1.10V引脚数量:4芯片个数:4芯片尺寸:MIL功率(Pd):中小功率工作温度:-55°C~150°C类型:插件整流桥KBU808整流桥描述:ASEMI品牌KBU8......
  • vite项目使用websocket通讯封装
    项目使用vue3+piniaimport{defineStore}from'pinia';import{getCurrentInstance}from'vue';exportconstuseSocketStore=defineStore('socket',()=>{const{proxy}=getCurrentInstance();constwsUrl=proxy.$......
  • GBU808-ASEMI整流桥GBU808参数、封装、尺寸
    编辑:llGBU808-ASEMI整流桥GBU808参数、封装、尺寸型号:GBU808品牌:ASEMI封装:GBU-4最大重复峰值反向电压:800V最大正向平均整流电流(Vdss):8A功率(Pd):中小功率芯片个数:4引脚数量:4类型:插件、整流桥正向浪涌电流:200A正向电压:1.10V最大输出电压(RMS):封装尺寸:如图工作温度:-55......