c语言实现图的遍历算法
时间: 2024-01-05 10:03:58 浏览: 101
C语言实现图的遍历算法有两种常见的方法:深度优先搜索(DFS)和广度优先搜索(BFS)。
1. 深度优先搜索(DFS):
深度优先搜索是一种递归的算法,它从图的某个顶点开始,沿着一条路径一直走到底,然后回溯到上一个顶点,再选择另一条路径继续走下去,直到遍历完所有的顶点。以下是C语言实现深度优先搜索的伪代码:
```c
#define MAX_VERTICES 100
int visited[MAX_VERTICES]; // 记录顶点是否被访问过
void DFS(int v, int graph[MAX_VERTICES][MAX_VERTICES], int num_vertices) {
visited[v] = 1; // 标记顶点v为已访问
// 处理顶点v
for (int i = 0; i < num_vertices; i++) {
if (graph[v][i] && !visited[i]) { // 如果顶点i与v相邻且未被访问过
DFS(i, graph, num_vertices); // 递归访问顶点i
}
}
}
```
2. 广度优先搜索(BFS):
广度优先搜索是一种非递归的算法,它从图的某个顶点开始,先访问该顶点的所有邻接顶点,然后再依次访问邻接顶点的邻接顶点,以此类推,直到遍历完所有的顶点。以下是C语言实现广度优先搜索的伪代码:
```c
#define MAX_VERTICES 100
int visited[MAX_VERTICES]; // 记录顶点是否被访问过
void BFS(int v, int graph[MAX_VERTICES][MAX_VERTICES], int num_vertices) {
int queue[MAX_VERTICES];
int front = 0, rear = 0;
visited[v] = 1; // 标记顶点v为已访问
queue[rear++] = v; // 将顶点v入队
while (front < rear) {
int current = queue[front++]; // 出队一个顶点
// 处理顶点current
for (int i = 0; i < num_vertices; i++) {
if (graph[current][i] && !visited[i]) { // 如果顶点i与current相邻且未被访问过
visited[i] = 1; // 标记顶点i为已访问
queue[rear++] = i; // 将顶点i入队
}
}
}
}
```
阅读全文