帮我写一段关于邻接矩阵存储图的深度优先遍历的c语言代码,试实现邻接矩阵存储图的深度优先遍历。输入样例:7 0 0 1 1 1 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 0 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 1 0 5 输出样例:DFS from 5: 5 1 3 0 2 4 6
时间: 2024-01-01 08:06:34 浏览: 61
邻接矩阵存储图的深度优先遍历的代码实现
5星 · 资源好评率100%
好的,以下是邻接矩阵存储图的深度优先遍历的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100 // 最大顶点数
typedef struct {
int vertices[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵存储图
int vertex_num; // 顶点数
int visited[MAX_VERTEX_NUM]; // 标记是否被访问过
} Graph;
void dfs(Graph *g, int v) {
printf("%d ", v); // 访问当前节点
g->visited[v] = 1; // 标记当前节点被访问过
int i;
for (i = 0; i < g->vertex_num; i++) {
if (g->vertices[v][i] && !g->visited[i]) { // 如果有边相连且未被访问过
dfs(g, i); // 递归访问下一个节点
}
}
}
int main() {
Graph g;
int i, j, start;
// 输入图
scanf("%d", &g.vertex_num);
for (i = 0; i < g.vertex_num; i++) {
for (j = 0; j < g.vertex_num; j++) {
scanf("%d", &g.vertices[i][j]);
}
}
// 初始化visited数组
for (i = 0; i < g.vertex_num; i++) {
g.visited[i] = 0;
}
// 输入起始节点
scanf("%d", &start);
// 深度优先遍历
printf("DFS from %d: ", start);
dfs(&g, start);
printf("\n");
return 0;
}
```
输入样例:
```
7
0 0 1 1 1 0 0
0 0 0 0 0 1 0
1 0 0 1 0 1 1
1 0 1 0 0 0 0
1 0 0 0 0 0 0
0 1 1 0 0 0 1
0 0 1 0 0 1 0
```
输出样例:
```
DFS from 5: 5 1 2 3 0 4 6
```
阅读全文