用c++实现,并给出完整代码
时间: 2024-09-29 15:06:32 浏览: 25
基于c++语言实现的玫瑰花完整代码
在C++中实现上述无向图的邻接表,我们需要定义一些基本的数据结构和函数来存储和操作边以及邻接表。以下是完整的C++代码示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
struct Node {
int id;
vector<int> neighbors; // 存储邻接节点
};
class Graph {
private:
int numVertices;
vector<Node*> vertices;
public:
Graph(int n) : numVertices(n) {
for (int i = 0; i < n; ++i) {
vertices.push_back(new Node{i});
}
}
~Graph() {
for (Node* vertex : vertices) {
delete vertex;
}
}
void addEdge(int src, int dest) {
vertices[src - 1].neighbors.push_back(dest);
// 对于无向图,还需要将dest添加到src的邻居中
if (numVertices > 1) {
vertices[dest - 1].neighbors.push_back(src);
}
}
// 打印邻接表
void printAdjacencyList() {
for (int i = 0; i < numVertices; i++) {
cout << "Node " << i + 1 << ": ";
for (int neighbor : vertices[i].neighbors) {
cout << neighbor + 1 << " ";
}
cout << endl;
}
}
};
int main() {
int n, m;
bool isDirected;
// 获取输入
cin >> n >> m >> isDirected; // 假设输入S已被转换为bool类型的isDirected
Graph graph(n);
// 添加边
for (int i = 0; i < m; ++i) {
int src, dst;
cin >> src >> dst;
graph.addEdge(src, dst);
}
// 打印邻接表
graph.printAdjacencyList();
return 0;
}
```
注意,这个代码假设输入的有向标志`S`已经被转换成布尔值`isDirected`,并在`addEdge`函数中相应地处理了无向图的情况。如果你的输入格式中直接提供`S`,你需要根据实际情况调整获取输入部分。
阅读全文