用C语言创建图并且实现深度优先遍历和广度优先遍历
时间: 2024-12-16 10:15:21 浏览: 6
erchashu.rar_dfs
在C语言中,创建图通常需要自定义数据结构来表示节点和边,例如我们可以用邻接矩阵或邻接表。这里简单解释一下如何实现深度优先搜索(DFS)和广度优先搜索(BFS):
**1. 图的表示:**
- **邻接矩阵**: 通过二维数组存储图中各个顶点之间的连接,值非零表示有边相连。
- **邻接表**: 使用链表存储每个顶点的所有邻居。
**2. 深度优先遍历(DFS):**
```c
void dfs(int start, int graph[], int visited[]) {
visited[start] = 1; // 标记当前节点已访问
printf("%d ", start); // 输出节点
for (int i = 0; i < num_vertices; i++) {
if (graph[start][i] && !visited[i]) { // 如果边存在且未访问
dfs(i, graph, visited);
}
}
}
```
在这个函数里,我们从起始节点开始,标记并访问它,然后递归地对它的相邻节点进行同样的操作。
**3. 广度优先遍历(BFS):**
```c
// 使用队列实现BFS
void bfs(int graph[], int num_vertices) {
int visited[num_vertices] = {0};
queue<int> q;
q.push(start);
visited[start] = 1;
while (!q.empty()) {
int current = q.front();
q.pop();
printf("%d ", current);
for (int i = 0; i < num_vertices; i++) {
if (graph[current][i] && !visited[i]) {
visited[i] = 1;
q.push(i);
}
}
}
}
```
BFS使用队列保存待访问的节点,每次从未访问过的邻居中取出一个节点,直到队列为空。
**
阅读全文