图的邻接矩阵深度优先遍历和广度优先遍历c++
时间: 2024-11-12 09:42:08 浏览: 34
图的存储与深度优先与广度优先遍历
在C++中,使用邻接矩阵(Adjacency Matrix)进行深度优先搜索(DFS)和广度优先搜索(BFS)的步骤大致如下:
**深度优先搜索(DFS)**:
```cpp
void dfs(int start, bool visited[]) {
visited[start] = true;
cout << start << " ";
for (int i = 0; i < vertices; ++i) {
if (graph[start][i] && !visited[i]) { // 检查边的存在并访问未访问节点
dfs(i, visited);
}
}
}
// 示例用法
bool* initVisited(int n) { return new bool[n]; } // 初始化一个布尔数组记录已访问状态
dfs(0, initVisited(vertices)); // 从顶点0开始
delete[] initVisited(vertices); // 清理内存
```
**广度优先搜索(BFS)**:
```cpp
void bfs(int start) {
queue<int> q; // 使用队列存储节点
vector<bool> visited(vertices, false); // 初始化访问标记
q.push(start);
visited[start] = true;
while (!q.empty()) {
int u = q.front(); // 取出队首节点
q.pop();
cout << u << " ";
for (int v = 0; v < vertices; ++v) {
if (graph[u][v] && !visited[v]) { // 添加相邻且未访问的节点
q.push(v);
visited[v] = true;
}
}
}
}
bfs(0); // 从顶点0开始
```
在上述代码中,`vertices`代表顶点数量,`graph`是邻接矩阵。`dfs`和`bfs`函数分别实现了这两种遍历方法,`initVisited`用于初始化一个布尔数组表示节点是否已被访问。
阅读全文