图的储存:矩阵、邻接表、链式前向星

一、矩阵

二、邻接表

       1. 自己写

//图的邻接表存储
struct Lnode{
    int next;   //指向的点
    int pre;    //指入的点
    int w;      //边的权
}

        2. C++ vector

        如果题目给定若干的边[i,j],表示从i->j 有一条边,那么可以将这些边用二维数组存储,转化成图。

有向图:

//题目给定的边表
vector<vector<int>> edges={{1,2},{1,3},{1,5},{2,1},{2,5},{3,4},{5,2},{5,4}};
//可以看出这是一个有向图,而且有两条边是双向的1<->2和2<->5

//有向图的储存:用一个二维数组式的邻接表储存
//指出的边表
vector<vector<int>> graph_out;
for(auto edge:edges){
    graph_out[edge[0]].push_back(edge[1]);
}

//指入的边表
vector<vector<int>> graph_in;
for(auto edge:edges){
    graph_in[edge[1]].push_back(edge[0]);
}

//其中edge是一维数组,表示edges里的一条边,for循环是对edges的所有边edge都进行这样的操作。
//egde[0]:一条边的第一个数,即指出的结点。
//edge[1]:指入的结点
//graph[edge[0]]:指出的结点的行
//graph[edge[0]].push_back(edge[1]):用graph[i]这一行指指出结点,graph[i][j]指指出结点指向的结点有哪些。

无向图

//无向图的存储
vector<vector<int>> graph;
for(auto edge:edges){
    graph[edge[0]].push_back(edge[1]);
    graph[edge[1]].push_back(edge[0]);

}

复杂度:

由于邻接表只储存了连接的边的信息,所以其空间复杂度为Θ(m) (m:边数),这相对于矩阵存图的 O(n^2) 复杂度是一个很大优化。

三、链式前向星

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值