当前位置:首页 > 行业动态 > 正文

邻接矩阵用c语言怎么写

邻接矩阵是一种表示图的数据结构,它用一个二维数组来表示图中顶点之间的关系,在邻接矩阵中,如果两个顶点之间有边相连,则对应的矩阵元素为1,否则为0,下面是用C语言实现邻接矩阵的详细步骤:

1、定义数据结构

我们需要定义一个图的数据结构,在这个数据结构中,我们需要包含一个二维数组来存储邻接矩阵,以及一个整数变量来表示图中顶点的数量。

#include <stdio.h>
#define MAX_VERTICES 100
typedef struct {
    int vertices; // 顶点数量
    int matrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵
} Graph;

2、初始化邻接矩阵

接下来,我们需要编写一个函数来初始化邻接矩阵,在这个函数中,我们将遍历所有的顶点,并将与当前顶点相邻的顶点对应的矩阵元素设置为1,其他元素设置为0。

void init_matrix(Graph *graph) {
    for (int i = 0; i < graph>vertices; i++) {
        for (int j = 0; j < graph>vertices; j++) {
            if (i == j) {
                graph>matrix[i][j] = 0; // 对角线上的元素设置为0
            } else {
                graph>matrix[i][j] = 0; // 初始化为0
            }
        }
    }
}

3、添加边

为了方便后续的操作,我们可以编写一个函数来添加边,在这个函数中,我们将遍历所有的顶点,并将与当前顶点相邻的顶点对应的矩阵元素设置为1。

void add_edge(Graph *graph, int i, int j) {
    graph>matrix[i][j] = 1; // 将顶点i和顶点j之间的矩阵元素设置为1
    graph>matrix[j][i] = 1; // 将顶点j和顶点i之间的矩阵元素设置为1(无向图)
}

4、打印邻接矩阵

为了验证我们的实现是否正确,我们可以编写一个函数来打印邻接矩阵,在这个函数中,我们将遍历所有的顶点和对应的矩阵元素,并打印它们。

void print_matrix(Graph *graph) {
    for (int i = 0; i < graph>vertices; i++) {
        for (int j = 0; j < graph>vertices; j++) {
            printf("%d ", graph>matrix[i][j]);
        }
        printf("
");
    }
}

5、主函数

我们可以编写一个主函数来测试我们的实现,在这个函数中,我们将创建一个图,初始化邻接矩阵,添加边,然后打印邻接矩阵。

int main() {
    Graph graph = {3, {0}}; // 创建一个包含3个顶点的图,并初始化邻接矩阵为0
    init_matrix(&graph); // 初始化邻接矩阵
    add_edge(&graph, 0, 1); // 添加边(0, 1)、(1, 0)(无向图)
    add_edge(&graph, 1, 2); // 添加边(1, 2)、(2, 1)(无向图)
    print_matrix(&graph); // 打印邻接矩阵
    return 0;
}

通过以上步骤,我们实现了用C语言表示邻接矩阵的方法,这种方法简单易懂,易于实现,可以方便地表示无向图和有向图,需要注意的是,当图中的顶点数量较大时,邻接矩阵可能会占用较多的内存空间,在这种情况下,可以考虑使用其他数据结构来表示图,如邻接表等。

0