在C++中,可以使用多种方法对图进行遍历,其中最常见的方法是深度优先搜索(DFS)和广度优先搜索(BFS)。以下是这两种遍历方法的示例代码:
- 深度优先搜索(DFS):
#include <iostream>
#include <vector>
using namespace std;
void DFS(vector<vector<int>>& graph, vector<bool>& visited, int start) {
visited[start] = true;
cout << start << " ";
for (int i = 0; i < graph[start].size(); i++) {
int nextNode = graph[start][i];
if (!visited[nextNode]) {
DFS(graph, visited, nextNode);
}
}
}
int main() {
int numNodes = 5;
vector<vector<int>> graph(numNodes);
// 添加边
graph[0].push_back(1);
graph[1].push_back(2);
graph[2].push_back(3);
graph[3].push_back(4);
graph[4].push_back(0);
vector<bool> visited(numNodes, false);
cout << "DFS traversal: ";
DFS(graph, visited, 0);
return 0;
}
- 广度优先搜索(BFS):
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
void BFS(vector<vector<int>>& graph, vector<bool>& visited, int start) {
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty()) {
int currentNode = q.front();
q.pop();
cout << currentNode << " ";
for (int i = 0; i < graph[currentNode].size(); i++) {
int nextNode = graph[currentNode][i];
if (!visited[nextNode]) {
q.push(nextNode);
visited[nextNode] = true;
}
}
}
}
int main() {
int numNodes = 5;
vector<vector<int>> graph(numNodes);
// 添加边
graph[0].push_back(1);
graph[0].push_back(4);
graph[1].push_back(2);
graph[2].push_back(3);
graph[3].push_back(4);
vector<bool> visited(numNodes, false);
cout << "BFS traversal: ";
BFS(graph, visited, 0);
return 0;
}
使用这两种方法之一,您可以遍历图中的所有节点,并根据需求执行特定的操作。请注意,这些示例代码仅表示了图的遍历方法,您可以根据实际需求进行修改和扩展。