C语言图的邻接矩阵和邻接表递归的广度遍历完整代码
时间: 2024-10-01 17:09:27 浏览: 45
在C语言中,图形数据结构通常有两种表示方法:邻接矩阵和邻接表。这里分别给出这两种情况下的广度优先搜索(Breadth First Search, BFS)的递归实现。
**邻接矩阵的BFS(假设二维数组用于存储邻接矩阵):**
```c
#include <stdio.h>
#define MAX 100
// 定义邻接矩阵
int graph[MAX][MAX];
// 递归BFS函数
void bfs(int start, int visited[]) {
// 标记起点为已访问
visited[start] = 1;
printf("%d ", start);
// 对每个相邻节点
for (int i = 0; i < MAX; i++) {
if (graph[start][i] && !visited[i]) {
// 如果未访问,递归调用bfs
bfs(i, visited);
}
}
}
int main() {
// 初始化矩阵并设置边...
// 调用bfs函数,传递起始点和访问标记数组
int start = 0;
int visited[MAX] = {0};
bfs(start, visited);
return 0;
}
```
**邻接表的BFS(假设链表表示邻接表):**
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 遍历邻居列表的辅助函数
void visit(Node* node, int visited[], int level) {
visited[node->data] = level;
printf("%d ", node->data); // 打印节点值
Node* temp = node->next;
while (temp != NULL) {
if (!visited[temp->data]) {
visit(temp, visited, level + 1);
}
temp = temp->next;
}
}
// 主函数
void bfs(Node* start) {
int visited[100] = {0};
visit(start, visited, 0);
}
int main() {
// 创建邻接表...
Node* root = createAdjList(); // 假设createAdjList()是创建邻接表的函数
bfs(root);
return 0;
}
```
阅读全文