来遍历这个图并输出遍历结果。

#include <stdio.h>
#include <stdlib.h>

#define MAX_VERTICES 100

typedef struct {
    int n; // 顶点数
    int adj_matrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵
} Graph;

int visited[MAX_VERTICES]; // 标记是否已经被访问过

// 初始化图
void init_graph(Graph *g, int n) {
    g->n = n;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            g->adj_matrix[i][j] = 0;
        }
    }
}

// 添加边
void add_edge(Graph *g, int u, int v) {
    g->adj_matrix[u][v] = 1;
    g->adj_matrix[v][u] = 1;
}

// 深度优先遍历
void dfs(Graph *g, int v) {
    visited[v] = 1;
    printf("%d ", v);
    for (int i = 0; i < g->n; i++) {
        if (g->adj_matrix[v][i] && !visited[i]) {
            dfs(g, i);
        }
    }
}

// 广度优先遍历
void bfs(Graph *g, int v) {
    int queue[MAX_VERTICES];
    int front = 0, rear = 0;
    visited[v] = 1;
    printf("%d ", v);
    queue[rear++] = v;
    while (front < rear) {
        int u = queue[front++];
        for (int i = 0; i < g->n; i++) {
            if (g->adj_matrix[u][i] && !visited[i]) {
                visited[i] = 1;
                printf("%d ", i);
                queue[rear++] = i;
            }
        }
    }
}

int main() {
    int n, m;
    Graph g;
    printf("请输入顶点数:");
    scanf("%d", &n);
    init_graph(&g, n);
    printf("请输入边数:");
    scanf("%d", &m);
    printf("请输入每条边的两个顶点:\n");
    for (int i = 0; i < m; i++) {
        int u, v;
        scanf("%d %d", &u, &v);
        add_edge(&g, u, v);
    }
    printf("深度优先遍历结果:");
    for (int i = 0; i < n; i++) {
        visited[i] = 0;
    }
    for (int i = 0; i < n; i++) {
        if (!visited[i]) {
            dfs(&g, i);
        }
    }
    printf("\n");
    printf("广度优先遍历结果:");
    for (int i = 0; i < n; i++) {
        visited[i] = 0;
    }
    for (int i = 0; i < n; i++) {
        if (!visited[i]) {
            bfs(&g, i);
        }
    }
    printf("\n");
    return 0;
}

上面的代码中,Graph 结构体表示图,包含顶点数 n 和邻接矩阵 adj_matrixinit_graph 函数用于初始化图,add_edge 函数用于添加边。visited 数组用于标记顶点是否已经被访问过。dfs 函数和 bfs 函数分别表示深度优先遍历和广度优先遍历。主函数中通过输入顶点数和边数来创建图,然后进行深度优先遍历和广度优先遍历,并输出遍历结果

c语言通过输入使用邻接矩阵的方法 创建一个图使用深度优先遍历与广度优先遍历

原文地址: https://www.cveoy.top/t/topic/frAo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录