怎么构建无向图c++头文件
时间: 2023-07-31 08:09:58 浏览: 41
要构建无向图的C++头文件,可以参考以下步骤:
1. 定义节点类
无向图的节点包含一个标识符和一个存储其相邻节点的列表。
```c++
class Node {
public:
int id;
std::vector<Node*> neighbors;
Node(int id) {
this->id = id;
}
};
```
2. 定义图类
图类包含一个节点列表和一些用于添加或删除节点和边的方法。
```c++
class Graph {
public:
std::vector<Node*> nodes;
void addNode(int id);
void addEdge(int id1, int id2);
void removeNode(int id);
void removeEdge(int id1, int id2);
};
```
3. 实现方法
在实现方法时,需要在节点列表中添加或删除节点,并在节点的相邻节点列表中添加或删除相邻节点。
```c++
void Graph::addNode(int id) {
Node* node = new Node(id);
nodes.push_back(node);
}
void Graph::addEdge(int id1, int id2) {
Node* node1 = nullptr;
Node* node2 = nullptr;
for (Node* node : nodes) {
if (node->id == id1) {
node1 = node;
}
if (node->id == id2) {
node2 = node;
}
if (node1 != nullptr && node2 != nullptr) {
break;
}
}
if (node1 != nullptr && node2 != nullptr) {
node1->neighbors.push_back(node2);
node2->neighbors.push_back(node1);
}
}
void Graph::removeNode(int id) {
Node* nodeToRemove = nullptr;
for (Node* node : nodes) {
if (node->id == id) {
nodeToRemove = node;
break;
}
}
if (nodeToRemove != nullptr) {
nodes.erase(std::remove(nodes.begin(), nodes.end(), nodeToRemove), nodes.end());
for (Node* node : nodes) {
node->neighbors.erase(std::remove(node->neighbors.begin(), node->neighbors.end(), nodeToRemove), node->neighbors.end());
}
delete nodeToRemove;
}
}
void Graph::removeEdge(int id1, int id2) {
Node* node1 = nullptr;
Node* node2 = nullptr;
for (Node* node : nodes) {
if (node->id == id1) {
node1 = node;
}
if (node->id == id2) {
node2 = node;
}
if (node1 != nullptr && node2 != nullptr) {
break;
}
}
if (node1 != nullptr && node2 != nullptr) {
node1->neighbors.erase(std::remove(node1->neighbors.begin(), node1->neighbors.end(), node2), node1->neighbors.end());
node2->neighbors.erase(std::remove(node2->neighbors.begin(), node2->neighbors.end(), node1), node2->neighbors.end());
}
}
```
这样,我们就可以使用这个头文件来构建和操作无向图了。