C语言 图的基础知识

  • 图的基本概念
  • 图的存储方法
    • **邻接矩阵**:
    • 邻接表
  • 图的遍历
    • 深度优先(DFS)
    • 广度优先(BFS)
  • 最小生成树
    • Prim算法
    • Kruskal算法
  • 最短路径问题

图的基本概念

图的定义
图是由顶点的非空有穷集合顶点之间关系(边或弧)的集合构成的结构,通常表示为:G=(V,E),其中V为顶点集合,E为关系(边或弧)的集合。

图的分类
无向图:对于(vi,vj)∈E,必有(vj,vi)∈ E,并且偶对中顶点的前后顺序无关。
有向图:<vi,vj>∈E是顶点的有序偶对。
网:与边有关的数据称为权,边上带权的图称为网。
在这里插入图片描述顶点的度
依附于顶点Vi的边的数目,称为TD(i);
对于有向图而言:
顶点的出度:以顶点vi为出发点的边的数目:记为OD(vi);
顶点的入度:以顶点vi为终止点的边的数目,记为ID(vi);
TD(vi)=OD(vi)+ID(vi);

顶点和边关系
①具有n个顶点的无向图最多有n(n-1)/ 2 条边。
②具有n个顶点的有向图最多有n(n-1)条边。
边的数目达到最大的图称为完全图,边的数目达到或接近最大的图称为稠密图,否则,称为稀疏图

路径和路径长度
顶点vx和vy之间有路径P(vx,vy)的充分必要条件是:存在顶点序列vx,vi1,vi2,……,vim,vy,并且序列中相邻两个顶点构成的顶点偶对分别为图中的一条边。
在这里插入图片描述出发点与终止点相同的路径称为回路
顶点序列中顶点不重复出现的路径称为简单路径
不带权的图的路径长度是指路径上所经过的边的数目,带权图的路径长度是指路径上经过的边上的权值之和。

子图
如下图所示,G1’和G2’就是G的子图。
在这里插入图片描述无向图的连通
无向图中顶点vi到vj有路径,则称顶点vi和vj是连通的。若无向图中任意两个顶点都有连通,则称该无向图是连通的(称为连通图)。
连通分量:无向图中的极大连通子图。
在这里插入图片描述

有向图的连通:若有向图中顶点vi到vj有路径,并且顶点vj到vi也有路径,则称顶点vi与vj是连通的。若有向图中任意两个顶点都连通,则称该有向图是强连通的。
强连通分量:有向图中的极大强连通子图。
在这里插入图片描述生成树:包含n个顶点和n-1条边的极小连通子图称为G的一个生成树。

在这里插入图片描述
生成树的性质
1.包含n个顶点的图:连通且仅有n-1条边

=无回路且仅有n-1条边

=无回路且连通

=是一棵树
2.如果n个顶点的图中只要有少于n-1条边,图将不连通
3.如果n个顶点的图中有多于n-1条边,图将有环(回路)
4.一般,生成树不唯一。

图的存储方法

因为期末考试不考图的编程题,所以这里简单介绍一下即可:

邻接矩阵

核心思想 :采用两个数组存储一个图。

  1. 定义一个一维数组VERTEX【0……n-1】存放图中所有顶点的数据信息。
  2. 定义一个二维数组A【0……n-1,0……n-1】存放图中所有顶点之间关系的信息(即邻接矩阵)
    在这里插入图片描述
    例如:
    在这里插入图片描述邻接矩阵特点

①无向图的邻接矩阵一定是一个对称矩阵
②不带权的有向图的邻接矩阵一般是稀疏矩阵。
③无向图的邻接矩阵的第i行(或第i列)非0或非∞元素的个数为第 i个顶点的数。
④有向图的邻接矩阵的第i行非0或非∞元素的个数为第i个顶点的出度;第i列非0或非∞元素的个数为第i个顶点的入度

邻接表

核心思想:建立n个线性链表存储该图
顶点结点:每个链表前面设置一个头结点,用来存放一个顶点的数据信息,称之为顶点节点。其构造为在这里插入图片描述其中,vertex存放某个顶点的数据信息;link存放某个链表中第一个结点的地址。

边结点:第i个链表中的每一个链结点(边结点)表示以第i个顶点为出发点的一条边,边结点构造为:在这里插入图片描述weight域为权值域(若图不带权,则无此域);
adjvex域存放以第i个顶点为出发点的边的另一端点在头结点数组中的位置。
在这里插入图片描述
特点
①无向图的第i个链表中边结点个数是第i个顶点的度数

②有向图的第i个链表中边结点个数是第i个顶点的出度

③无向图的边结点个数一定为偶数,边结点个数为奇数的图一定是有向图。

图的遍历

深度优先(DFS)

直接上个图就行了:
在这里插入图片描述

