数据结构学习笔记-图
1.图的存储
(1)邻接矩阵法
#define MaxVertexNum 100 //顶点数目的最大值
typedef struct{char Vex[MaxVertexNum]; //顶点表int Edge[MaxVertexNum][MaxVertexNum]; //邻接矩阵表,边表int vexnum,arcnum; //图的当前顶点数和边数/弧数
} MGraph;
存储带权的图(网)
#define MaxVertexNum 100 //顶点数目的最大值
#define INFINITY 最大的int值 //宏定义常量“无穷”
typedef char VertexType; //顶点的数据类型
typedef int EdgeType; //带权图中边上权值的数据类型
typedef struct{VertexType Vex[MaxVertexNum]; //顶点EdgeType Edge[MaxVertexNum][MaxVertexNum]; //边的权int vexnum,arcnum; //图的当前顶点数和弧数
}MGraph;
(2)邻接表法(顺序+链式存储)
//“顶点”
typedef struct VNode{VertexType data; //顶点信息ArcNode *first; //第一条边/弧
} VNode,AdList[MaxVertexNum];//用邻接表存储的图
typedef struct {AdList vertice;int vexnum,arcnum;
} ALGraph;//“边/弧”
typedef struct ArcNode{int adjvex; //边/弧指向哪个结点struct ArcNode *next; //指向下一条弧的指针//InfoType into; //边权值
}ArcNode;
无向图的同一条边会指向两次,有向图的一条边只指向一次。
2.图的基本操作
Adjacent(G,x,y):判断图G是否存在边<x,y>或(x,y)。
Neighbors(G,x):列出图G中与结点x邻接的边。
InsertVertex(G,x):在图G中插入顶点x。
DeleteVertex(G,x):从图G中删除顶点x。
AddEdge(G,x,y):若无向边(x,y) 或有向边<x,y>不存在,则向图G中添加该边。
RemoveEdge(G,x,y):若无向边(x,y)或有向边<x,y>存在,则从图G中删除该边。
FirstNeighbor(G,x):求图G中顶点x的第一个邻接点,若有则返回顶点号。若x没有邻接点或图中不存在x,则返回-1。
NextNeighbor(G,x,y):假设图G中顶点y是顶点x的第一个邻接点,返回除y之外顶点x的下一个邻接点的顶点号,若y是x的最后一个邻接点,则返回-1。
Get_edge_value(G,x,y):获取图G中边(x,y)或<x,y>对应的权值。
Set_edge_value(G,x,y,v):设置图G中边(x,y)或<x,y>对应的权值为v。
3.图的广度优先遍历(BFS)
要点:
①找到与一个顶点相邻的所有顶点
②标记哪些顶点被访问过
③需要一个辅助队列
bool visited[MAX_VERTEX_NUM]; //访问标记数组void BFSTraverse(Graph G){ //对图G进行广度优先遍历for(i=0;i<G.vexnum;++i)visited[i]=FALSE; //访问标记数组初始化InitQueue(Q); //初始化辅助队列Q for(i=0;i<G.vexnum;++i) //从0号顶点开始遍历if(!visited[i]) //对每个联通分量调用一次BFSBFS(G,i); //vi未访问过,从vi开始BFS
}//广度优先遍历
void BFS(Graph G,int v){ //从顶点v出发,广度优先遍历图Gvisit(v); //访问初始顶点vvisited[v]=TRUE; //对v做已访问标记Enqueue(Q,v); //顶点v入队列Qwhile(!isEmpty(Q)){DeQueue(Q,v); //顶点v出队列Qfor(w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w))//检测v所有邻接点if(!visited[w]){ //w为v的尚未访问的邻接顶点visit(w); //访问顶点wvisited[w]=TRUE; //对w做已访问标记EnQueue(Q,w); //顶点w入队列} //if} //while
}
4.图的深度优先遍历
bool visited[MAX_VERTEX_NUM]; //访问标记数组void DESTraverse(Graph G){ //对图G进行深度优先遍历for(v=0;v<G.vexnum;++v)visited[v]=FALSE; //初始化已访问标记数据for(v=0;v<G.vexnum;++v) //本代码中是从v=0开始遍历if(!visited[v])DFS(G,v);
}void DFS(Graph G,int v){ //从顶点v出发,深度优先遍历图Gvisit(v); //访问顶点vvisited[v]=TRUE; //设已访问标记for(w=FirstNeighbor(G,v);w>0;w=NextNeighbor(G,v,w))if(!visited[w]){ //w为u的尚未访问的邻接顶点DFS(G,w);} //if
}
5.最短路径(BFS算法)
//求顶点u到其他顶点的最短路径
void BFS_MIN_Distance(Graph G,int u){//d[i]表示从u到i结点的最短路径for(i=0;i<G.vexnum;++i){d[i]=∞; //初始化路径长度path[i]=-1; //最短路径从哪个顶点过来}d[u]=0;visited[u]=TRUE;EnQueue(Q,u);while(!isEmpty(Q)){ //BFS算法主过程DeQueue(Q,u); //队头元素u出队for(w=FirstNeighbor(G,u);w>=0;w=NextNeighbor(G,u,w))if(!visited[w]){ //w为u的尚未访问的邻接顶点d[w]=d[u]+1; //路径长度加1path[w]=u; //最短路径应从u到wvisited[w]=TRUE; //设已访问标记EnQueue(Q,w); //顶点w入队} //if} //while
}
相关文章:
数据结构学习笔记-图
1.图的存储 (1)邻接矩阵法 #define MaxVertexNum 100 //顶点数目的最大值 typedef struct{char Vex[MaxVertexNum]; //顶点表int Edge[MaxVertexNum][MaxVertexNum]; //邻接矩阵表,边表int vexnum,arcnum; //图的当前顶点数和边…...
【归并排序】| 详解归并排序核心代码之合并两个有序数组 力扣88
🎗️ 主页:小夜时雨 🎗️专栏:动态规划 🎗️如何活着,是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/merge-sorted-array/description/ 本道题是归并排序的…...
51单片机STC89C52RC——2.3 两个独立按键模拟控制LED流水灯方向
目的 按下K1键LED流水向左移动 按下K2键LED流水向右移动 一,STC单片机模块 二,独立按键 2.1 独立按键位置 2.2 独立按键电路图 这里要注意一个设计的bug P3_1 引脚对应是K1 P3_0 引脚对应是K2 要实现按一下点亮、再按一下熄灭,我们就需…...
Neo4j连接
终端输入: neo4j console 浏览器访问:http://localhost:7474/ 输入用户名和密码:neo4j, 梦想密码(首次neo4j) 代码连接用新的服务器地址: g Graph(neo4j://localhost:7687, auth(neo4j, ))…...
List 列表
文章目录 一、什么是 List 列表1.1 创建 List 列表的方式1.2 列表的新增函数方法1.3 列表的删除函数方法1.4 修改列表数据的方法1.5 列表的查询函数方法1.6 列表的排序和反序1.7 列表的复制 一、什么是 List 列表 List 列表:该数据类型定义的变量可以理解为是一个数…...
nginx ws长连接配置
nginx ws长连接配置 http根节点下配上 map $http_upgrade $connection_upgrade {default upgrade; close;}如下: server服务节点下,后端接口的代理配置 proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connec…...
Windows下访问wsl的数据
Windows下访问wsl的数据 有些人感受到的是雨,而很多人感受到的只有淋湿。 Windows下的wsl说实话还是挺不错的,对于开发而言,效果相当的可以。 比如在某个文件夹,Windows编辑好代码后,直接右键打开wsl,就可…...
机器学习笔记 - 用于3D数据分类、分割的Point Net简述
一、简述 在本文中,我们将了解Point Net,目前,处理图像数据的方法有很多。从传统的计算机视觉方法到使用卷积神经网络到Transformer方法,几乎任何 2D 图像应用都会有某种现有的方法。然而,当涉及到 3D 数据时,现成的工具和方法并不那么丰富。3D 空间中一个工具就是Point …...
vscode 连接 GitHub
目录 vscode连接github一、解决 github 登录问题二、通过 SSH 连接 github1、只有一个 git 账号2、切换 git 账号3、在两个账号之间切换 vscode 连接 gitee一、通过 HTTPS 连接二、通过 SSH 连接 vscode连接github 在 vscode 中首次使用 git push 命令时会要求输入 github 账户…...
集合java
1.集合 ArrayList 集合和数组的优势对比: 长度可变 添加数据的时候不需要考虑索引,默认将数据添加到末尾 package com.itheima;import java.util.ArrayList;/*public boolean add(要添加的元素) | 将指定的元素追加到此集合的末尾 | | p…...
智能体(Agent)实战——从gpts到auto gen
一.GPTs 智能体以大模型作为大脑,同时配备技能,使其能够完成具体的任务。同时,为了应用于垂直领域,我们需要为大模型定义一个角色,并构建知识库。最后,定义完整的流程,使其完成整个任务。以组会…...
PyTorch 张量数据类型
【数据类型】Python 与 PyTorch 常见数据类型对应: 用 a.type() 获取数据类型,用 isinstance(a, 目标类型) 进行类型合法化检测 >>> import torch >>> a torch.randn(2,3) >>> a tensor([[-1.7818, -0.2472, -2.0684],[ 0.…...
奇思妙想-可以通过图片闻见味道的设计
奇思妙想-可以通过图片闻见味道的设计 偷闲半日享清闲,炭火烧烤乐无边。肉串飘香引客至,笑语欢声绕云间。人生难得几回醉,且把烦恼抛九天。今宵共饮开怀酒,改日再战新篇章。周四的傍晚,难得的闲暇时光让我与几位挚友相…...
装饰者模式(设计模式)
装饰模式就是对一个类进行装饰,增强其方法行为,在装饰模式中,作为原来的这个类使用者还不应该感受到装饰前与装饰后有什么不同,否则就破坏了原有类的结构了,所以装饰器模式要做到对被装饰类的使用者透明,这…...
ADB调试命令大全
目录 前言命令大全1.显示当前运行的全部模拟器:adb devices2.启动ADB: adb start-server3.停止ADB: adb kill-server4.安装应用程序: adb install -r [apk文件]5.卸载应用程序: adb uninstall [packagename]6.将手机设备中的文件copy到本地计…...
查看npm版本异常,更新nvm版本解决问题
首先说说遇见的问题,基本上把nvm,npm的坑都排了一遍 nvm版本导致npm install报错 Unexpected token ‘.‘install和查看node版本都正确,结果查看npm版本时候报错 首先就是降低node版本… 可以说基本没用,如果要降低版本的话&…...
计算机行业
计算机行业环境分析 2022.01.12 计算机行业环境分析 计算机专业就业前景 随着科技的进步和信息事业的发展,尤其是计算机技术的发展与网络应用的逐渐普及。计算机已成为人们工作和生活中不可缺少的东西。IT行业迅猛发展,就业工作岗位也比比皆是。在最近…...
各种机器学习算法的应用场景分别是什么(比如朴素贝叶斯、决策树、K 近邻、SVM、逻辑回归最大熵模型)?
2023简直被人工智能相关话题席卷的一年。关于机器学习算法的热度,也再次飙升,网络上一些分享已经比较老了。那么今天借着查询和学习的机会,我也来浅浅分享下目前各种机器学习算法及其应用场景。 为了方便非专业的朋友阅读,我会从算…...
SQLite JDBC驱动程序
SQLite JDBC驱动程序下载地址: 下载地址...
Postgre 调优工具pgBadger部署
一,简介: pgBadger(日志分析器)类似于oracle的AWR报告(基于1小时,一天,一周,一月的报告),以图形化的方式帮助DBA更方便的找到隐含问题。 pgbadger是为了提高…...
抖音批量下载助手:高效采集与智能管理的视频获取工具
抖音批量下载助手:高效采集与智能管理的视频获取工具 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 抖音批量下载助手是一款专注于抖音平台内容采集的工具,能够帮助用户实现多账号视…...
AudioSeal部署案例:AI语音API服务商在响应头中嵌入水印校验码方案
AudioSeal部署案例:AI语音API服务商在响应头中嵌入水印校验码方案 1. 项目概述与技术背景 AudioSeal是由Meta开源的语音水印系统,专门用于AI生成音频的检测和溯源。这套系统通过独特的数字水印技术,为语音内容提供身份标识和版权保护能力。…...
别再瞎选框架了!3分钟决策法搞定AI Agent选型,小白建议收藏
先说结论:三分钟决策法很多人一上来就去对比 GitHub Star 数、搜索、看视频教程、翻文档——但其实选框架的第一步根本不是技术调研,而是先问自己一个问题:你现在最需要的,是「快速验证一个想法」,还是「把验证过的想法…...
C#实战:用MySqlBulkCopy实现MySQL百万级数据秒级导入(附完整代码)
C#实战:用MySqlBulkCopy实现MySQL百万级数据秒级导入(附完整代码) 在数据处理领域,批量导入海量数据一直是开发者面临的挑战之一。传统的一条条插入方式在面对百万级数据时往往显得力不从心,不仅耗时耗力,还…...
衡山派D21x平台SDMC驱动与文件系统参数配置详解
衡山派D21x平台SDMC驱动与文件系统参数配置详解 最近在衡山派D21x平台上做项目,要用到SD卡存储数据,发现很多朋友在配置SDMC驱动和挂载文件系统时容易卡住。今天我就把自己在实际项目中配置SD/MMC控制器(SDMC)的完整流程分享出来&…...
Realistic Vision V5.1虚拟摄影棚企业级应用:品牌视觉一致性人像生成系统
Realistic Vision V5.1虚拟摄影棚企业级应用:品牌视觉一致性人像生成系统 想象一下,一家服装品牌需要为即将上新的100款产品拍摄模特图。传统方式下,这意味着要预约摄影师、模特、化妆师,租赁影棚,经历漫长的拍摄和后…...
【2026年最新600套毕设项目分享】springboot数字博物馆系统(14128)
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...
开放式耳机性价比高的有哪些?2026年开放式耳机推荐性价比排行榜
开放式耳机的走红绝非偶然,挂耳、夹耳的贴合设计告别闷胀感,全天佩戴无压力,还不隔绝环境音的优势,精准戳中了办公、运动等多场景需求,说是耳机界的“刚需新品”也不为过。但爆火背后,是网红品牌的野蛮生长…...
Web安全自学路线图:从零到入门,避开这些坑就够了!
很多新手卡在“知道概念,不会动手”的瓶颈,问题不在天赋,而在路径。作为一名安全从业者,我见过太多初学者在浩瀚的知识面前迷失方向。他们学了一堆术语,看了无数教程,但面对一个真实的网站依然无从下手。今…...
解决brew安装慢问题
用 brew 安装软件慢,通常是因为默认的官方源服务器在国外。解决的核心思路就是将默认源替换为国内的镜像源。对于2025年的新版 Homebrew,有一个关键的新步骤需要留意。 💡 核心原因 Homebrew 慢主要是因为它的核心仓库和软件包(Bo…...
