图的邻接表和邻接矩阵的深度广度优先遍历c
时间: 2025-06-21 09:27:22 浏览: 6
### C语言实现图的邻接表和邻接矩阵的深度优先遍历(DFS)和广度优先遍历(BFS)
#### 使用邻接矩阵实现DFS
在C语言中,可以使用二维数组来表示邻接矩阵。下面是一个简单的例子展示如何通过邻接矩阵来进行深度优先搜索:
```c
#include <stdio.h>
#define MAX_VERTICES 100
int visited[MAX_VERTICES]; /* 记录节点是否被访问过 */
void dfs(int graph[][MAX_VERTICES], int vertex, int vertices_num);
/* 主程序入口 */
int main() {
int adj_matrix[MAX_VERTICES][MAX_VERTICES];
// 假设已经初始化adj_matrix并设置了vertices_num...
// 调用dfs函数进行深搜
for (int i = 0; i < vertices_num; ++i) {
if (!visited[i]) dfs(adj_matrix, i, vertices_num);
}
}
// 深度优先搜索的具体逻辑
void dfs(int graph[][MAX_VERTICES], int vertex, int vertices_num){
printf("%d ",vertex); // 输出当前顶点编号
visited[vertex]=1;
for (int i=0;i<vertices_num;++i){ // 对于每一个可能相邻的结点
if(graph[vertex][i]==1 && !visited[i]){ // 如果有边相连且未访问,则继续深入探索该分支
dfs(graph,i,vertices_num);
}
}
}
```
此段代码展示了基于邻接矩阵的DFS基本框架[^1]。
#### 使用邻接列表实现BFS
对于广度优先搜索而言,在C语言里通常借助队列的数据结构配合链式存储结构即邻接表完成。以下是采用邻接表形式执行BFS的一个实例:
```c
#include <stdbool.h>
#include <stdlib.h>
typedef struct Node{
int dest;
struct Node* next;
}Node;
typedef struct Graph{
int numVertices;
list *adjLists;
}*Graph;
bool *visited;
void bfs(Graph g,int startVertex){
Queue q=createQueue();
enqueue(q,startVertex);
visited[startVertex]=true;
while(!isEmpty(q)){
int currentVertex=dequeue(q);
printf("Visited %d \n",currentVertex );
Node* temp=g->adjLists[currentVertex];
while(temp!=NULL){
int adjVertex=temp->dest;
if(!visited[adjVertex]){
enqueue(q,adjVertex);
visited[adjVertex]=true;
}
temp=temp->next;
}
}
}
```
上述实现了基于邻接表的广度优先遍历过程[^2]。
阅读全文
相关推荐


















