使用c++创建一个无向图(采用邻接矩阵或者邻接表方式存储); 分别输出从结点0开始的一个深度优先遍历序列和一个广度优先遍历序列。
时间: 2025-01-27 18:12:36 浏览: 68
在C++中,可以使用邻接矩阵或邻接表来表示无向图。下面是一个示例代码,展示了如何使用邻接表来表示无向图,并分别输出从结点0开始的深度优先遍历(DFS)和广度优先遍历(BFS)序列。
```cpp
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
// 使用邻接表表示无向图
class Graph {
private:
int numVertices;
vector<vector<int>> adjList;
public:
Graph(int vertices) {
numVertices = vertices;
adjList.resize(numVertices);
}
// 添加边
void addEdge(int src, int dest) {
adjList[src].push_back(dest);
adjList[dest].push_back(src); // 无向图需要双向添加
}
// 深度优先遍历
void DFSUtil(int v, vector<bool>& visited) {
visited[v] = true;
cout << v << " ";
for (int i : adjList[v]) {
if (!visited[i]) {
DFSUtil(i, visited);
}
}
}
void DFS(int startVertex) {
vector<bool> visited(numVertices, false);
DFSUtil(startVertex, visited);
cout << endl;
}
// 广度优先遍历
void BFS(int startVertex) {
vector<bool> visited(numVertices, false);
queue<int> q;
visited[startVertex] = true;
q.push(startVertex);
while (!q.empty()) {
int currentVertex = q.front();
cout << currentVertex << " ";
q.pop();
for (int i : adjList[currentVertex]) {
if (!visited[i]) {
visited[i] = true;
q.push(i);
}
}
}
cout << endl;
}
};
int main() {
int vertices = 5; // 假设有5个结点
Graph g(vertices);
// 添加边
g.addEdge(0, 1);
g.addEdge(0, 4);
g.addEdge(1, 2);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 3);
g.addEdge(3, 4);
cout << "深度优先遍历序列: ";
g.DFS(0);
cout << "广度优先遍历序列: ";
g.BFS(0);
return 0;
}
```
在这个示例中,我们定义了一个`Graph`类来表示无向图,并实现了`addEdge`方法来添加边。`DFSUtil`是一个辅助函数,用于递归地进行深度优先遍历。`DFS`函数初始化访问数组并调用`DFSUtil`。`BFS`函数使用队列来进行广度优先遍历。
阅读全文
相关推荐



















