在计算机科学中,图是一种非常重要的数据结构,广泛应用于社交网络、路径规划、编译器设计等领域。而C语言图的遍历是理解和使用图结构的基础。本文将带你从零开始,深入浅出地学习两种核心的图遍历算法:深度优先搜索(DFS)和广度优先搜索(BFS)。
图由顶点(Vertex)和边(Edge)组成。顶点代表对象,边代表对象之间的关系。图可以是有向的(箭头表示方向)或无向的(双向连接)。
在C语言中,图通常用两种方式表示:
为简化教学,本文使用邻接矩阵来实现遍历算法。
深度优先搜索(Depth-First Search, DFS)就像走迷宫:一条路走到黑,走不通就回退。它使用递归或栈来实现。
#include <stdio.h>#define MAX_VERTICES 100int graph[MAX_VERTICES][MAX_VERTICES];int visited[MAX_VERTICES];int n; // 顶点数量void dfs(int vertex) { visited[vertex] = 1; printf("%d ", vertex); for (int i = 0; i < n; i++) { if (graph[vertex][i] == 1 && !visited[i]) { dfs(i); } }}int main() { // 示例:构建一个简单图 n = 5; // 初始化邻接矩阵 for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) graph[i][j] = 0; // 添加边 graph[0][1] = graph[1][0] = 1; graph[0][2] = graph[2][0] = 1; graph[1][3] = graph[3][1] = 1; graph[2][4] = graph[4][2] = 1; // 初始化 visited 数组 for (int i = 0; i < n; i++) visited[i] = 0; printf("DFS 遍历结果: "); dfs(0); // 从顶点 0 开始 printf("\n"); return 0;} 广度优先搜索(Breadth-First Search, BFS)像水波一样层层扩散。它使用队列来实现,先访问离起点最近的所有节点。
#include <stdio.h>#define MAX_VERTICES 100int graph[MAX_VERTICES][MAX_VERTICES];int visited[MAX_VERTICES];int queue[MAX_VERTICES];int front = 0, rear = 0;int n;void enqueue(int x) { queue[rear++] = x;}int dequeue() { return queue[front++];}int isEmpty() { return front == rear;}void bfs(int start) { visited[start] = 1; enqueue(start); while (!isEmpty()) { int current = dequeue(); printf("%d ", current); for (int i = 0; i < n; i++) { if (graph[current][i] == 1 && !visited[i]) { visited[i] = 1; enqueue(i); } } }}int main() { n = 5; // 初始化邻接矩阵(同上) for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) graph[i][j] = 0; graph[0][1] = graph[1][0] = 1; graph[0][2] = graph[2][0] = 1; graph[1][3] = graph[3][1] = 1; graph[2][4] = graph[4][2] = 1; for (int i = 0; i < n; i++) visited[i] = 0; printf("BFS 遍历结果: "); bfs(0); printf("\n"); return 0;} | 特性 | DFS | BFS |
|---|---|---|
| 数据结构 | 栈(递归) | 队列 |
| 应用场景 | 拓扑排序、连通性检测 | 最短路径(无权图)、层级遍历 |
通过本教程,你已经掌握了C语言图的遍历两大核心算法:深度优先搜索和广度优先搜索。无论你是准备面试还是学习图算法教程,这两种方法都是必须掌握的基础技能。建议你动手敲一遍代码,加深理解!
记住:编程不是看会的,而是练会的。加油!
本文由主机测评网于2025-12-08发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124923.html