在C++中实现图的遍历算法通常使用深度优先搜索(DFS)和广度优先搜索(BFS)两种方法。
以下是一个使用邻接表表示图并实现DFS和BFS算法的示例代码:
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
class Graph {
private:
int V;
vector<vector<int>> adj;
public:
Graph(int vertices) {
V = vertices;
adj.resize(V);
}
void addEdge(int u, int v) {
adj[u].push_back(v);
}
void DFSUtil(int v, vector<bool>& visited) {
visited[v] = true;
cout << v << " ";
for (int u : adj[v]) {
if (!visited[u]) {
DFSUtil(u, visited);
}
}
}
void DFS(int start) {
vector<bool> visited(V, false);
DFSUtil(start, visited);
}
void BFS(int start) {
vector<bool> visited(V, false);
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty()) {
int v = q.front();
q.pop();
cout << v << " ";
for (int u : adj[v]) {
if (!visited[u]) {
visited[u] = true;
q.push(u);
}
}
}
}
};
int main() {
Graph g(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
cout << "DFS traversal starting from vertex 2: ";
g.DFS(2);
cout << endl;
cout << "BFS traversal starting from vertex 2: ";
g.BFS(2);
cout << endl;
return 0;
}
在这个示例代码中,我们首先定义了一个Graph
类来表示图,并实现了addEdge
、DFS
和BFS
方法来添加边、进行深度优先搜索和广度优先搜索。在主函数中,我们创建了一个包含4个顶点的图,添加了边,然后分别从顶点2开始进行DFS和BFS遍历。