IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 手动实现邻接表(C++) -> 正文阅读

[C++知识库]手动实现邻接表(C++)

因为在图论中总会遇到存图的情况,如果用邻接矩阵进行存储,相当于需要开辟 的平方的空间,但采用邻接表,有多少条边开辟多少空间,更节省空间。


两种表达方式:

  • t o p = 0 top=0 top=0 存第一条边,边的个数范围为 [ 0 , m ? 1 ] [0,m-1] [0,m?1]
    此时需要把头数组初始化为-1,memset(head,-1,sizeof(head)
    且在对某一点进行枚举边时(看该点与哪些点相连),应该写成for(int j=head[i];~j;j=edge[i].next代表若下一条边的头是-1退出,没有边了。
  • t o p = 1 top=1 top=1 存第一条边,边的个数范围为 [ 1 , m ] [1,m] [1,m]
    此时需要把头数组初始化为0,memset(head,0,sizeof(head)
    且在对某一点进行枚举边时(看该点与哪些点相连),应该写成for(int j=head[i];j;j=edge[i].next代表若下一条边的头是0退出,没有边了。

在代码中呈现:

#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
struct node{
    int to,next;
    int val;//可以给边带权
}edge[maxn];
int head[maxn],top;
//head[i] 表示以i为起点的边分别对应的是第head[i]条边
//top 边的编号 
int n,m;
//点数 边数
void init(){
    memset(head,-1,sizeof(head));
    top=0;
}
void add(int u,int v,int w){
    edge[top].to=v;//第top条边的终点
    edge[top].next=head[u];//上一条(head[u])的边的编号 因为下面要更新了 所以要先存下来 方便后面对u点遍历
    edge[top].val=w;//存值
    head[u]=top++;//存第u个点(起点)最后一次出现在第top条边上
}
int main(){
    init();
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y,w;
        cin>>x>>y>>w;
        add(x,y,w);//单向边
        add(y,x,w);//双向边
    }
    for(int i=1;i<=n;i++){
        for(int j=head[i];~j;j=edge[j].next){
            //从第i个点的最后一条边往前推
            int d=edge[j].to;//该边的终点 
        }
    }
    return 0;
}

总结:邻接表的存储是以边为基础,会存每个点通过编号(top)的边与点(edge[j].to)相连。已知点u,就可以通过邻接表得到与u点连接的所有点,也可以得到两点间的边权。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 10:58:44  更:2021-08-03 10:58:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 15:16:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码