C语言简单无向图实现


//
// Created by ZJ on 2023/11/21.
//
#include <stdio.h>

#define MAX 100

// 定义图的结构体
typedef struct {
  int n;            // 图中顶点的个数
  int am[MAX][MAX]; // 邻接矩阵
} Graph;

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

// 添加边
void add_edge(Graph *g, int x, int y) {
  g->am[x][y] = 1;
  g->am[y][x] = 1;
}

// 打印图
void print_graph(Graph *g) {
  int i, j;
  printf("Adjacency Matrix:\n");
  for (i = 0; i < g->n; i++) {
    for (j = 0; j < g->n; j++)
      printf("%d ", g->am[i][j]);
    printf("\n");
  }
}

int main() {
  Graph graph;
  init_graph(&graph, 5);  // 初始化一个包含5个顶点的图
  add_edge(&graph, 0, 1); // 添加边(0, 1)
  add_edge(&graph, 0, 4); // 添加边(0, 4)
  add_edge(&graph, 1, 2); // 添加边(1, 2)
  add_edge(&graph, 1, 3); // 添加边(1, 3)
  add_edge(&graph, 1, 4); // 添加边(1, 4)
  add_edge(&graph, 2, 3); // 添加边(2, 3)
  add_edge(&graph, 3, 4); // 添加边(3, 4)
  print_graph(&graph);    // 打印图的邻接矩阵
  return 0;
}