U222098 图的存储【笔记】

题目背景

## 链式前向星 ``` #include using namespace std; struct q{ int to; //到达点的信息 int w; //距离 int next; //下一条边的信息 }; int head[105]; //(105:边的数量)所能指向的第一条边 q k[105]; //(同上)边的数组 int cnt = 0; //每条边的下标 void f(int a,int b,int c){ //a到达b的距离是c //刚开始 1→-1 k[cnt].to = b; k[cnt].w = c; k[cnt].next = head[a];//0→-1 head[a] = cnt;//1→0 //此时1→0→-1 cnt++;//下一条边 } int main(){ int n,m; int a,b,c; cin >> n >> m; for (int i = 1;i a >> b >> c; f(a,b,c); } int v;//已知边(求能到达哪些边) cin >> v; for (int i = head[v];i != -1;i = k[i].next){ //输出 cout

题目描述

## 矩阵表示法 - 用**矩阵**表示顶点间的邻接关系。 - $A[i][j]=1$表示顶点$i$到$j$有边,等于$0$表示没有边。 - 便于**快速判断**两个顶点间**是否有边。** - 空间开销为$O(|V|^2)$,不存在的边也占了空间。 - 适用于**稠密图**。 --- ### 代码 ```cpp #include using namespace std; int G[105][105]; int main(){ int n,m; cin >> n >> m; for (int i = 1;i > u >> v; G[u][v] = 1; } for (int i = 1;i

输入格式

输出格式

## 邻接表 - **便于快速找到一个顶点的所有邻居**。 - 空间开销为$O(|E|+|V|)$。 - **紧凑**,只有存在的边占空间,适用于**稀疏图**。 --- ### 代码 ```cpp #include using namespace std; vector G[105]; // t1能到达的第t2个点 = a[t1][t2] int n,m; int main(){ int x,y; cin >> n >> m; // 点数、边数 for (int i = 1;i > x >> y; G[x].push_back(y); G[y].push_back(x); } for (int i = 1;i m >> b >> c; // 点数、边数、起点、终点 for (int i = 0;i < m;i++){ cin >> x >> y; a[x].push_back(y); } w[b] = 1; // 初始化 dfs(b); if (k == 1){ cout