基于c++11特性的邻接表实现

很多时候,用邻接矩阵(二维数组)存图,如果是稀疏图,一般会造成很大的空间浪费。

c++11 的vector容器新增了 emplace_back方法。一般和push_back用法没有大的不同,但是性能要好。

最主要的是,据我研究发现 emplace_back()方法可以像邻接表一样给数组元素链接上邻居

这样我们就可以用一维的vector数组去实现二维的操作。节省了一部分资源

举个例子:

#include<bits/stdc++.h>
using namespace std;


int main()
{
    vector<int>v[29];
    v[3].emplace_back(1);
    v[3].emplace_back(2);
    v[3].emplace_back(333);
    for(int i : v[3])
        cout<<i<<endl;
}

这样跑出来,结果是

 

 也就是说,邻接表甚至简单的链表都可以基于v[i].emplace_back(j)实现。

在面对被卡空间复杂度或者递归层数要爆炸的情况下,这个方法很有用

 

posted @ 2021-01-01 20:47  然终酒肆  阅读(144)  评论(0)    收藏  举报