数据结构算法-图技术点(图的算法实现)

news2024/10/5 18:33:35

先看 定义邻接表

//边
struct Edge {

    int AdjVertex;//邻接顶点
    int Weight;//权值

    Edge* next;//下一条边
};

using  VertexValue = use define

//顶点
struct Vertex {

   VertexValue value;  // 顶点数据
     Edge* First;//获取第一条边
};
//邻接顶点
using AdjVertex = Vertex*;
//邻接表
using AdjList = AdjVertex*;

//图
struct Graph {
  
    //邻接列表
    AdjList List;

    //顶点数
    int VertexSize;

    //边数
    int EdgeSize;
 };

看的清清楚楚 !

using AdjVertex = Vertex*;

你也可以不用指针 用 了也没啥事我的就是方法方式不一样
为了更好的构建图结构 画图是避免不了的事情
请看现露出只因(鸡)脚,本作者 带来的精彩图

在这里插入图片描述
首先来看圆圆的带着字 ! 蔡徐坤与其他人关系 是没有任何的关系
邻接表:包含数据 并且有一个 Edge* First; 获取第一条边 当然现在也显示不出来

来看看邻接表如何组合成图结构的吧

//图
struct Graph {
  
    //邻接列表
    AdjList List;

    //顶点数
    int VertexSize;

    //边数
    int EdgeSize;
 };
   //邻接列表
    AdjList List; //本质就是 一个指针数组 List指向蔡徐坤这个虚拟结点 当然你也可以认为是一个结点指向蔡徐坤这个结点

在这里插入图片描述

算法实现

算法声明

//图初始化
void GraphInit(Graph& graph);

//添加顶点
void AddVertex(Graph& graph, VertexValue value);

//添加边
void AddSingleEdge(Graph& graph, VertexValue VertexValueFirst, VertexValue VertexValueSecond);

//添加边的权值
void SetEdgeOFWeight(Graph& graph, VertexValue VertexValueFirst, VertexValue VertexValueSecond, Ikun Weight);

//深度优先遍历
void DepthFirstSearch(const Graph& graph);
void DepthFirstSearch(const Graph& graph, int VertexIndex);

初始化图结构

你需要多少个顶点 ?
看你的需求 定义常量
所以添加顶点的的时候 动态? 还是一次性分配好
当然 效率来说当然是还是一次性分配好 难道你想一个个扩展? 产生时间成本 有的时候一切的安排或许有效率 但也要学会变动态,比如说:突然忘记带笔记本电脑上班,赶紧回去找笔记本电脑 没有发生什么事情 .比如说 :遇见好久不见的朋友 聊一下什么的 我们需要理性的动态 而不是一边一次性安排计划 这个点我要干嘛 ;只会感觉没有意义 完全是计划绑定死了的人

所以一切看你的需求来 我的需求是 如果顶点数大于1024 那么不需要添加

//顶点添加最大值
const int MaxSize = 1024;

在这里插入图片描述


//邻接表初始化
static void  AdjListInit(AdjList& List) {

    //遍历邻接表数组
    for (size_t i = 0; i < MaxSize; i++) {  

        //初始化所有元素为null
        List[i] = nullptr;  

    }
}

//图初始化
void GraphInit(Graph& graph){  

    //动态分配邻接表数组
    graph.List = new AdjVertex[MaxSize];  

    //调用邻接表初始化函数
    AdjListInit(graph.List);  

    //初始化顶点数量和边数量
    graph.VertexSize = 0;  
    graph.EdgeSize = 0;  

}

添加顶点

static AdjVertex CreateAdjVertex(VertexValue& value) {  

    //创建新顶点
    Vertex *vertex = new Vertex; 

    //设置顶点的值
    vertex->value = value;  

    //设置第一条边为null
    vertex->First = nullptr;  

    //返回邻接顶点,实际上就是新顶点的指针
    return vertex;  

}

void AddVertex(Graph& graph, VertexValue value){
     
    //获取顶点数量的引用
    int& VertexSize = graph.VertexSize;  

    //如果顶点数量达到上限,不再添加
    if (VertexSize >= MaxSize) {  
        return;  
    }  

    //获取邻接表的引用
    AdjList& List = graph.List;  

    //调用CreateAdjVertex创建新顶点
    AdjVertex adjVertex = CreateAdjVertex(value);  

    //将新顶点添加到邻接表中
    List[VertexSize] = adjVertex;   

    //更新顶点数量
    ++VertexSize;  
}

