C语言图的遍历从一个顶点
时间: 2024-05-10 20:16:58 浏览: 61
C语言中实现图的遍历的常用方法是深度优先搜索(DFS)和广度优先搜索(BFS)。以下是从一个顶点开始进行DFS遍历的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXV 100001
typedef struct {
int adjvex; // 邻接点在顶点数组中的下标
struct ArcNode *next; // 指向下一个邻接点的指针
} ArcNode; // 边表结点
typedef struct {
int data; // 顶点的数据域
ArcNode *firstarc; // 指向第一个邻接点的指针
} VNode; // 顶点表结点
VNode G[MAXV]; // 图的顶点数组
int visited[MAXV]; // 记录顶点是否被访问过的标记数组
void DFS(int v) {
visited[v] = 1; // 标记v已被访问
printf("%d ", G[v].data); // 访问v
ArcNode *p = G[v].firstarc;
while (p) {
int w = p->adjvex;
if (!visited[w]) {
DFS(w); // 递归访问未被访问的邻接点
}
p = p->next;
}
}
int main() {
int n, m, s;
scanf("%d%d%d", &n, &m, &s);
for (int i = 1; i <= n; i++) {
scanf("%d", &G[i].data);
G[i].firstarc = NULL;
}
for (int i = 1; i <= m; i++) {
int u, v;
scanf("%d%d", &u, &v);
ArcNode *p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = v;
p->next = G[u].firstarc;
G[u].firstarc = p;
}
DFS(s); // 从顶点s开始深度优先遍历
return 0;
}
```
该程序中,`VNode`结构体表示一个顶点,包含顶点的数据域和指向第一个邻接点的指针;`ArcNode`结构体表示一个边表结点,包含邻接点在顶点数组中的下标和指向下一个邻接点的指针;`G`数组是顶点数组;`visited`数组用于记录顶点是否被访问过。
程序中的`DFS`函数是递归实现的深度优先遍历函数,`v`参数表示要遍历的起始顶点。函数首先将起始顶点v标记为已访问,并输出v的数据域。然后遍历v的所有邻接点,如果邻接点没有被访问过,则递归调用`DFS`函数访问该邻接点。
程序的主函数读入图的顶点个数、边数和起始顶点,构建图的邻接表,然后调用`DFS`函数从起始顶点开始深度优先遍历整个图。
阅读全文