用c语言实现:1、深度优先搜索数据结构定义 2、生成图的邻接矩阵 3、深度优先搜索。
时间: 2023-11-28 15:06:22 浏览: 119
数据结构图
以下是用 C 语言实现深度优先搜索的代码,包括数据结构定义和生成图的邻接矩阵。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
// 定义顶点的结构体
typedef struct {
int data;
} VertexType;
// 定义边的结构体
typedef struct {
int i, j; // 边的两个顶点下标
} EdgeType;
// 定义邻接矩阵
typedef struct {
int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int n, e; // n 为顶点数,e 为边数
VertexType vertex[MAX_VERTEX_NUM]; // 顶点数组
} MGraph;
// 初始化邻接矩阵
void CreateMGraph(MGraph *G) {
int i, j, k, w;
printf("请输入顶点数和边数:\n");
scanf("%d %d", &G->n, &G->e);
printf("请输入顶点信息:\n");
for (i = 0; i < G->n; i++) {
scanf("%d", &G->vertex[i].data);
}
for (i = 0; i < G->n; i++) {
for (j = 0; j < G->n; j++) {
G->edges[i][j] = 0;
}
}
printf("请输入边信息:\n");
for (k = 0; k < G->e; k++) {
printf("请输入第 %d 条边的下标 i, j 和权重 w:", k+1);
scanf("%d %d %d", &i, &j, &w);
G->edges[i][j] = w;
G->edges[j][i] = w;
}
}
// 深度优先搜索
void DFS(MGraph *G, int v, int *visited) {
int i;
visited[v] = 1;
printf("%d ", G->vertex[v].data);
for (i = 0; i < G->n; i++) {
if (G->edges[v][i] && !visited[i]) {
DFS(G, i, visited);
}
}
}
int main() {
MGraph G;
int visited[MAX_VERTEX_NUM] = {0};
CreateMGraph(&G);
printf("深度优先搜索结果为:\n");
DFS(&G, 0, visited);
printf("\n");
return 0;
}
```
在这个代码中,我们定义了一个邻接矩阵的结构体 `MGraph`,包括了顶点和边的信息。我们通过 `CreateMGraph()` 函数来生成图的邻接矩阵,通过 `DFS()` 函数来进行深度优先搜索。在 `DFS()` 函数中,我们使用一个 `visited` 数组来记录每个顶点是否被访问过。我们从第一个顶点开始进行深度优先搜索,并打印出每个顶点的数据。
阅读全文