图的基本操作实现(数据结构实验)
时间: 2023-06-30 08:18:23 浏览: 59
图的基本操作包括创建图、添加节点、添加边、遍历图(深度优先遍历、广度优先遍历)等。以下是一个基于邻接表实现的图的基本操作示例代码(使用C++语言实现):
```cpp
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
// 图的节点结构体
struct Node {
int val; // 节点值
vector<int> neighbors; // 邻接表,存储与该节点相邻的节点
Node(int x) : val(x) {}
};
// 图的类
class Graph {
public:
// 添加节点
void addNode(int val) {
nodes.emplace_back(val);
}
// 添加边
void addEdge(int node1, int node2) {
nodes[node1].neighbors.emplace_back(node2);
nodes[node2].neighbors.emplace_back(node1);
}
// 深度优先遍历
void DFS(int start) {
vector<bool> visited(nodes.size(), false); // 记录节点是否已访问
DFS_helper(start, visited);
}
// 广度优先遍历
void BFS(int start) {
vector<bool> visited(nodes.size(), false); // 记录节点是否已访问
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty()) {
int cur = q.front();
q.pop();
cout << cur << " ";
for (int neighbor : nodes[cur].neighbors) {
if (!visited[neighbor]) {
q.push(neighbor);
visited[neighbor] = true;
}
}
}
cout << endl;
}
private:
vector<Node> nodes; // 存储所有节点
// 深度优先遍历的递归函数
void DFS_helper(int cur, vector<bool>& visited) {
cout << cur << " ";
visited[cur] = true;
for (int neighbor : nodes[cur].neighbors) {
if (!visited[neighbor]) {
DFS_helper(neighbor, visited);
}
}
}
};
// 测试
int main() {
Graph g;
g.addNode(0);
g.addNode(1);
g.addNode(2);
g.addNode(3);
g.addNode(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 3);
g.addEdge(2, 4);
cout << "DFS: ";
g.DFS(0);
cout << "BFS: ";
g.BFS(0);
return 0;
}
```
在上述代码中,我们定义了一个`Node`结构体表示图的节点,其中`val`表示节点的值,`neighbors`是一个向量,存储与该节点相邻的节点。同时,我们定义了一个`Graph`类来表示图,其中`nodes`是一个向量,存储所有节点。我们实现了添加节点的`addNode`函数和添加边的`addEdge`函数。我们还实现了深度优先遍历的`DFS`函数和广度优先遍历的`BFS`函数。在`DFS`和`BFS`函数中,我们使用了一个`visited`向量来记录节点是否已访问过,避免重复访问。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)