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

数据结构学习笔记-图

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.图的存储 &#xff08;1&#xff09;邻接矩阵法 #define MaxVertexNum 100 //顶点数目的最大值 typedef struct{char Vex[MaxVertexNum]; //顶点表int Edge[MaxVertexNum][MaxVertexNum]; //邻接矩阵表&#xff0c;边表int vexnum,arcnum; //图的当前顶点数和边…...

【归并排序】| 详解归并排序核心代码之合并两个有序数组 力扣88

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️专栏&#xff1a;动态规划 &#x1f397;️如何活着&#xff0c;是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/merge-sorted-array/description/ 本道题是归并排序的…...

51单片机STC89C52RC——2.3 两个独立按键模拟控制LED流水灯方向

目的 按下K1键LED流水向左移动 按下K2键LED流水向右移动 一&#xff0c;STC单片机模块 二&#xff0c;独立按键 2.1 独立按键位置 2.2 独立按键电路图 这里要注意一个设计的bug P3_1 引脚对应是K1 P3_0 引脚对应是K2 要实现按一下点亮、再按一下熄灭&#xff0c;我们就需…...

Neo4j连接

终端输入&#xff1a; neo4j console 浏览器访问&#xff1a;http://localhost:7474/ 输入用户名和密码&#xff1a;neo4j&#xff0c; 梦想密码&#xff08;首次neo4j&#xff09; 代码连接用新的服务器地址&#xff1a; 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 列表&#xff1a;该数据类型定义的变量可以理解为是一个数…...

nginx ws长连接配置

nginx ws长连接配置 http根节点下配上 map $http_upgrade $connection_upgrade {default upgrade; close;}如下&#xff1a; server服务节点下&#xff0c;后端接口的代理配置 proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connec…...

Windows下访问wsl的数据

Windows下访问wsl的数据 有些人感受到的是雨&#xff0c;而很多人感受到的只有淋湿。 Windows下的wsl说实话还是挺不错的&#xff0c;对于开发而言&#xff0c;效果相当的可以。 比如在某个文件夹&#xff0c;Windows编辑好代码后&#xff0c;直接右键打开wsl&#xff0c;就可…...

机器学习笔记 - 用于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 集合和数组的优势对比&#xff1a; 长度可变 添加数据的时候不需要考虑索引&#xff0c;默认将数据添加到末尾 package com.itheima;import java.util.ArrayList;/*public boolean add(要添加的元素) | 将指定的元素追加到此集合的末尾 | | p…...

智能体(Agent)实战——从gpts到auto gen

一.GPTs 智能体以大模型作为大脑&#xff0c;同时配备技能&#xff0c;使其能够完成具体的任务。同时&#xff0c;为了应用于垂直领域&#xff0c;我们需要为大模型定义一个角色&#xff0c;并构建知识库。最后&#xff0c;定义完整的流程&#xff0c;使其完成整个任务。以组会…...

PyTorch 张量数据类型

【数据类型】Python 与 PyTorch 常见数据类型对应&#xff1a; 用 a.type() 获取数据类型&#xff0c;用 isinstance(a, 目标类型) 进行类型合法化检测 >>> import torch >>> a torch.randn(2,3) >>> a tensor([[-1.7818, -0.2472, -2.0684],[ 0.…...

奇思妙想-可以通过图片闻见味道的设计

奇思妙想-可以通过图片闻见味道的设计 偷闲半日享清闲&#xff0c;炭火烧烤乐无边。肉串飘香引客至&#xff0c;笑语欢声绕云间。人生难得几回醉&#xff0c;且把烦恼抛九天。今宵共饮开怀酒&#xff0c;改日再战新篇章。周四的傍晚&#xff0c;难得的闲暇时光让我与几位挚友相…...

装饰者模式(设计模式)

装饰模式就是对一个类进行装饰&#xff0c;增强其方法行为&#xff0c;在装饰模式中&#xff0c;作为原来的这个类使用者还不应该感受到装饰前与装饰后有什么不同&#xff0c;否则就破坏了原有类的结构了&#xff0c;所以装饰器模式要做到对被装饰类的使用者透明&#xff0c;这…...

ADB调试命令大全

目录 前言命令大全1.显示当前运行的全部模拟器&#xff1a;adb devices2.启动ADB: adb start-server3.停止ADB: adb kill-server4.安装应用程序&#xff1a; adb install -r [apk文件]5.卸载应用程序&#xff1a; adb uninstall [packagename]6.将手机设备中的文件copy到本地计…...

查看npm版本异常,更新nvm版本解决问题

首先说说遇见的问题&#xff0c;基本上把nvm&#xff0c;npm的坑都排了一遍 nvm版本导致npm install报错 Unexpected token ‘.‘install和查看node版本都正确&#xff0c;结果查看npm版本时候报错 首先就是降低node版本… 可以说基本没用&#xff0c;如果要降低版本的话&…...

计算机行业

计算机行业环境分析 2022.01.12 计算机行业环境分析 计算机专业就业前景 随着科技的进步和信息事业的发展&#xff0c;尤其是计算机技术的发展与网络应用的逐渐普及。计算机已成为人们工作和生活中不可缺少的东西。IT行业迅猛发展&#xff0c;就业工作岗位也比比皆是。在最近…...

