使用c设计一个程序,依次从有向图中的每个顶点深度优先搜索遍历操作;邻接矩阵作为存储结构。算法思想: (1) 定义图的顺序存储结构; (2) 创建有向图,采用邻接矩阵表示(调用CreateDG函数实现),具体实现如下: 输入图的顶点数和边数; 依次输入顶点的信息存入顶点表中; 初始化邻接矩阵,使每个权值初始化为0; 构造邻接矩阵;(需调用LocateVex函数获取顶点在顶点表中的下标) (3) 依次从每个顶点进行深度优先搜索,并输出访问序列(调用DFSTraverse函数实现;另需调用相关函数实现获取第一个和下一个邻接点的操作)。 注意:顶点数据仅为1个数字或1个字符。 输入说明: 第一行输入图的顶点数n和边数m; 第二行依次输入n个顶点的数据; 接下来m行的每行输入一条边的信息。 输出说明: 输出n行,每行输出从第i(0≤i<n)个顶点深度优先搜索的访问序列,序列中的连通分量用{}括起来,无空格间隔,{}为英文半角的符号。 输入样例: 4 4 1 2 3 4 1 2 1 3 3 4 4 1 输出样例: {1234} {2}{341} {3412} {4123}
时间: 2023-07-16 20:15:36 浏览: 81
下面是一份使用 C 语言实现的代码,采用邻接矩阵存储有向图,实现了从每个顶点开始的深度优先遍历,并输出访问序列。注释在代码中给出。
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_VERTEX_NUM 100 // 最大顶点数
/* 图的顶点类型 */
typedef char VertexType;
/* 邻接矩阵存储结构 */
typedef struct {
VertexType vexs[MAX_VERTEX_NUM]; // 存放顶点信息
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存放边的权值
int vexnum, arcnum; // 图的当前顶点数和边数
} MGraph;
/* 定位顶点在顶点表中的位置 */
int LocateVex(MGraph *G, VertexType v) {
int i;
for (i = 0; i < G->vexnum; i++) {
if (G->vexs[i] == v) {
return i;
}
}
return -1; // 未找到返回-1
}
/* 创建有向图 */
void CreateDG(MGraph *G) {
int i, j, k, w;
VertexType v1, v2;
printf("请输入有向图的顶点数和边数:\n");
scanf("%d%d", &(G->vexnum), &(G->arcnum));
printf("请输入有向图的顶点信息:\n");
for (i = 0; i < G->vexnum; i++) {
scanf(" %c", &(G->vexs[i]));
}
// 初始化邻接矩阵
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
G->arcs[i][j] = 0;
}
}
printf("请输入有向图的边信息,格式为:起点 终点 权值\n");
for (k = 0; k < G->arcnum; k++) {
scanf("%d%d%d", &v1, &v2, &w);
i = LocateVex(G, v1);
j = LocateVex(G, v2);
G->arcs[i][j] = w;
}
}
/* 深度优先遍历 */
void DFS(MGraph *G, int v, bool *visited) {
int i;
visited[v] = true;
printf("%c", G->vexs[v]);
for (i = 0; i < G->vexnum; i++) {
if (G->arcs[v][i] != 0 && !visited[i]) {
DFS(G, i, visited);
}
}
}
/* 从每个顶点开始的深度优先遍历 */
void DFSTraverse(MGraph *G) {
int i;
bool visited[MAX_VERTEX_NUM] = {false}; // 标记顶点是否被访问过
printf("深度优先遍历序列为:\n");
for (i = 0; i < G->vexnum; i++) {
if (!visited[i]) {
printf("{");
DFS(G, i, visited);
printf("}\n");
}
}
}
int main() {
MGraph G;
CreateDG(&G);
DFSTraverse(&G);
return 0;
}
```
阅读全文