详细解释深度优先和广度优先遍历用邻接矩阵存储的图的代码
时间: 2024-09-28 21:08:07 浏览: 33
C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
深度优先遍历(DFS)和广度优先遍历(BFS)都是图遍历的经典算法,对于邻接矩阵存储的图,它们的主要区别在于遍历的顺序和数据结构的利用。
**深度优先遍历(DFS)邻接矩阵代码示例(C++)**:
```cpp
#include <vector>
using namespace std;
// 邻接矩阵表示图
vector<vector<int>> adjMatrix;
// 深度优先遍历
void dfs(int start) {
vector<bool> visited(adjMatrix.size(), false); // 访问标记
visited[start] = true;
cout << "Visiting vertex " << start << endl;
for (int i = 0; i < adjMatrix.size(); i++) {
if (adjMatrix[start][i] && !visited[i]) {
dfs(i);
}
}
}
int main() {
// 初始化图和起点
// ...
cout << "Depth First Traversal:" << endl;
dfs(startVertex);
return 0;
}
```
**广度优先遍历(BFS)邻接矩阵代码示例(C++)**:
```cpp
#include <queue>
using namespace std;
// 邻接矩阵表示图
vector<vector<int>> adjMatrix;
// 广度优先遍历
void bfs(int start) {
vector<bool> visited(adjMatrix.size(), false); // 访问标记
queue<int> q;
visited[start] = true;
q.push(start);
while (!q.empty()) {
int curr = q.front();
cout << "Visiting vertex " << curr << endl;
q.pop();
for (int i = 0; i < adjMatrix.size(); i++) {
if (adjMatrix[curr][i] && !visited[i]) {
visited[i] = true;
q.push(i);
}
}
}
}
int main() {
// 初始化图和起点
// ...
cout << "Breadth First Traversal:" << endl;
bfs(startVertex);
return 0;
}
```
阅读全文