添加顶点非常像顺序表添加一样简单
真正的man,不需要绽放光芒也能闪亮
在这里插入图片描述
添加完毕后的 图结构:
在这里插入图片描述
感觉有点枯燥起来,唉 也不知道为啥总觉得自己提高不上来,可能过于自信了吧 不管怎么样实力永远都是比比不了学历 这我知道,但尝试过去休闲日子,因为自己太失败了,一个不太正常的人,当然我说的是我本人 但有的时候有点怪 怎么说呢看看这个链接我的故事
唉 避免不了的事情 就是这件事情 我虽然放弃了我的学业 当然学习的机会是自己争取,当然这怎么可能一个人呢 当然资源
竞争往往都是给别人,但我敢于投资策略 ,总之一切靠的是人脉网络 我其实写这个博客就是需要这些人脉网络扩大我的就业机遇这才是目的,谢谢你们关注 ,我会继续更新所学到的内容 以及分享一些有趣的话题

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动驾驶嵌入式开发工程师:车载SOC开发修炼秘籍

声明&#xff1a;本文档是博主在开发学习过程中写的笔记&#xff0c;本意是便于以后开发复盘&#xff0c;参考《 ug1144-petalinux-tools-reference-guide》、《ug1085》、黑金Zynq UltraScale MPSoC 5EV开发板资料、英伟达官方资料。大佬勿喷 大佬勿喷 大佬勿喷&#xff01;&a…

【资料分享】RS-485 串行接口说明

面对大量可用的串行接口&#xff0c;可能很难理解它们之间的差异以及何时使用它们。正如我最喜欢的工程学教授经常说的那样&#xff0c;“标准的美妙之处在于有很多标准可供选择。” 今天的编码器比以往任何时候都更智能、更先进&#xff0c;要求工程师放弃更简单的正交增量传感…

智能网联环境下数据安全分析与建设思考

01安全概况 随着智能化程度不断提升&#xff0c;汽车正逐渐从传统意义上的交通工具演化为公路上的智能终端&#xff0c;核心部件也从发动机、变速箱、底盘上升为芯片、软件与数据。相关机构研究表明&#xff0c;目前全球市场搭载智能网联功能的新车渗透率约为45%&#xff0c;预…

160个CrackMe之001

吾爱中的逆向练习题 运行程序 有两个方式 一个是账号登入 一个是序列号输入 账号输入 方法一 爆破 我们先进行账号输入 这个是最简单的逆向 所以我们可以使用 字符串查找看看 先试用ollydbg打开 右键 ->查找 ->所有参考文本字符串 这里我们能发现有两个报错 我们还…

《C++ deque的介绍以及stackh和queue的模拟实现》

文章目录 一、容器适配器1.1 什么是适配器1.2 STL中stack和queue的底层结构1.3 deque的简单介绍1.3.1 deque的原理介绍1.3.2 deque的结构1.3.3 deque和vector以及list的对比1.3.4 为什么选择deque作为stack和queue的适配容器 二、stack的模拟实现三、queue的模拟实现 一、容器适…

5个超实用视频素材网站,免费下载~

推荐几个高清无水印的视频素材网站&#xff0c;重点是可以免费下载使用&#xff0c;建议收藏&#xff01; 菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 可以称之为最大素材库&#xff0c;在这里你可以找到设计、办公、图片、视频、音频等各种素材。视频素材就有…

基于Nginx搭建LNMP

目录 一&#xff1a;安装 Nginx 服务 1、关闭防火墙、安装依赖包 2、创建运行用户 3、压缩包编译安装 4、优化路径 5、添加 Nginx 系统服务 二&#xff1a; 安装 MySQL 服务 1、安装Mysql环境依赖包 2、创建运行用户 3、编译安装 4、修改mysql 配置文件 5、更改mysql安装…

网络通信:http协议

虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议) 就是其中之一. 认识URL 统一资源定位符(Uniform Resource Locator&#xff0c;缩写&#xff1a;URL)&#xff0c;…

springboot + vue3实现视频播放Demo(video.js Vue3-video-play视频播放器)

文章目录 学习链接前言ffmpeg安装ffmpeg配置环境变量分割视频文件 后台配置WebConfig 前端代码video.js示例安装依赖视频播放组件效果 Vue3-video-play示例安装依赖main.js中使用视频播放组件效果 学习链接 ffmpeg官网 长时长视频java存储及vue播放解决方法 【 攻城略地 】vue…

AKStream部署1:ZLMediaKit流媒体服务器(win)

环境准备&#xff1a; windows10/11 visual stadio 2022(.net 6) cmake 3.22.0 git bash 没讲究直接下最新的 ffmpeg &#xff1a; ffmpeg-5.1.2-full_build VLC播放器&#xff1a;VLC media player ZLMediaKit&#xff1a;gitee地址 1、安装上述软件 例ffmpeg下载解压至某自定…

图片转pdf怎么转?一分钟解决

在日常生活中&#xff0c;我们常常需要将一些图片转换成PDF格式&#xff0c;以便于在电子设备上查看和分享。今天&#xff0c;我们将分享一些关于如何将图片转换成PDF的方法。 以下是三种常用的将图片转换成PDF的方法&#xff1a; 我们可以借助转换工具将图片转成PDF 如PDF转…

用esp8266连网的一些互联网知识

参考太极创客的课程资料添加链接描述 TCP/IP协议簇 在网络系统中&#xff0c;为了保证通信设备之间能正确地进行通信&#xff0c;必须使用一种双方都能够理解的语言&#xff0c;这种语言被称为“协议”。 TCP/IP协议簇是Internet的基础&#xff0c;也是当今最流行的组网形式…

数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)

目录 题目描述 输入示例 输出示例 数据结构的选择 核心算法 计算左子树的规模 思路 总结 题目描述 现给定一系列不同的非负整数键&#xff0c;如果要求构造出一颗完全二叉树&#xff0c;则可以构造唯一的二叉搜索树。输出此二叉搜索树的层序遍历序列。 完全二叉树 有n…

复习之linux系统中的权限管理

1.权限的查看及读取 &#xff08;1&#xff09;权限的查看 # ls -l file : 查看文件的权限 # ls -ld dir :查看目录权限 &#xff08;2&#xff09;权限的读取 文件的属性叫做文件的元数据。 元数据&#xff08;Metadata&#xff09;&#xff0c;又称中介数据、中继…

chatgpt赋能python:Python为什么运行不出来?

Python为什么运行不出来&#xff1f; Python是一门高级编程语言&#xff0c;被广泛应用于科学计算、机器学习、Web开发等领域。但是&#xff0c;有时候我们在编写Python程序的过程中会遇到各种各样的问题&#xff0c;其中之一就是程序无法运行。那么&#xff0c;Python为什么会…

网页投票系统怎么做如何制作网页投票链接如何投票链接

用户在使用微信投票的时候&#xff0c;需要功能齐全&#xff0c;又快捷方便的投票小程序。 而“活动星投票”这款软件使用非常的方便&#xff0c;用户可以随时使用手机微信小程序获得线上投票服务&#xff0c;很多用户都很喜欢“活动星投票”这款软件。 “活动星投票”小程序在…

mysql版本升级导致的时区问题

背景 公司各个项目组用的mysql 版本不一样&#xff0c;有的是5.x稳定守旧版&#xff0c;有的最近喜欢用8.x高级迎新版&#xff0c;结果出了问题。 现象&#xff0c;数据库中保存的时间与java读取的时间字段不一样。 最开始数据库mysql版本为5.7.28&#xff0c;驱动为5.1 反正…

【C++】queue和priority_queue的用法及模拟实现

目录 一、queue的简介及其使用1、queue的简介2、queue的使用2、queue的模拟实现 二、priority_queue的简介及其使用1、priority_queue的简介2、priority_queue的使用3、priority_queue的模拟实现 一、queue的简介及其使用 1、queue的简介 queue是一种容器适配器&#xff0c;专…

SpringBoot 学习笔记之 “异常处理”

&#x1f34f;&#x1f350;&#x1f34a;&#x1f351;&#x1f352;&#x1f353;&#x1fad0;&#x1f951;&#x1f34b;&#x1f349;&#x1f95d; 异常处理 文章目录 &#x1f34f; 错误处理1、默认规则2、定制错误处理逻辑3、异常处理自动配置原理4、异常处…

用Python发送通知到企业微信,实现消息推送

Hi&#xff0c;大家好&#xff0c;今天就介绍如何实现自动推送消息到企业微信&#xff0c;适合告警类型通知&#xff0c;非常方便。 在华为工作了10年的大佬出的Web自动化测试教程&#xff0c;华为现用技术教程&#xff01;_哔哩哔哩_bilibili在华为工作了10年的大佬出的Web自…