C语言生成图的邻接表,并对其进行深度优先搜索和广度优先搜索
时间: 2023-06-11 11:08:17 浏览: 175
生成图的邻接表可以使用链式前向星或者邻接表数组实现。下面给出链式前向星的实现方法:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100000
struct Edge {
int to; // 该边连接的终点节点
int weight; // 权值
int next; // 下一条同起点的边在数组中的下标
} edges[MAXN];
int head[MAXN]; // head[i] 表示以 i 为起点的第一条边在 edges 数组中的下标
int cnt; // 边的数量
void addEdge(int from, int to, int weight) {
edges[cnt].to = to;
edges[cnt].weight = weight;
edges[cnt].next = head[from];
head[from] = cnt++;
}
```
接下来,我们可以使用深度优先搜索和广度优先搜索对图进行遍历。下面是深度优先搜索的实现:
```c
int visited[MAXN]; // 标记数组,用于记录节点是否被访问过
void dfs(int u) {
printf("%d ", u); // 遍历到节点 u,进行相应的操作
visited[u] = 1; // 标记节点 u 为已访问
for (int i = head[u]; i != -1; i = edges[i].next) {
int v = edges[i].to;
if (!visited[v]) { // 如果节点 v 没有被访问过
dfs(v); // 递归遍历节点 v
}
}
}
```
接下来是广度优先搜索的实现:
```c
int visited[MAXN]; // 标记数组,用于记录节点是否被访问过
int queue[MAXN]; // 队列,用于实现广度优先搜索
int front, rear; // 队列的头指针和尾指针
void bfs(int start) {
front = rear = 0; // 初始化队列
printf("%d ", start); // 遍历到节点 start,进行相应的操作
visited[start] = 1; // 标记节点 start 为已访问
queue[rear++] = start; // 将节点 start 加入队列尾部
while (front != rear) { // 队列不为空时循环
int u = queue[front++]; // 取出队列头部元素
for (int i = head[u]; i != -1; i = edges[i].next) {
int v = edges[i].to;
if (!visited[v]) { // 如果节点 v 没有被访问过
printf("%d ", v);// 遍历到节点 v,进行相应的操作
visited[v] = 1; // 标记节点 v 为已访问
queue[rear++] = v;// 将节点 v 加入队列尾部
}
}
}
}
```
最后,我们可以在主函数中调用这些函数来遍历图:
```c
int main() {
int n, m;
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; i++) {
int u, v, w;
scanf("%d %d %d", &u, &v, &w);
addEdge(u, v, w); // 添加边
addEdge(v, u, w); // 如果是无向图,还需要添加反向边
}
// 深度优先搜索
printf("DFS: ");
dfs(1);
printf("\n");
// 广度优先搜索
memset(visited, 0, sizeof(visited)); // 重置标记数组
printf("BFS: ");
bfs(1);
printf("\n");
return 0;
}
```
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)