为了区分哪些顶点被访问过,哪些没被访问,可以设置一个数组visit,visit[i]=0,表示没有被访问过,visit[i]=1,已经被访问过。

算法分析
若采用邻接表存储该图,则时间复杂度为O(n+e)。
若采用邻接矩阵存储,则时间复杂度为O(n²)

广度优先(BFS)

类似于树的层序遍历。
在这里插入图片描述
时间复杂度和空间复杂度同DFS。

最小生成树

带权连通图中,总的权值之和最小的带权生成树为 最小生成树 。最小生成树也称最小代价生成树,或最小花费生成树。

Prim算法

设G=(V,GE)为具有n个顶点的带权连通图,T=(U,TE)为生成的最小生成树,初始时,TE为空,U={v},v∈V。
依次在G中选择一条一个顶点仅在V中另一个顶点在U中,并且权值最小的边加入集合TE,同时将该边仅在V中的那个顶点加入集合U。重复上述过程n-1次,是的U=V,此时T为G的最小生成树。
在这里插入图片描述

Kruskal算法

从G中选一条当前为选择过的,且边上的权值最小的边加入TE,若加入TE后使得T未产生回路,则本次选择有效,如使得T产生回路,则本次选择无效,放弃本次选择的边。重复上述选择过程直到TE中包含了G的n-1条边,此时的T为G的最小生成树。
在这里插入图片描述

最短路径问题

Dijkstra算法(单源点问题)
1.图的存储
以0~1分别代表n个顶点,采用邻接矩阵存储该图,有
在这里插入图片描述
2.几个必要的数组设置
①设置一个标志数组s[0……n-1]记录源点v到图中哪些顶点的最短路径已经找到。有:
在这里插入图片描述
②设置数组dist[0……n-1]分别记录源点v到图中各顶点的最短路径的路径长度,其中,dist[i]记录源点到顶点i的最短路径长度。初始时,dist数组的值为邻接矩阵第v行的n个元素值。
③设置数组path[0……n-1]分别记录源点v到图中各顶点的最短路径所经过的顶点序列,其中,path[i]记录源点到顶点i的路径。

自然语言表达:
在这里插入图片描述
其中,初值为:
在这里插入图片描述
v为原点。

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

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

相关文章

opencv的RGB 颜色表

RGB&#xff08;255,23,140&#xff09;是光的三原色&#xff0c;也即是红绿蓝Red&#xff0c;Green&#xff0c;Blue&#xff0c;它们的最大值是255&#xff0c;相当于100%。 白色&#xff1a;rgb(255,255,255) 黑色&#xff1a;rgb(0,0,0) 红色&#xff1a;rgb(255,0,0) …

我的创作纪念日--码农阿豪

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

分支结构相关

1.if 语句 结构&#xff1a; if 条件语句&#xff1a; 代码块 小练习&#xff1a; 使用random.randint()函数随机生成一个1~100之间的整数&#xff0c;判断是否是偶数 import random n random.randint(1,100) print(n) if n % 2 0:print(str(n) "是偶数") 2.else语…

模拟原神圣遗物系统-小森设计项目,设计圣遗物(生之花,死之羽,时之沙,空之杯,理之冠)抽象类

分析圣遗物 在圣遗物系统&#xff0c;玩家操控的是圣遗物的部分 因此我们应该 物以类聚 人与群分把每个圣遗物的部分&#xff0c;抽象出来 拿 生之花&#xff0c;死之羽为例 若是抽象 类很好的扩展 添加冒险家的生之花 时候继承生之花 并且名称冒险者- 生之花 当然圣遗物包含…

返回给前端数据的封装

返回格式如下&#xff1a; { "code": 200/400, "msg": "成功"/"失败", "total": n, "data": [ {}&#xff0c;{}]} 1.在common中新增Result 类&#xff0c;代码如下 package com.xxx0523.common; import lombo…

【全网最全最详细】RabbitMQ面试题

一、说下RabbitMQ的架构大致是什么样的&#xff1f; RabbitMQ是一个开源的消息中间件&#xff0c;用于在应用程序之间传递消息。它实现了AMQP&#xff08;高级消息队列协议&#xff09;并支持其它消息传递协议&#xff0c;例如STOMP&#xff08;简单文本定向消息协议&#xff…

【机器学习】机器学习重要方法—— 半监督学习:理论、算法与实践

文章目录 引言第一章 半监督学习的基本概念1.1 什么是半监督学习1.2 半监督学习的优势 第二章 半监督学习的核心算法2.1 自训练&#xff08;Self-Training&#xff09;2.2 协同训练&#xff08;Co-Training&#xff09;2.3 图半监督学习&#xff08;Graph-Based Semi-Supervise…

蓝鹏测控公司全长直线度算法项目多部门现场组织验收

