🐵指尖猴全新升级
第16课:图的存储:邻接矩阵与邻接表
🗺️

图的存储:邻接矩阵与邻接表

同一张图,两种存法,各显神通!

📖知识引入

🏢邻接矩阵
g[i][j]=1表示i和j之间有边,一个n×n的二维数组
🎒邻接表
每个点挂一个邻居列表,只存真实存在的边,省内存
⚖️怎么选
稠密图用矩阵方便,稀疏图用邻接表,按图的样子选
📦vector实现
vector<vector<int>> g,g[u]存u的所有邻居
💡
n到十万级别的稀疏图用邻接矩阵会爆内存,vector邻接表才是正解

🔍vector邻接表存图

#include <vector>
using namespace std;

const int N = 100005;
vector<int> g[N];       // 邻接表:g[u] 存 u 的所有邻居

void addEdge(int u, int v) {
    g[u].push_back(v);  // 无向图两个方向都存
    g[v].push_back(u);
}

// 遍历 u 的所有邻居:
// for (int v : g[u]) cout << v << " ";

addEdge加边,遍历g[u]就是访问u的所有邻居。

🎯小测验

第1题:邻接矩阵中g[i][j]=1表示什么?

第2题:点多边少的稀疏图更适合哪种存法?

第3题:vector<int> g[N]中g[u]存的是?

📝本课知识点

  • ✓矩阵好写但费内存
  • ✓邻接表只存真边
  • ✓稀疏图选邻接表
第16课完成!继续探索下一课吧 🚀