基于邻接矩阵深度优先遍历头歌
时间: 2025-05-22 11:47:00 浏览: 18
### 基于邻接矩阵实现深度优先遍历的算法
深度优先遍历(Depth First Search, DFS)是一种用于图结构的遍历方法。它通过递归或者栈的方式,从某个起始顶点开始,沿着一条路径尽可能深入地探索,直到无法继续前进时回溯到最近的一个未完全访问过的顶点[^1]。
以下是基于邻接矩阵实现深度优先遍历的具体描述:
#### 算法思路
1. 使用一个布尔数组 `visited` 来记录哪些顶点已经被访问过。
2. 对于每一个尚未访问的顶点,调用递归函数对其进行访问并标记为已访问状态。
3. 在递归过程中,对于当前顶点的所有邻居顶点,如果没有被访问,则继续对其执行递归操作。
#### 实现代码 (C++)
下面是一个完整的 C++ 代码示例来展示如何使用邻接矩阵实现深度优先遍历:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 函数声明
void dfs(int v, vector<vector<int>> &adjMatrix, vector<bool> &visited);
int main() {
int n; // 节点数量
cout << "请输入节点的数量: ";
cin >> n;
// 初始化邻接矩阵
vector<vector<int>> adjMatrix(n, vector<int>(n));
cout << "请输入邻接矩阵 (" << n << "x" << n << "):" << endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin >> adjMatrix[i][j];
}
}
// 记录访问情况
vector<bool> visited(n, false);
// 执行DFS
cout << "深度优先遍历的结果:" << endl;
for (int i = 0; i < n; ++i) {
if (!visited[i]) { // 如果该节点还未被访问
dfs(i, adjMatrix, visited); // 开始新的连通分量的DFS
}
}
return 0;
}
// 深度优先搜索函数
void dfs(int v, vector<vector<int>> &adjMatrix, vector<bool> &visited) {
visited[v] = true; // 标记当前节点为已访问
cout << v << " "; // 输出当前节点编号
// 遍历所有可能的相邻节点
for (int u = 0; u < adjMatrix.size(); ++u) {
if (adjMatrix[v][u] && !visited[u]) { // 若存在边且目标节点未被访问
dfs(u, adjMatrix, visited); // 继续递归访问下一个节点
}
}
}
```
此程序首先读取输入数据构建邻接矩阵表示的图,接着初始化访问标志向量,并最终调用辅助函数完成整个图的深度优先遍历过程[^2]。
### 注意事项
- **时间复杂度**: O(V²),其中 V 是顶点数目。这是因为即使采用稀疏图存储方式,在最坏情况下仍需检查每一对顶点之间的连接关系。
- **空间复杂度**: 主要是用来保存访问状态的空间开销以及递归调用堆栈所需内存大小。
阅读全文
相关推荐


















