⑴ 建立无向图的邻接矩阵存储; ⑵ 对建立的无向图,进行深度优先遍历; 3. 实现提示 定义邻接矩阵存储的无向图结构体MGraph,在其基础上实现题目要求的图建立、深度优先遍历等基本操作。
时间: 2024-02-25 14:52:13 浏览: 75
下面是基于邻接矩阵存储的无向图结构体MGraph的定义和相应的操作实现:
```
#define MAX_VERTEX_NUM 100
typedef char DataType;
typedef struct {
DataType vertex[MAX_VERTEX_NUM]; // 顶点信息
int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vertexNum, edgeNum; // 顶点数和边数
} MGraph;
int visited[MAX_VERTEX_NUM]; // 全局数组visited[],初始化为0
// 创建无向图的邻接矩阵存储
void CreatGraph(MGraph *G, DataType a[], int n, int e) {
int i, j, k;
G->vertexNum = n;
G->edgeNum = e;
for (i = 0; i < G->vertexNum; i++) // 存储顶点信息
G->vertex[i] = a[i];
for (i = 0; i < G->vertexNum; i++) // 初始化邻接矩阵
for (j = 0; j < G->vertexNum; j++)
G->edge[i][j] = 0;
for (k = 0; k < G->edgeNum; k++) // 依次输入每一条边
{
scanf("%d%d", &i, &j); // 输入边依附的顶点编号
G->edge[i][j] = 1;
G->edge[j][i] = 1; // 置有边标志
}
}
// 深度优先遍历
void DFraverse(MGraph *G, int v) {
printf("%c ", G->vertex[v]);
visited[v] = 1;
for (int j = 0; j < G->vertexNum; j++)
if (G->edge[v][j] == 1 && visited[j] == 0)
DFraverse(G, j);
}
int main() {
MGraph G;
DataType vertex[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
int n = 8, e = 9;
CreatGraph(&G, vertex, n, e);
printf("深度优先遍历序列:");
for (int i = 0; i < G.vertexNum; i++)
visited[i] = 0;
for (int i = 0; i < G.vertexNum; i++)
if (visited[i] == 0)
DFraverse(&G, i);
printf("\n");
return 0;
}
```
在实现中,我们先定义了一个结构体MGraph来存储无向图的邻接矩阵。然后通过CreatGraph()函数来创建无向图,该函数接受一个MGraph结构体指针,一个顶点信息数组,顶点数和边数,然后按照输入的边的信息,初始化邻接矩阵。在实现深度优先遍历的DFraverse()函数中,我们使用了递归的方式遍历所有未被访问的节点,并使用visited[]数组来标记已经访问的节点,以避免重复访问。最后,在main()函数中,我们创建了一个无向图,并通过DFraverse()函数来进行深度优先遍历,输出遍历序列。
阅读全文