用c语言写 TODO: 基于邻接矩阵存储的无向网的深度优先遍历 功能:从顶点i开始,对图进行深度遍历,遍历过程中,仅需输出顶点值,不需要输出弧值。 输出使用printf("%c ", 对应顶点) 参数:MGraph G 是需要操作的图,i是开始遍历的顶点位置(默认从v0遍历), int *Visited是顶点的访问标志(0表示未被访问,1表示被访问过) 返回值:无。 提示:本题使用了递归算法,访问第一个顶点的时候,将访问标志变成1,然后输出顶点, 输出后,再到矩阵中寻找二维矩阵中有弧且没有访问过的顶点,递归遍历这个结点
时间: 2024-03-10 20:43:41 浏览: 61
以下是用C语言实现基于邻接矩阵存储的无向网的深度优先遍历的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20
#define INFINITY 65535
typedef int VertexType;
typedef int EdgeType;
typedef struct {
VertexType vexs[MAX_VERTEX_NUM];
EdgeType arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vexnum, arcnum;
} MGraph;
void DFS(MGraph G, int i, int *Visited);
int main() {
MGraph G = {
{0, 1, 2, 3, 4, 5},
{
{0, 1, INFINITY, 2, INFINITY, INFINITY},
{1, 0, 1, INFINITY, 3, INFINITY},
{INFINITY, 1, 0, INFINITY, 4, INFINITY},
{2, INFINITY, INFINITY, 0, 3, 5},
{INFINITY, 3, 4, 3, 0, 6},
{INFINITY, INFINITY, INFINITY, 5, 6, 0}
},
6, 10
};
int Visited[MAX_VERTEX_NUM] = {0};
DFS(G, 0, Visited);
printf("\n");
return 0;
}
void DFS(MGraph G, int i, int *Visited) {
int j;
Visited[i] = 1;
printf("%c ", G.vexs[i]);
for (j = 0; j < G.vexnum; j++) {
if (G.arcs[i][j] != INFINITY && !Visited[j]) {
DFS(G, j, Visited);
}
}
}
```
其中,`MGraph` 结构体表示图,包含了顶点数组 `vexs` 和邻接矩阵数组 `arcs`,以及顶点数 `vexnum` 和边数 `arcnum`。`DFS` 函数表示深度优先遍历,输入参数为图 `G`、开始遍历的顶点位置 `i` 和顶点的访问标志 `Visited`。在 `DFS` 函数中,首先将当前顶点的访问标志标记为已访问,并输出顶点值。然后在邻接矩阵中寻找从当前顶点出发有弧且未被访问过的顶点,递归遍历这些顶点。最后,通过调用 `DFS` 函数实现对整个图的深度优先遍历。
阅读全文