C++用邻接表实现无向图,不能使用STL容器
时间: 2024-02-06 14:10:44 浏览: 80
C++实现有向图邻接表的构建
邻接表是一种常见的图的表示方法,它使用链表来存储图的顶点和边。对于无向图,每个顶点的链表中存储与该顶点相邻的所有顶点。下面是一个使用C++实现邻接表的示例代码,其中不使用STL容器:
```c++
#include <iostream>
using namespace std;
// 邻接表中的结点
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 图中的顶点
struct GraphNode {
int val;
ListNode* neighbors;
GraphNode(int x) : val(x), neighbors(NULL) {}
};
// 创建一个新结点
ListNode* createNode(int val) {
ListNode* node = new ListNode(val);
node->next = NULL;
return node;
}
// 将边插入图中
void addEdge(GraphNode* graph[], int src, int dest) {
// 创建邻接表结点
ListNode* node = createNode(dest);
node->next = graph[src]->neighbors;
graph[src]->neighbors = node;
// 无向图需要将边反向再插入一遍
node = createNode(src);
node->next = graph[dest]->neighbors;
graph[dest]->neighbors = node;
}
// 打印邻接表
void printGraph(GraphNode* graph[], int n) {
for (int i = 0; i < n; i++) {
cout << "顶点 " << i << " 的邻接表: ";
ListNode* node = graph[i]->neighbors;
while (node != NULL) {
cout << node->val << " ";
node = node->next;
}
cout << endl;
}
}
int main() {
int n = 5; // 图中的顶点数
GraphNode* graph[n]; // 存储图的结构体数组
for (int i = 0; i < n; i++) {
graph[i] = new GraphNode(i);
}
// 添加边
addEdge(graph, 0, 1);
addEdge(graph, 0, 4);
addEdge(graph, 1, 2);
addEdge(graph, 1, 3);
addEdge(graph, 1, 4);
addEdge(graph, 2, 3);
addEdge(graph, 3, 4);
// 打印邻接表
printGraph(graph, n);
return 0;
}
```
在上面的代码中,`GraphNode`表示图中的顶点,`ListNode`表示邻接表中的结点。`createNode`函数用于创建邻接表中的结点,`addEdge`函数用于将边插入图中,`printGraph`函数用于打印邻接表。在`main`函数中,我们首先创建了一个包含5个顶点的图,并且添加了7条边。最后打印出了图的邻接表。
阅读全文