c++采用邻接表创建无向网,并输出邻接表
时间: 2023-12-19 08:32:28 浏览: 95
以下是使用C++采用邻接表创建无向网,并输出邻接表的示例代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 边的结构体
struct Edge {
int dest; // 目标顶点
int weight; // 权重
};
// 邻接表的结点
struct Node {
int vertex; // 顶点
vector<Edge> edges; // 边的集合
};
// 创建无向网的邻接表
vector<Node> createAdjacencyList(int numVertices, vector<vector<int>> edges) {
vector<Node> adjacencyList(numVertices);
// 添加边到邻接表
for (auto edge : edges) {
int src = edge[0];
int dest = edge[1];
int weight = edge[2];
// 添加边到源顶点的边集合
Edge e1 = {dest, weight};
adjacencyList[src].edges.push_back(e1);
// 添加边到目标顶点的边集合(无向图需要添加反向边)
Edge e2 = {src, weight};
adjacencyList[dest].edges.push_back(e2);
}
return adjacencyList;
}
// 输出邻接表
void printAdjacencyList(vector<Node> adjacencyList) {
for (int i = 0; i < adjacencyList.size(); i++) {
cout << "顶点 " << i << " 的邻接表:";
for (auto edge : adjacencyList[i].edges) {
cout << " -> " << edge.dest << " (权重:" << edge.weight << ")";
}
cout << endl;
}
}
int main() {
int numVertices = 5; // 顶点数量
vector<vector<int>> edges = {{0, 1, 2}, {0, 3, 4}, {1, 2, 1}, {1, 3, 3}, {2, 4, 5}, {3, 4, 6}}; // 边的集合
vector<Node> adjacencyList = createAdjacencyList(numVertices, edges);
printAdjacencyList(adjacencyList);
return 0;
}
```
输出结果为:
```
顶点 0 的邻接表: -> 1 (权重:2) -> 3 (权重:4)
顶点 1 的邻接表: -> 0 (权重:2) -> 2 (权重:1) -> 3 (权重:3)
顶点 2 的邻接表: -> 1 (权重:1) -> 4 (权重:5)
顶点 3 的邻接表: -> 0 (权重:4) -> 1 (权重:3) -> 4 (权重:6)
顶点 4 的邻接表: -> 2 (权重:5) -> 3 (权重:6)
```
阅读全文