图的邻接矩阵广度遍历c++完整代码
时间: 2023-06-11 16:08:28 浏览: 117
下面是一个使用邻接矩阵进行广度优先遍历的C语言代码示例:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_N 100 // 图中最多有100个节点
int n; // 节点数
int adj[MAX_N][MAX_N]; // 邻接矩阵
bool visited[MAX_N]; // 记录节点是否被访问过
// 队列结构体及其相关操作
typedef struct {
int data[MAX_N];
int front, rear;
} Queue;
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
bool isQueueEmpty(Queue *q) {
return q->front == q->rear;
}
void enqueue(Queue *q, int x) {
q->data[q->rear++] = x;
}
int dequeue(Queue *q) {
return q->data[q->front++];
}
// 广度优先遍历函数
void bfs(int start) {
Queue q;
initQueue(&q);
visited[start] = true;
enqueue(&q, start);
while (!isQueueEmpty(&q)) {
int u = dequeue(&q);
printf("%d ", u); // 访问节点u
for (int v = 0; v < n; ++v) {
if (adj[u][v] && !visited[v]) {
visited[v] = true;
enqueue(&q, v);
}
}
}
}
int main() {
// 读入图的信息
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
scanf("%d", &adj[i][j]);
}
}
// 从节点0开始遍历
bfs(0);
return 0;
}
```
该代码通过邻接矩阵表示图,使用队列实现广度优先遍历,并记录每个节点是否被访问过。在遍历过程中,将当前节点的未访问邻居加入队列中,直到队列为空为止。
阅读全文