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

图的表示法以及实现

一、图的表示

1.邻接矩阵

邻接指的是将所有元素用表相邻的连接起来,而矩阵是指用一个二维数组存储边的关系

2.邻接表

正常邻接表每个节点上记录出度链表的首地址,为了方便查找入度出现了逆邻接表,每个节点记录入度链表的首地址

3.十字链表

每个节点既要记录出度首地址,也要记录入度首地址

4.邻接多重表

当存储无向表时,会重复记录边的关系,邻接多重表就是为了解决这种情况出现的

5.边集数组

二,代码实现

1.邻接矩阵实现图

a.头文件

//
// Created by 27893 on 2025/7/20.
//#ifndef MATRIXGRAPH_H
#define MATRIXGRAPH_H#define MaxNodeNum 20//矩阵最大容量#define INF 1E5//顶点结构
typedef struct {int no;const char*show;
}MatrixVertex;
//边的结构
typedef int MatrixEdge;//邻接矩阵表示图结构
typedef struct {MatrixVertex vex[MaxNodeNum];MatrixEdge edges[MaxNodeNum][MaxNodeNum];int nodeNum;int edgeNum;int directed;
}MGraph;void initMGragh(MGraph*graph,const char*names[],int num,int directed,int edgeValue);void addMGraph(MGraph*graph,int x,int y,int w);
#endif //MATRIXGRAPH_H

b.将接口实现 

//
// Created by 27893 on 2025/7/20.
//#include "MatrixGraph.h"
#include <stdio.h>
#include <string.h>;
static int isEdge(int weight) {if (weight>0&&weight<INF) {return 1;}return 0;
}void initMGragh(MGraph *graph, const char*names[], int num, int directed, int edgeValue) {graph->nodeNum=num;graph->directed=directed;graph->edgeNum=0;memset(graph->vex,0,sizeof(graph->vex));memset(graph->edges,0,sizeof(graph->edges));for (int i=0;i<num;++i) {graph->vex[i].no=i;graph->vex[i].show=names[i];for (int j=0;j<num;j++) {graph->edges[i][j]=edgeValue;}}
}void addMGraph(MGraph*graph,int x,int y,int w) {//判断传入的x,y是否合法if (x<0||x>graph->nodeNum) {return;}if (y<0||y>graph->nodeNum) {return;}if (!isEdge(graph->edges[x][y])) {graph->edges[x][y]=w;if (graph->directed==0) {graph->edges[y][x]=w;}graph->edgeNum++;}
}

http://www.lryc.cn/news/594508.html

相关文章:

  • zabbix服务器告警处理
  • 【windows 终端美化】Windows terminal + oh-my-posh 来美化命令行终端
  • C++ 桶排序、基数排序、堆排序
  • Beamer-LaTeX学习(教程批注版)【6】
  • selenium4 web自动化测试
  • 对LLM某一层进行优化:通过眼动数据发现中间层注重语句内在含义,进而对中间层参数优化
  • 《拆解WebRTC:NAT穿透的探测逻辑与中继方案》
  • Flink高频考点:Checkpoint与Savepoint的高可用实战指南
  • 【详细笔记】两类曲线积分转换
  • PostgreSQL 字段类型速查与 Java 枚举映射
  • Shell脚本-grep工具
  • 【超分辨率专题】OSEDiff:针对Real-World ISR的单步Diffusion
  • 以“融合进化 智领未来”之名,金仓Kingbase FlySync:国产数据库技术的突破与创新
  • 基于单片机倾角测量仪/角度测量/水平仪
  • 浅谈 Vue 的双向数据绑定
  • 安全信息与事件管理(SIEM)系统架构设计
  • ABP VNext + Playwright E2E:前后端一体化自动化测试
  • MCP的inspector、了解具有上下文记忆功能的MCP——OpenMemory MCP
  • Node.js 中基于请求 ID 实现简单队列(即时阻止策略/排队等待策略)
  • Spring MVC上下文容器在Web容器中是如何启动的(源码深入剖析)?
  • 16.TaskExecutor启动
  • 基于pyside6的通用机器人遥控控制界面
  • Windows批量修改文件属性方法
  • Spring Boot 第一天知识汇总
  • 【51单片机仿真复位电阻电容参数】2022-5-17
  • IsaacLab学习记录(四)
  • Linux文件系统三要素:块划分、分区管理与inode结构解析
  • [CVPR]DVFL-Net:用于时空动作识别的轻量级蒸馏视频调焦网络
  • Python知识点2-if语句
  • FreeRTOS学习笔记之内存管理