关键字:全场直线度算法,直线度测量仪,直线度检测,直线度测量设备, 6月18日上午&#xff0c;蓝鹏测控公司全长直线度算法项目顺利通过多部门现场验收。该项目由公司技术部、开发部、生产部等多个部门共同参与&#xff0c;旨在提高直线度测量精度&#xff0c;满足高精度制造领域需…

[SAP ABAP] 数据类型

1.基本数据类型 示例1 默认定义的基本数据类型是CHAR数据类型 输出结果: 示例2 STRING数据类型用于存储任何长度可变的字符串 输出结果: 示例3 DATE数据类型用于存储日期信息&#xff0c;并且可以存储8位数字 输出结果 提示Tips&#xff1a;日期和时间类型的变量可以直接进…

【数学建模】——【新手小白到国奖选手】——【学习路线】

专栏&#xff1a;数学建模学习笔记 目录 ​编辑 第一阶段&#xff1a;基础知识和工具 1.Python基础 1.学习内容 1.基本语法 2.函数和模块 3.面向对象编程 4.文件操作 2.推荐资源 书籍&#xff1a; 在线课程&#xff1a; 在线教程&#xff1a; 2.数学基础 1.学习内…

视频智能分析平台LntonAIServer安防监控视频平台行人入侵检测算法核心特点及其应用价值

LntonAIServer行人入侵检测算法是一种基于深度学习和计算机视觉技术的先进解决方案&#xff0c;旨在提高监控系统的智能化水平&#xff0c;有效预防未经授权的人员进入重要场所&#xff0c;保障安全生产和管理。以下是关于该算法的主要特点和应用的详细介绍&#xff1a; 核心特…

海外小米上架规则

一、应用创建 第1步&#xff1a;打开小米国际应用商店开发者站 &#xff0c;点击【分发】&#xff0c;登陆/注册开发者 1.1点击开发者站&#xff0c;点击【分发】 小米国际应用商店开发者站 地址&#xff1a;Mi Developer 1.2使用注册邮箱/手机号码/小米ID登录开发者账号 使…

【Python日志模块全面指南】:记录每一行代码的呼吸,掌握应用程序的脉搏

文章目录 &#x1f680;一、了解日志&#x1f308;二、日志作用&#x1f308;三、了解日志模块⭐四、日志级别&#x1f4a5;五、记录日志-基础❤️六、记录日志-处理器handler&#x1f3ac;七、记录日志-格式化记录☔八、记录日志-配置logger&#x1f44a;九、流程梳理 &#x…

AWR1843BOOST上的TM4C1294NCPDT是干啥用的?

摘要&#xff1a;AWR1843BOOST上面有2个体积较大的芯片&#xff0c;一片是雷达&#xff0c;另一片是什么呢&#xff1f; 答案&#xff1a;它就是XDS110仿真器。 有了它&#xff0c;就不用再买一个仿真器了。 从AWR1843BOOST的原理图中可以看到整个 BOOST板子上只有2个比较大的…

java环境变量配置以及“‘javac‘ 不是内部或外部命令”问题的解决方法(2024年6月姆级最新)

&#x1f600;前言 有很多小伙伴提问这个所以就单独出一个解决教程 java环境变量配置以及“‘javac’ 不是内部或外部命令”问题的解决方法&#xff08;2024年6月姆级最新&#xff09; 安装的话可以参考这个 java 安装和环境配置(2024-4月保姆级最新版) &#x1f3e0;个人主页…

计网课设-发送TCP数据包

一、效果展示 二、代码实现 import nmap import socket import tkinter as tk from tkinter import messagebox,Listbox from threading import Thread#获取自身IP&#xff0c;从而确定当前局域网范围 def get_ip_address():#创建了一个socket对象&#xff0c;socket.AF_INET表…

win10 安装PowerShell

总结: 直接下一步,下一步… 下载链接 https://download.csdn.net/download/qq_43071699/89462517

解读代理 IP差异:ISP 代理与住宅代理

独立IP作为跨境必备工具&#xff0c;代理类型五花八门&#xff0c;今天IPFoxy全球代理将为搭建科普&#xff1a;ISP代理与住宅代理在理论上与使用上的区别。代理充当用户和互联网之间的中介&#xff0c;提供各种功能以增强安全性、隐私性和可访问性。在众多代理类型中&#xff…

大模型应用开发实践:RAG与Agent

RAG planning是任务拆解的一些方法。 Agent RAG现在基本上推荐LangChain开发框架。而Agent目前没有一个通用的好的开发框架/范式。 学习路径

首个AI高考评测结果出炉,GPT-4o排名第二

近日&#xff0c;上海人工智能实验室利用其自主研发的“司南”评测体系OpenCompass&#xff0c;对国内外多个知名大模型进行了一场特殊的“高考”。这些来自阿里巴巴、智谱AI、Mistral等机构&#xff0c;以及OpenAI的GPT-4o等“考生”&#xff0c;接受了新课标I卷“语数外”的全…