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.mzph.cn/diannao/31067.shtml

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

相关文章

Sping源码(九)—— Bean的初始化(非懒加载)— Bean的创建方式(factoryMethod)

序言 前面文章介绍了在Spring中多种创建Bean实例的方式&#xff0c;包括采用FactoryBean的方式创建对象、使用反射创建对象、自定义BeanFactoryPostProcessor。 这篇文章继续介绍Spring中创建Bean的形式之一——factoryMethod。方法用的不多&#xff0c;感兴趣可以当扩展了解。…

【Git】--Part3--远程操作 配置 标签管理

1. 远程仓库 Git 是分布式版本控制系统&#xff0c;同⼀个 Git 仓库&#xff0c;可以分布到不同的机器上。怎么分布呢&#xff1f; 最早&#xff0c;肯定只有⼀台机器有⼀个原始版本库&#xff0c;此后&#xff0c;别的机器可以 “克隆” 这个原始版本库&#xff0c;⽽且每台机…

JEnv-for-Windows 详细使用

管理员执行jenv.bat文件 执行正常, 接下来就是按照官网的命令就行了 文件下载地址 https://download.csdn.net/download/qq_43071699/89462664 JEnv 是一个强大的Java版本管理工具&#xff0c;允许开发者在多个Java版本之间轻松切换。以下是一些常用的JEnv命令&#xff0c;这…

118 杨辉三角

题目 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 解析 就是模拟法&#xff0c;没有什么特殊的…

一文教你在centos 7.9中安装mysql5.7(超级详细)

##red## &#x1f534; 大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff0c;雄雄的小课堂。 一、前言 每当新来一个服务器之后&#xff0c;习惯性的都会安装一个宝塔面板&#xff0c;不为别的&#xff0c;就为了装环境方便点儿&#xff0c;比如常用的jdk,m…

C++学习(23)

#学习自用# union 共用体和结构体相似&#xff0c;但是共用体一次只能占用一个成员的内存&#xff0c;所有成员共用同一地址。 #include<iostream> using namespace std; union A {int int_val;float float_val; }a; int main() {a.float_val 2.0f;cout << a.f…

【免费API推荐】:解锁无限创意,让您的应用更具竞争力(8)

热门高效的免费实用类API是当今开发者们追逐的宝藏。这些API提供了各种热门功能和服务&#xff0c;能够帮助开发者轻松地为应用程序增添实用性和吸引力。无论是人脸识别、自然语言处理、机器学习还是图像处理&#xff0c;这些热门高效的免费API提供了强大的功能和高效的性能&am…

vuejs3+elementPlus后台管理系统,左侧菜单栏制作、跳转、默认激活菜单

制作&#xff1a; <script setup> import {useUserStore} from "/stores/userStore.js"; import {ref} from "vue";const userStore useUserStore() //默认激活菜单 const defaultMenu ref(/home) </script><template><el-menuact…

Redis 主从复制+哨兵+集群

Redis复制 查看docker 容器 ip docker inspect 容器id | grep IPAddressdocker inspect -f{{.Name}} {{.NetworkSettings.IPAddress}} $(docker ps -aq)修改配置文件 初始配置文件见 > redis.conf 远程访问 bind 0.0.0.0protected-mode no 主机设置 replicaof 172.17.0.…

Vue66-vue-默认插槽

一、默认插槽需求 1-1、原本的写法&#xff1a; 在每个category组件中用v-show来做条件渲染&#xff0c;但是不方便&#xff01; 1-2、默认插槽 img标签&#xff0c;ul标签&#xff0c;video标签&#xff0c;都是在app组件中完成解析之后&#xff0c;塞到category组件中的&…

汉朔科技IPO:引领智慧零售新时代,推动行业数字化转型

汉朔科技是一家以物联网无线通信技术为核心的高新技术企业&#xff0c;围绕零售门店数字化领域&#xff0c;构建了以电子价签系统、SaaS云平台服务等软硬件产品及服务为核心的业务体系。凭借公司技术实力、战略布局和多年行业积累&#xff0c;汉朔科技成为了零售门店数字化解决…

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

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

Redis分片集群搭建

主从模式可以解决高可用、高并发读的问题。但依然有两个问题没有解决&#xff1a; 海量数据存储高并发写 要解决这两个问题就需要用到分片集群了。分片的意思&#xff0c;就是把数据拆分存储到不同节点&#xff0c;这样整个集群的存储数据量就更大了。 Redis分片集群的结构如…

LVGL使用GUI Guider配置STM32界面详细笔记教程

0、说明 接着前面几篇博客对LVGL的使用和介绍&#xff0c;这篇博客主要是使用和介绍快速配置LVGL图形界面编程的工具&#xff0c;GUI Guider。本文使用的工程代码&#xff0c;均是基于前几篇博客的基础上的&#xff0c;如需下载已配置好的LVGL-MCU工程环境&#xff0c;可通过如…

【R语言】对一个Plot绘制多个图,并且每个图单元也包含多个图

以一个Plot绘制五行六列共30个图&#xff0c;然后每30个图单元包含两个图为例&#xff1a; 如下图所示&#xff1a; 代码如下&#xff1a; for (i in 1:(5*6)) {create_subplots <- function() {library(ggplot2)library(dplyr)library(tidyr)# 创建一个随机的数据框simula…

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

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

【服务器04】之【Navicat连接阿里云】

通过前三篇文章&#xff0c;现在我们测试可以连接数据库了 点开桌面的 接下找来的主机 地址在以下 登录阿里云 登陆账号后 点击控制台 输入RDS 弹出新页面&#xff0c;并点击运行中的 1 点管理 复制外网地址 鼠标靠近就会出现复制图标 用户名 和 密码 是注册阿里云的高权限账…

对错问题:凡事没有绝对的对与错,要看义所在、良知所在

孔子说&#xff1a;君子对于天下所发生的很多事&#xff0c;如评判政策变动、战争等&#xff0c;没有绝对的对&#xff0c;也没有绝对的错&#xff0c;一切要看事情本身是否符合“ 义 ”。

实验2:RIPv2的配置

由于RIPv1是有类别的路由协议,路由更新不携带子网信息,不支持不连续子网、VLSM、手工汇总和验证等&#xff0c;本书重点讨论RIPv2。 1、实验目的 通过本实验可以掌握&#xff1a; RIPv1和 RIPv2的区别。在路由器上启动RIPv2路由进程。激活参与RIPv2路由协议的接口。auto-sum…

SpringSecurity实战入门——认证

项目代码 gson/spring-security-demo 简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity来做安全框架。小项目有Shiro的比较多,因为相比…