你可以用c++写图的广度优先遍历代码吗
时间: 2023-01-15 20:38:28 浏览: 86
是的,我可以用 C 语言写出图的广度优先遍历的代码。广度优先遍历是一种用于遍历图中所有节点的算法,它按照距离起点的距离逐层地扩展节点。
在 C 语言中,可以使用队列来实现广度优先遍历。首先,将起点加入队列,然后取出队列的首个元素,将它所有未被访问过的相邻节点加入队列,并将当前节点标记为已访问。然后重复这个过程,直到队列为空为止。
以下是一个示例代码,它实现了图的广度优先遍历:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 100
#define MAX_EDGES 1000
// 图的邻接表表示
typedef struct {
int n, m; // 图中的节点数和边数
int adj[MAX_VERTICES][MAX_EDGES]; // 邻接表
int degree[MAX_VERTICES]; // 每个节点的度数
} Graph;
// 队列的结构体定义
typedef struct {
int data[MAX_VERTICES]; // 队列的元素
int head, tail; // 队列的头和尾指针
} Queue;
// 初始化队列
void init_queue(Queue *q) {
q->head = 0;
q->tail = 0;
}
// 将元素 x 加入队列
void enqueue(Queue *q, int x) {
q->data[q->tail] = x;
q->tail++;
}
// 将队列的首个元素出队
int dequeue(Queue *q