图基本操作实验的C++代码
时间: 2023-09-24 08:09:24 浏览: 42
以下是一个简单的图基本操作实验的C++代码,包括图的创建、添加节点和边、深度优先遍历和广度优先遍历:
```C++
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
class Graph {
private:
vector<vector<int>> adj_list;
int num_nodes;
public:
Graph(int n) {
num_nodes = n;
adj_list.resize(num_nodes);
}
void add_edge(int u, int v) {
adj_list[u].push_back(v);
adj_list[v].push_back(u);
}
void add_node() {
num_nodes++;
adj_list.resize(num_nodes);
}
void dfs(int start_node) {
vector<bool> visited(num_nodes, false);
stack<int> stack;
stack.push(start_node);
while (!stack.empty()) {
int node = stack.top();
stack.pop();
if (!visited[node]) {
visited[node] = true;
cout << node << " ";
for (int adj_node : adj_list[node]) {
stack.push(adj_node);
}
}
}
cout << endl;
}
void bfs(int start_node) {
vector<bool> visited(num_nodes, false);
queue<int> queue;
queue.push(start_node);
while (!queue.empty()) {
int node = queue.front();
queue.pop();
if (!visited[node]) {
visited[node] = true;
cout << node << " ";
for (int adj_node : adj_list[node]) {
queue.push(adj_node);
}
}
}
cout << endl;
}
};
int main() {
Graph graph(5);
graph.add_edge(0, 1);
graph.add_edge(0, 2);
graph.add_edge(1, 3);
graph.add_edge(2, 3);
graph.add_edge(3, 4);
graph.dfs(0);
graph.bfs(0);
return 0;
}
```
在这个代码示例中,我们定义了一个名为`Graph`的类,它有三个主要方法:`add_edge()`用于添加边,`add_node()`用于添加节点,`dfs()`和`bfs()`分别用于深度优先遍历和广度优先遍历。
在`main()`函数中,我们创建了一个具有5个节点的图,并添加了几条边。然后我们调用`dfs()`和`bfs()`方法来遍历整个图,并打印出遍历的结果。
希望这个简单的示例可以帮助你理解如何使用C++实现图的基本操作。