C语言图的遍历从一个顶点
时间: 2024-04-30 22:24:38 浏览: 74
C语言中图的遍历可以使用深度优先搜索(DFS)或广度优先搜索(BFS)算法。以下是从一个顶点开始的DFS遍历的示例代码:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_VERTICES 100
bool visited[MAX_VERTICES]; // 标记顶点是否被访问
int graph[MAX_VERTICES][MAX_VERTICES]; // 存储图的邻接矩阵
int num_vertices; // 图中顶点数
void dfs(int vertex) {
visited[vertex] = true;
printf("%d ", vertex);
for (int i = 0; i < num_vertices; i++) {
if (graph[vertex][i] && !visited[i]) {
dfs(i);
}
}
}
int main() {
// 读入图的顶点数和邻接矩阵
scanf("%d", &num_vertices);
for (int i = 0; i < num_vertices; i++) {
for (int j = 0; j < num_vertices; j++) {
scanf("%d", &graph[i][j]);
}
}
// 初始化visited数组
for (int i = 0; i < num_vertices; i++) {
visited[i] = false;
}
// 从第一个顶点开始DFS遍历
dfs(0);
return 0;
}
```
在这个示例中,我们首先读入图的顶点数和邻接矩阵,然后使用DFS算法从第一个顶点开始遍历整个图。我们使用一个visited数组来标记每个顶点是否被访问过,如果一个顶点还没有被访问过,我们就从它开始继续进行DFS遍历。
你也可以使用BFS算法来进行图的遍历,以下是从一个顶点开始的BFS遍历的示例代码:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_VERTICES 100
bool visited[MAX_VERTICES]; // 标记顶点是否被访问
int graph[MAX_VERTICES][MAX_VERTICES]; // 存储图的邻接矩阵
int num_vertices; // 图中顶点数
void bfs(int vertex) {
int queue[MAX_VERTICES];
int front = 0, rear = 0;
visited[vertex] = true;
printf("%d ", vertex);
queue[rear++] = vertex;
while (front != rear) {
int curr = queue[front++];
for (int i = 0; i < num_vertices; i++) {
if (graph[curr][i] && !visited[i]) {
visited[i] = true;
printf("%d ", i);
queue[rear++] = i;
}
}
}
}
int main() {
// 读入图的顶点数和邻接矩阵
scanf("%d", &num_vertices);
for (int i = 0; i < num_vertices; i++) {
for (int j = 0; j < num_vertices; j++) {
scanf("%d", &graph[i][j]);
}
}
// 初始化visited数组
for (int i = 0; i < num_vertices; i++) {
visited[i] = false;
}
// 从第一个顶点开始BFS遍历
bfs(0);
return 0;
}
```
在这个示例中,我们使用一个队列来存储每个顶点的邻居,从而实现BFS遍历。我们从第一个顶点开始,将其加入队列并标记为已访问,然后依次访问队列中的每个顶点的邻居,并将邻居加入队列中,直到队列为空。
阅读全文