创建有向图的逆邻接表
时间: 2023-12-02 09:42:02 浏览: 204
有向图的构建(邻接表)
5星 · 资源好评率100%
创建有向图的逆邻接表的过程如下所示:
1. 定义一个大小为n的vector数组adj,其中n为有向图的节点数。
2. 遍历有向图的每个节点i,对于每个节点i,遍历其所有的出边,假设出边指向节点j,则将j加入到adj[i]中。
3. 遍历有向图的每个节点i,对于每个节点i,遍历其所有的入边,假设入边来自节点j,则将j加入到adj[i]中。
下面是C++的示例代码实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
vector<int> reverse_adj[100]; // 定义大小为100的逆邻接表
void build_reverse_adj(int n, vector<int> adj[]) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < adj[i].size(); j++) {
int v = adj[i][j];
reverse_adj[v].push_back(i); // 将i加入到v的逆邻接表中
}
}
}
int main() {
int n = 5; // 假设有5个节点
vector<int> adj[100]; // 定义大小为100的邻接表
// 构建邻接表
adj[0].push_back(1);
adj[0].push_back(2);
adj[1].push_back(2);
adj[2].push_back(0);
adj[2].push_back(3);
adj[3].push_back(3);
adj[4].push_back(2);
// 构建逆邻接表
build_reverse_adj(n, adj);
// 输出逆邻接表
for (int i = 0; i < n; i++) {
cout << "节点" << i << "的逆邻接表为:";
for (int j = 0; j < reverse_adj[i].size(); j++) {
cout << reverse_adj[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
阅读全文