各种机器学习算法的应用场景分别是什么(比如朴素贝叶斯、决策树、K 近邻、SVM、逻辑回归最大熵模型)?

2023简直被人工智能相关话题席卷的一年。关于机器学习算法的热度&#xff0c;也再次飙升&#xff0c;网络上一些分享已经比较老了。那么今天借着查询和学习的机会&#xff0c;我也来浅浅分享下目前各种机器学习算法及其应用场景。 为了方便非专业的朋友阅读&#xff0c;我会从算…...

SQLite JDBC驱动程序

SQLite JDBC驱动程序下载地址&#xff1a; 下载地址...

Postgre 调优工具pgBadger部署

一&#xff0c;简介&#xff1a; pgBadger&#xff08;日志分析器&#xff09;类似于oracle的AWR报告&#xff08;基于1小时&#xff0c;一天&#xff0c;一周&#xff0c;一月的报告&#xff09;&#xff0c;以图形化的方式帮助DBA更方便的找到隐含问题。 pgbadger是为了提高…...

快充、便携、安全兼备,Anker能量盒到底香不香?

随着无线互联网时代的到来&#xff0c;移动设备的续航问题成为人们的新烦恼。无论是频繁出差、旅行&#xff0c;还是移动办公&#xff0c;充电宝几乎已经成为随身必备的装备。 然而&#xff0c;传统充电宝往往存在充电速度慢、体积笨重、功能单一&#xff0c;甚至安全认证不完善…...

黑马点评技术汇总(一)验证码登录

一、session实现验证码登录总思路&#xff1a; 前端提交手机号发起code请求&#xff0c;服务端校验手机号是否符合格式&#xff0c;成功后生成验证码存入session并发送给用户。 用户提交手机号和验证码验证手机是否符合格式&#xff08;这里有个bug&#xff09;验证码是否和ses…...

【linux】Xorg与X Window System的交互机制解析

1. X Window System与Xorg的关系 当你打开Linux电脑看到图形界面时&#xff0c;背后默默工作的就是X Window System。这个诞生于1984年的图形系统至今仍是Linux桌面环境的基石&#xff0c;而Xorg则是它的现代实现版本。简单来说&#xff0c;X Window System定义了图形显示的标准…...

DanKoe 视频笔记:生活哲学:理解生活的三个阶段

在本节课中&#xff0c;我们将学习一个关于个人成长与生活节奏的框架。通过理解“强度”、“一致性”和“好奇心”这三个循环往复的阶段&#xff0c;你可以更好地定位自己当前的状态&#xff0c;并学会顺应而非对抗生活的自然周期&#xff0c;从而减少迷茫&#xff0c;更有效地…...

智能客服系统搭建实战:基于NLP与微服务架构的AI客服实现指南

最近在帮公司搭建一套智能客服系统&#xff0c;从零开始踩了不少坑&#xff0c;也积累了一些实战经验。今天就来聊聊&#xff0c;如何基于当前比较成熟的 NLP 和微服务架构&#xff0c;一步步构建一个能扛住真实业务压力的 AI 客服系统。整个过程涉及技术选型、核心模块实现、性…...

如何用ExplorerPatcher解决Windows 11界面不适问题提升工作效率

如何用ExplorerPatcher解决Windows 11界面不适问题提升工作效率 【免费下载链接】ExplorerPatcher 提升Windows操作系统下的工作环境 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher Windows 11带来的界面变革让许多用户感到操作不便&#xff0c;任…...

OpenClaw 小龙虾Windows10 专属一键部署教程|10 分钟搞定本地 AI 数字员工

适配系统&#xff1a;Windows10 64 位&#xff08;纯小白友好版&#xff09; 核心优势&#xff1a;免命令行、免环境配置、解压即装&#xff0c;内置所有运行依赖&#xff0c;全程可视化操作&#xff0c;新手也能一次成功部署 2026 爆火的开源 AI 智能体&#xff01; 本文专属…...

三层交换机vlan间互通配置

SW1&#xff08;三层交换机&#xff09;配置# 1. 创建VLAN sysname LSW1 vlan batch 100 200 300# 2. 配置接口并加入VLAN interface GigabitEthernet 0/0/4port link-type accessport default vlan 100stp disable # 关闭生成树 interface GigabitEthernet 0/0/5port link-ty…...

Linux内核观测与跟踪的利器BPF环境测试

内核观测工具BPF实例BPF介绍BPF实例使用 BCC 工具集&#xff08;最简单&#xff09;使用 libbpf BPF 骨架&#xff08;更接近生产环境&#xff09;使用 bpftool 直接加载&#xff08;适合调试&#xff09;总结BPF介绍 BPF 最初诞生于 1992 年&#xff0c;是一种用于网络数据包…...

VSCode远程开发必备:SSH端口转发一键配置指南(含常见问题排查)

VSCode远程开发实战&#xff1a;SSH端口转发高效配置与深度排错 当你在咖啡厅修改代码时&#xff0c;远程服务器上的数据库服务突然需要紧急调试&#xff1b;当团队协作时&#xff0c;同事的内网API接口需要临时开放给你测试——这些场景下&#xff0c;SSH端口转发就像一把瑞士…...