以邻接表创建无向图
时间: 2023-11-24 14:11:18 浏览: 83
无向图的邻接表存储及输出
4星 · 用户满意度95%
邻接表是一种用于表示图的数据结构,可以很方便地存储和访问图的信息。邻接表中的每个节点代表图中的一个顶点,每个节点还包含一个链表,其中存储与该顶点相邻的所有顶点。
对于无向图,我们可以使用邻接表来表示它。具体地,我们可以使用一个数组存储所有的顶点,数组的每个元素是一个链表,其中存储与该顶点相邻的所有顶点。这样,我们就可以通过遍历数组和链表来访问图中的所有边。
以下是使用邻接表创建无向图的示例代码(C++实现):
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 邻接表节点
struct Node {
int val; // 顶点编号
Node* next; // 指向下一个节点的指针
Node(int _val) : val(_val), next(nullptr) {}
};
// 无向图类
class Graph {
private:
int V; // 顶点数
vector<Node*> adjList; // 邻接表数组
public:
Graph(int v) : V(v) {
adjList.resize(V, nullptr);
}
// 添加边
void addEdge(int src, int dst) {
// 添加src到dst的边
Node* newNode = new Node(dst);
newNode->next = adjList[src];
adjList[src] = newNode;
// 添加dst到src的边
newNode = new Node(src);
newNode->next = adjList[dst];
adjList[dst] = newNode;
}
// 打印邻接表
void printAdjList() {
for (int i = 0; i < V; i++) {
cout << i << ": ";
Node* curr = adjList[i];
while (curr) {
cout << curr->val << " ";
curr = curr->next;
}
cout << endl;
}
}
};
int main() {
// 创建一个有5个顶点的无向图
Graph g(5);
// 添加边
g.addEdge(0, 1);
g.addEdge(0, 4);
g.addEdge(1, 2);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 3);
g.addEdge(3, 4);
// 打印邻接表
g.printAdjList();
return 0;
}
```
在上面的代码中,我们首先定义了一个邻接表节点 `Node`,包含顶点编号和指向下一个节点的指针。然后定义了一个无向图类 `Graph`,其中包含顶点数和邻接表数组。通过 `addEdge` 方法,我们可以往图中添加边。最后,通过 `printAdjList` 方法打印邻接表。
阅读全文