c++怎么在一个程序里用邻接矩阵表示深度优先遍历和广度优先遍历
时间: 2023-12-04 14:03:13 浏览: 93
以下是在一个程序里用邻接矩阵表示深度优先遍历和广度优先遍历的示例代码(注:以下代码中的图为无向图):
```c
#include <stdio.h>
#define MAX_SIZE 100
int visited[MAX_SIZE]; // 存储访问状态,0表示未访问,1表示已访问
void dfs(int matrix[][MAX_SIZE], int n, int v) {
int i;
visited[v] = 1; // 标记v点已访问
printf("%d ", v);
for (i = 0; i < n; i++) {
if (matrix[v][i] == 1 && visited[i] == 0) { // 如果v与i相连且i未被访问
dfs(matrix, n, i); // 递归访问i
}
}
}
void bfs(int matrix[][MAX_SIZE], int n, int v) {
int queue[MAX_SIZE];
int front = 0, rear = 0;
int i, curr;
visited[v] = 1; // 标记v点已访问
printf("%d ", v);
queue[rear++] = v;
while (front < rear) {
curr = queue[front++];
for (i = 0; i < n; i++) {
if (matrix[curr][i] == 1 && visited[i] == 0) { // 如果curr与i相连且i未被访问
visited[i] = 1; // 标记i点已访问
printf("%d ", i);
queue[rear++] = i;
}
}
}
}
int main() {
int n; // 图的顶点数
int matrix[MAX_SIZE][MAX_SIZE]; // 邻接矩阵
int i, j, v; // 循环变量和起始点
printf("请输入图的顶点数:");
scanf("%d", &n);
printf("请输入邻接矩阵:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &matrix[i][j]);
}
}
printf("请输入起始点:");
scanf("%d", &v);
printf("深度优先遍历结果:");
dfs(matrix, n, v);
printf("\n");
for (i = 0; i < n; i++) {
visited[i] = 0; // 初始化visited数组
}
printf("广度优先遍历结果:");
bfs(matrix, n, v);
printf("\n");
return 0;
}
```
在该程序中,我们首先输入图的顶点数和邻接矩阵,然后输入起始点。接着,我们调用dfs函数进行深度优先遍历,调用bfs函数进行广度优先遍历。其中,visited数组用于标记每个顶点的访问状态。在dfs函数中,我们首先标记起始点已访问,然后遍历其相邻的未访问的顶点,并递归访问它们。在bfs函数中,我们首先标记起始点已访问,然后将其加入队列,然后从队列中取出一个顶点,并遍历其相邻的未访问的顶点,并将它们加入队列。重复这个过程,直到队列为空。最后输出遍历结果。
阅读全文