第七章 图论

第七章 图论

一、数据结构定义

  1. 图的邻接矩阵存储法
    #define MaxVertexNum 100 // 节点数目的最大值
    
    // 无边权,只用0或1表示边是否存在
    bool graph[MaxVertexNum][MaxVertexNum];
    
    // 有边权
    int graph[MaxVertexNum][MaxVertexNum];
    
  2. 图的邻接表存储法
    把所有节点存储为节点数组,每个节点里有自己的数据和一个边指针,这个边指针相当于一个链表的头指针,这个链表里存放所有与这个节点相连的边,边里存放该边指向的节点编号和下一条边指针
    请添加图片描述
    #define MaxVertexNum 100 // 节点数目的最大值
    typedef struct EdgeNode{ // 边表节点
    	int adjvex; // 该边所指向的节点编号
    	struct EdgeNode *next; // 指向下一条边的指针
    	// Infotype info; // 边权值(如果有)
    }EdgeNode;
    
    typedef struct VNode{ //节点表节点
    	VertexType data; // 节点信息
    	EdgeNode *first; // 指向第一条依附该节点的边的指针
    }VNode;
    
    typedef struct{
    	int verNum, edgeNum; // 节点数和边数
    	VNode AdjList[MaxVertexNum]; // 节点数组
    } ALGraph; // 邻接表
    
  3. 图的十字链表存储法(有向图)
    请添加图片描述
    typedef struct edgeNode{
    	int headVer, tailVer; 
    	struct edgeNode *hLink, *tLink; // 分别指向弧头和弧尾相同的下一条边
    	infoType info;
    } edgeNode;
    
    typedef struct VNode{
    	VerType data;
    	edgeNode *firstIn, *firstOut; // 分别指向入边表和出边表中的第一个边节点
    } VNode;
    
    typedef struct{
    	int verNum, edgeNum;
    	VNode XList[verNum]; // 顶点表
    } OLGraph;
    
  4. 图的邻接多重表存储法(无向图)
    请添加图片描述
    typedef struct edgeNode{
    	int iVer, jVer; // 边的两个顶点在顶点表(数组)里的下标
    	struct edgeNode *iLink, *jLink; // 和顶点相连的下一条边
    	infoType info; // 带权图可存储边的权值
    } edgeNode;
    
    typedef struct VNode{
    	VerType data;
    	edgeNode *firstEdge;
    } VNode;
    
    typedef struct{
    	int verNum, edgeNum; // 图的顶点数和边数
    	VNode adjMuList[verNum];
    } AMLGraph; 
    

二、代码/算法

  1. 遍历/搜索
    • DFS实现
    • BFS实现
  2. 最小生成树
    • Prim算法(ACE:不要求记忆)
    • Kruskal算法(ACE:不要求掌握,理解并查集在Kruskal中的作用即可)
  3. 最短路径
    • Dijkstra算法
    • Floyd算法
  4. 拓扑排序算法(ACE:常考选择题)
  5. 关键路径算法 (ACE:常考选择题)
  6. 并查集

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/56485.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单 em

 Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个&…

UNITY随记(八) SHADER实现立方体CUBE显示边框,描边

