当前位置: 首页 > article >正文

数据结构:图的创建(通俗易懂版)

图中的信息:

  • 顶点:A, B, C, D
  • 边及权重:
    • A - B: 权重为 1
    • A - C: 权重为 2
    • B - C: 权重为 3
    • C - D: 权重为 4
    • B - D: 权重为 5

邻接矩阵:

邻接矩阵是一个 4×44 \times 44×4 的矩阵,每个位置 [i][j][i][j][i][j] 存储的是从顶点 i 到顶点 j 的边的权重(如果没有边,则填 0 或无穷大)。根据你的图,邻接矩阵如下:

   A  B  C  D
A  0  1  2  0
B  1  0  3  5
C  2  3  0  4
D  0  5  4  0

c代码实现:

#include <stdio.h>
#define MAXV 100  // 最大顶点数
#define INF 0     // 用 0 表示没有连接的边

typedef struct {
    int numVertices, numEdges;    // 图的顶点数和边数
    char VerticesList[MAXV];      // 顶点表
    int Edge[MAXV][MAXV];         // 邻接矩阵
} MGraph;

// 初始化图
void InitGraph(MGraph *G) {
    G->numVertices = 4;   // 顶点数
    G->numEdges = 5;      // 边数
    
    // 顶点名称
    G->VerticesList[0] = 'A';
    G->VerticesList[1] = 'B';
    G->VerticesList[2] = 'C';
    G->VerticesList[3] = 'D';
    
    // 初始化邻接矩阵,全部设置为0(无边)
    for (int i = 0; i < G->numVertices; i++) {
        for (int j = 0; j < G->numVertices; j++) {
            G->Edge[i][j] = INF;  // 无边
        }
    }

    // 手动插入边及其权重
    G->Edge[0][1] = 1;  // A-B
    G->Edge[1][0] = 1;  // B-A(无向图)
    
    G->Edge[0][2] = 2;  // A-C
    G->Edge[2][0] = 2;  // C-A

    G->Edge[1][2] = 3;  // B-C
    G->Edge[2][1] = 3;  // C-B

    G->Edge[2][3] = 4;  // C-D
    G->Edge[3][2] = 4;  // D-C

    G->Edge[1][3] = 5;  // B-D
    G->Edge[3][1] = 5;  // D-B
}

// 打印邻接矩阵
void PrintGraph(MGraph G) {
    printf("邻接矩阵:\n");
    for (int i = 0; i < G.numVertices; i++) {
        for (int j = 0; j < G.numVertices; j++) {
            printf("%d ", G.Edge[i][j]);
        }
        printf("\n");
    }
}

int main() {
    MGraph G;
    InitGraph(&G);    // 初始化图
    PrintGraph(G);    // 打印邻接矩阵
    return 0;
}


http://www.kler.cn/news/363261.html

相关文章:

  • MySQL启动报错:InnoDB: Unable to lock ./ibdata1 error
  • 古埃及象形文字在线字典
  • 处理txt文件,每行是一个字符串,要求将每行字符串len小于2的行去掉
  • 检索报告怎么开具
  • 网络爬虫-Python网络爬虫和C#网络爬虫
  • 基于AI识别数据的Vue.js图像框选标注
  • 1024 程序员节
  • 香叶醇酵母生产+机器学习优化酵母-文献精读66
  • namenode格式化连接8485端口失败
  • CTFHUB技能树之文件上传——双写后缀
  • C++中的精妙哈希算法:原理解析与高效实现
  • 100种算法【Python版】第3篇——动态规划
  • 解决 VSCode 调试时 Python 文件路径问题及 `FileNotFoundError` 报错 (在原本非调试情况下可运行)
  • 天锐绿盾与Ping32内网安全保护能力对比,选择最优方案
  • 教学资源的信息化管理:Spring Boot平台
  • 如何配置 Jenkins 主从架构以及结合 Gerrit 和镜像操作
  • **KAMA指标**,用于衡量股价趋势的一个技术分析指标
  • Mockito Mock DataSourceTransactionManager失败原因
  • 二、Linux 入门教程:开启大数据领域的神奇之旅
  • 【部署篇】Haproxy-01安装部署(源码方式安装)
  • 双碳”目标下民用建筑用户侧储能的管理
  • Vue3快速入门(一)环境配置与项目创建
  • 植物健康,Spring Boot来保障
  • nginx配置网站服务
  • 蓝桥杯注意事项
  • Linux中exec系列函数与fork函数