使用领接矩阵创建一个无向图(c语言)并写出其对应的深度遍历
时间: 2024-12-23 16:23:39 浏览: 2
在C语言中,可以使用二维数组或动态内存分配来表示无向图的邻接矩阵。邻接矩阵是一个大小为n×n的数组,其中n是顶点的数量,元素a[i][j]等于1表示顶点i和顶点j之间有边相连,0则表示没有连接。
以下是创建无向图和进行深度优先搜索(DFS)的基本步骤:
```c
#include <stdio.h>
#define MAX_VERTICES 10 // 图的最大顶点数
// 邻接矩阵表示
int graph[MAX_VERTICES][MAX_VERTICES];
// 用于深度优先遍历的栈
int stack[MAX_VERTICES], top = -1;
// 检查是否已访问过某个顶点
int visited[MAX_VERTICES];
void dfs(int vertex) {
visited[vertex] = 1;
printf("%d ", vertex); // 打印当前节点
// 对每个与当前节点相邻的未访问节点递归调用DFS
for (int i = 0; i < MAX_VERTICES; i++) {
if (graph[vertex][i] && !visited[i]) {
stack[top++] = i;
dfs(i);
}
}
// 回溯,从最后一个访问过的相邻节点开始移除
while (top != -1) {
printf("%d ", stack[--top]);
}
}
int main() {
int vertices, edges;
printf("请输入顶点数:");
scanf("%d", &vertices);
printf("输入边(两个顶点间一次):\n");
for (int i = 0; i < vertices * (vertices - 1) / 2; i++) {
int u, v;
scanf("%d %d", &u, &v);
graph[u][v] = graph[v][u] = 1; // 无向图,加两次边
}
printf("\n无向图的深度优先遍历结果:\n");
for (int i = 0; i < vertices; i++) {
if (!visited[i])
dfs(i); // 从任意未访问过的顶点开始
}
return 0;
}
```
阅读全文