Shader "Vitens/CubeOutline"{Properties{_Color("Color", color) (1,1,1,1)_Width("Width", range(0,0.5)) 0.1}SubShader{Tags { "Queue""Transparent" }Pass {//如果要显示背面的线框,取消下面两个注释即可…

【etcd】docker 启动单点 etcd

etcd: v3.5.9 etcd-browser: rustyx/etcdv3-browser:latest 本文档主要描述用 docker 部署单点的 etcd, 用 etcd-browser 来查看注册到 etcd 的 key 默认配置启动 docker run -d --name ai-etcd --networkhost --restart always \-v $PWD/etcd.conf.yml:/opt/bitn…

Redis系列二:Clion+MAC+Redis环境搭建

1. ClionMACRedis-3.0-annotated环境搭建 参考: https://github.com/huangz1990/redis-3.0-annotated https://gitee.com/dumpcao/redis-3.0-annotated-cmake-in-clion https://tool.4xseo.com/a/12910.html 1.1 下载并导入Clion git clone https://gitee.com/dum…

LabVIEW开发多材料摩擦电测量控制系统

LabVIEW开发多材料摩擦电测量控制系统 摩擦电效应是两个物体摩擦在一起,电荷从一个物体转移到另一个物体的现象,从而导致两个物体携带相等和相反的电荷。接触和充电是主导该过程的两个关键因素。当静电荷累积到一定水平时,可能会出现放电现象…

Netty自定义消息协议的实现逻辑处理粘包拆包、心跳机制

Netty 自定义消息协议的实现逻辑自定义编码器 心跳机制实现客户端发送心跳包 自定义消息协议的实现逻辑 消息协议:这一次消息需要包含两个部分,即消息长度和消息内容本身。 自定义消息编码器︰消息编码器将客户端发送的消息转换成遵守消息协议的消息&…

关于latch up的重读

衬底电流容易导致寄生三极管导通(衬底电阻衬底电流》衬底压差),更容易触发latchup; 一般常用的实际产品中会用衬底隔离的器件来做负压器件;用DNW&NBL组成一个隔离盆将整个负压区和正常电路分开,DNW&NBL接高电压&#xff1…

抄写Linux源码(Day7:读闪客文章第二回 “自己给自己挪个地儿”)

闪客文章地址:https://mp.weixin.qq.com/s?__bizMzk0MjE3NDE0Ng&mid2247499274&idx1&sn23885b5b1344a1425f5a971d06ad2e7d&chksmc2c584a7f5b20db1b0a75ea896e7218a9f8bcd006e68f53693bab240b13f9e2fb0ec0c9b9a6a&cur_album_id2123743679373688…

iMX6ULL驱动开发 | 让imx6ull开发板支持usb接口FC游戏手柄

手边有一闲置的linux开发板iMX6ULL一直在吃灰,不用来搞点事情,总觉得对不住它。业余打发时间就玩起来吧,总比刷某音强。从某多多上8块儿大洋买来一个usb接口的游戏手柄,让开发板支持以下它,后续就可以接着在上面玩童年…

BUU [网鼎杯 2020 朱雀组]phpweb

BUU [网鼎杯 2020 朱雀组]phpweb 众生皆懒狗。打开题目,只有一个报错,不知何从下手。 翻译一下报错,data()函数:,还是没有头绪,中国有句古话说的好“遇事不决抓个包” 抓个包果然有东西,仔细一看这不就分别是函数和参…

软件外包开发的JAVA开发框架

Java的开发框架有很多,以下是一些常见的Java开发框架及其特点,每个框架都有其特定的使用场景和优势,开发者可以根据项目的需求选择合适的框架。今天和大家介绍常见的框架及特点,希望对大家有所帮助。北京木奇移动技术有限公司&…

【Golang 接口自动化01】使用标准库net/http发送Get请求

目录 发送Get请求 响应信息 拓展 资料获取方法 发送Get请求 使用Golang发送get请求很容易,我们还是使用http://httpbin.org作为服务端来进行演示。 package mainimport ("bytes""fmt""log""net/http""net/url&qu…

echarts图表基本使用

折线图 import * as echarts from echarts;const chartDom document.getElementById(main); const myChart echarts.init(chartDom); const option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [820, 932, …

【HarmonyOS】键盘遮挡输入框时,实现输入框显示在键盘上方

【关键字】 harmonyOS、键盘遮挡input,键盘高度监听 【写在前面】 在使用API6、API7开发HarmonyOS应用时,常出现页面中需要输入input,但是若input位置在页面下方,在input获取焦点的时候,会出现软键盘挡住input情况&a…

【JAVA】String ,StringBuffer 和 StringBuilder 三者有何联系?

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言StringBufferStringBuffer方法 StringBuilderStringBuilder方法 String ,StringBuffer 和 StringBuilder的区别String和StringBuffer互相转换 前言 在之前的文章…

解密Redis:应对面试中的缓存相关问题

文章目录 1. 缓存穿透问题及解决方案2. 缓存击穿问题及解决方案3. 缓存雪崩问题及解决方案4. Redis的数据持久化5. Redis的过期删除策略和数据淘汰策略6. Redis分布式锁和主从同步7. Redis集群方案8. Redis的数据一致性保障和高可用性方案 导语: 在面试过程中&#…

mysql 锁

1. 概述 锁 是计算机协调多个进程或线程 并发访问某一资源 的机制。在程序开发中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是针对一些敏感数据(比如订单,金额等),我们就需要保证这个数…

【redis】创建集群

这里介绍的是创建redis集群的方式,一种是通过create-cluster配置文件创建部署在一个物理机上的伪集群,一种是先在不同物理机启动单体redis,然后通过命令行使这些redis加入集群的方式。 一,通过配置文件创建伪集群 进入redis源码…

R语言【Tidyverse、Tidymodel】的机器学习方法

机器学习已经成为继理论、实验和数值计算之后的科研“第四范式”,是发现新规律,总结和分析实验结果的利器。机器学习涉及的理论和方法繁多,编程相当复杂,一直是阻碍机器学习大范围应用的主要困难之一,由此诞生了Python…

牛客网Verilog刷题——VL55

牛客网Verilog刷题——VL55 题目答案 题目 请用Verilog实现4位约翰逊计数器(扭环形计数器),计数器的循环状态如下:   电路的接口如下图所示: 输入输出描述: 信号类型输入/输出位宽描述clkwireInput1系统…