图的遍历c++模板代码
时间: 2024-03-10 20:41:58 浏览: 66
C++堆栈类模板实现代码
5星 · 资源好评率100%
在C++中,图的遍历可以使用深度优先搜索(DFS)或广度优先搜索(BFS)算法来实现。下面是一个使用邻接矩阵表示图的DFS和BFS的模板代码:
```cpp
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 100; // 图的最大节点数
bool visited[MAXN]; // 记录节点是否被访问过
// 邻接矩阵表示的图
class Graph {
private:
int vertexNum; // 节点数
int edgeNum; // 边数
int adjacencyMatrix[MAXN][MAXN]; // 邻接矩阵
public:
Graph(int v, int e) {
vertexNum = v;
edgeNum = e;
for (int i = 0; i < vertexNum; i++) {
for (int j = 0; j < vertexNum; j++) {
adjacencyMatrix[i][j] = 0;
}
}
}
void addEdge(int start, int end) {
adjacencyMatrix[start][end] = 1;
adjacencyMatrix[end][start] = 1;
}
void DFS(int start) {
visited[start] = true;
cout << start << " ";
for (int i = 0; i < vertexNum; i++) {
if (adjacencyMatrix[start][i] == 1 && !visited[i]) {
DFS(i);
}
}
}
void BFS(int start) {
queue<int> q;
visited[start] = true;
q.push(start);
while (!q.empty()) {
int current = q.front();
q.pop();
cout << current << " ";
for (int i = 0; i < vertexNum; i++) {
if (adjacencyMatrix[current][i] == 1 && !visited[i]) {
visited[i] = true;
q.push(i);
}
}
}
}
};
int main() {
int vertexNum, edgeNum;
cout << "请输入节点数和边数:";
cin >> vertexNum >> edgeNum;
Graph graph(vertexNum, edgeNum);
cout << "请输入边的起点和终点:" << endl;
for (int i = 0; i < edgeNum; i++) {
int start, end;
cin >> start >> end;
graph.addEdge(start, end);
}
cout << "DFS遍历结果:";
for (int i = 0; i < vertexNum; i++) {
visited[i] = false;
}
graph.DFS(0);
cout << endl;
cout << "BFS遍历结果:";
for (int i = 0; i < vertexNum; i++) {
visited[i] = false;
}
graph.BFS(0);
cout << endl;
return 0;
}
```
这段代码实现了一个使用邻接矩阵表示图的DFS和BFS遍历。你可以根据需要修改节点数、边数以及输入边的起点和终点来测试不同的图。注意,这里假设节点的编号从0开始。
阅读全文