图的邻接矩阵深度优先遍历
时间: 2025-06-10 12:40:59 浏览: 11
### 使用邻接矩阵实现图的深度优先遍历算法
深度优先遍历(DFS)是一种用于遍历或搜索树或图的算法。在邻接矩阵表示法中,可以使用栈来实现深度优先遍历。以下是基于邻接矩阵的深度优先遍历的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
void dfs(int matrix[][MAX], int start, int n, int visited[]) {
int stack[MAX];
int top = -1;
int i;
// 将起始节点压入栈中
stack[++top] = start;
visited[start] = 1;
while (top != -1) {
int node = stack[top--];
printf("%d ", node);
// 遍历当前节点的所有邻居
for (i = 0; i < n; i++) {
if (matrix[node][i] == 1 && !visited[i]) {
stack[++top] = i;
visited[i] = 1;
}
}
}
}
int main() {
int matrix[MAX][MAX];
int n, e, i, j, x, y;
printf("请输入顶点数和边数:\n");
scanf("%d %d", &n, &e);
// 初始化邻接矩阵
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
matrix[i][j] = 0;
}
}
printf("请输入边的信息(两个顶点):\n");
for (i = 0; i < e; i++) {
scanf("%d %d", &x, &y);
matrix[x][y] = 1;
matrix[y][x] = 1; // 如果是无向图
}
int visited[n];
for (i = 0; i < n; i++) {
visited[i] = 0;
}
printf("从顶点0开始的深度优先遍历结果为:\n");
dfs(matrix, 0, n, visited);
return 0;
}
```
上述代码实现了基于邻接矩阵的深度优先遍历算法。它使用栈来存储待访问的节点,并通过标记数组 `visited` 来避免重复访问同一节点[^1]。
#### 算法复杂度分析
- 时间复杂度:由于需要检查每个顶点和每条边,因此时间复杂度为 \(O(n^2)\),其中 \(n\) 是顶点数。
- 空间复杂度:主要由栈的空间占用决定,最坏情况下为 \(O(n)\)。
### 注意事项
- 在输入时,请确保顶点编号从 0 开始。
- 如果图是稀疏图,建议使用邻接表代替邻接矩阵以提高效率[^3]。
阅读全文
相关推荐


















