c++数据结构-图(详解附算法代码,一看就懂)

图(Graph)是一种复杂的非线性结构,它可以描述数据间的关系,被广泛使用。

图 G 由两个集合 V 和 E 组成,记为 。V是顶点的有穷非空集合,E是边的集合。通常,也将 G 的顶点集和边集表示为 V(G) 和 E(G)。其中,E(G)可以是空集,如果它是空集,那么 G 只有顶点。

图的定义和概念
有向图:边上有箭头,只能从箭头的引出的结点到被指向的结点,不能逆着箭头走。

无向图:边上无箭头,可以随便走。

结点的度:无向图中与结点相连的边的数量。

结点的入度:有向图中以结点为终点的边的数量。

结点的出度:有向图中以结点为起点的边的数量。

权值:可以理解为边的长度。

连通:如果结点 U 和 V 之间通过若干个边和结点能从 U 到达 V,则称 U 和 V 连通。

回路:起点和终点相同的路径。

完全图:一个 n 阶的完全无向图含有 n*(n-1)/2 条边,一个 n 阶的完全有向图含有 n*(n-1) 条边。

稠密图:一个边数接近完全图的图。

稀疏图:一个边数远少于完全图的图。

强连通分量:有向图中任意两点都连通的最大子图。特殊的,一个点也算一个强连通分量。

图的存储结构
二维数组邻接矩阵存储

定义 int G[101][101];

G[i][j] 的值,表示点 i 到点 j 的边的权值,定义如下,

G[i][j]{1或权值,0或无穷

深度优先和广度优先遍历
从图中某一顶点出发,系统的访问图中所有顶点,并且每个顶点只被访问一次,这种操作叫做图的遍历。为了不重复访问,我们使用一个数组 visit[] ,被访问过就变成 true,反之 false。这两种方法(广度和深度优先遍历)时间复杂度都是 O(n*n)。

深度优先遍历
深度优先遍历和深度优先搜索相似,它是先访问一个点,再访问与这个点相连的所有点,当这个点所有相连的点访问完,再退回下一个点。

广度优先遍历
它基本不用,和广度优先搜索相似,和深度优先遍历相似,这里不讲解。

一笔画问题
如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果起点和终点相同,则这个路径叫欧拉回路。

奇点是与一个点相连的边数是奇数的点。我们有如下两个定理:

(1)存在欧拉路的条件:图是连通的,且有且只有两个奇点。

(2)存在欧拉回路的条件:图是联通的,且有0个奇点。

#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int p[N],q[N];
int n,m;
int sum=0,flag=0;
int find(int x)
{if(p[x]!=x) p[x]=find(p[x]);return p[x];
}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++) p[i]=i;while(m--){int a,b;cin>>a>>b;q[a]++;//由于是无向图需要把所有边加上q[b]++;a=find(a),b=find(b);if(a!=b) p[a]=b;}for(int i=1;i<=n;i++) if(p[i]==i) sum++;if(sum==1){for(int i=1;i<=n;i++){if(q[i]%2!=0)flag++;}}else {cout<<"N"<<endl;return 0;}if(flag==0 || flag==2) cout<<"Y"<<endl;//一笔画的规律(奇数点个数为0或者2)else cout<<"N"<<endl;return 0;
}

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

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

相关文章

sentinel-dashborard下发流控规则未生效排查解决

Sentinel简介 Sentinel是阿里巴巴开源的一个流量控制组件&#xff0c;它以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。Sentinel的核心思想是&#xff1a;通过动态设置的规则&#xff0c;对进入系统的流量进行控制&#xff0c;…

C#知识|将选中的账号信息展示到控制台(小示例)

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 上篇学习了控件事件的统一关联&#xff0c; 本篇通过实例练习继续学习事件统一处理中Tag数据获取、对象的封装及泛型集合List的综合运用。 01 实现功能 在上篇的基础上实现&#xff0c;点击选中喜欢的账号&#xff0…

如何将Hyper-V转VMware?反之亦可

为何要在Hyper-V和VMware之间进行转换呢&#xff1f; 尽管VMware和Microsoft Hyper-V都是当前流行的一类虚拟机监控程序&#xff0c;但它们并不相互兼容。VMware产品使用VMDK格式创建虚拟磁盘&#xff0c;而Hyper-V则使用VHD或VHDX格式创建虚拟磁盘。 有时您可能需要进行这种转…

一文详解eHR系统?有哪些功能?怎么选?

一、什么是eHR系统&#xff1f; eHR是Electronic Human Resource电子人力资源管理的缩写&#xff0c;eHR系统起源于上世纪六十年代外资企业&#xff0c;在20世纪末开始进入中国企业中&#xff0c;沿用至今。eHR主要通过集中式的人事核心信息库、自动化的信息处理、员工自助服务…

Edge视频增强功能

edge://flags/#edge-video-super-resolution 搜索Video查找 Microsoft Video Super Resolution 设置为Enabled

凸优化理论学习一|最优化及凸集的基本概念

文章目录 一、优化问题&#xff08;一&#xff09;数学优化&#xff08;二&#xff09;凸优化 二、凸集&#xff08;一&#xff09;一些标准凸集&#xff08;二&#xff09;保留凸性的运算&#xff08;三&#xff09;正常锥和广义不等式&#xff08;四&#xff09;分离和支撑超…

计数问题C++

题目&#xff1a; 思路&#xff1a; 1~n之间进行循环遍历&#xff0c;如果i不等于0继续循环&#xff0c;然后求出i的个位数与十位数&#xff0c;如果个位数为要查找的特定数字&#xff0c;计时器就1. 代码&#xff1a; #include<iostream> using namespace std; int n,x…

403forbidden

今早上手机打开某游戏论坛时报了403forbidden&#xff0c;挺纳闷的&#xff0c;都是输的一样的网址&#xff0c;咋今儿个就不行了。 后来看到有人说加个www就行了&#xff0c;试了下真行&#xff0c;就去了解了下什么是403forbidden&#xff0c;先贴定义 当你尝试访问一个网站…

短视频收益分成一览表​​​​​​​​​​​​​​​​,视频号怎么做有收益的

今日为大家揭秘一个热门视频号的操作技巧。很多人都已经操作这类账号&#xff0c;并从中获益。视频号目前是市场上非常热门的平台之一&#xff0c;流量之大令人惊叹&#xff0c;先不提那些私域营销的巨大优势&#xff0c;仅从创作分成计划角度来看&#xff0c;已有许多人每天能…

react18【系列实用教程】useEffect —— 副作用操作 (2024最新版)

什么是副作用操作&#xff1f; useEffect 用于编写由渲染本身引起的对接组件外部的操作&#xff08;官方称呼为&#xff1a;副作用操作&#xff09; 以下情况会触发页面渲染 初次加载页面&#xff08;组的挂载&#xff09;响应式变量发生变化&#xff0c;触发页面根据新值重新…

死锁调试技巧:工作线程和用户界面线程

有人碰到了一个死锁问题&#xff0c;找到我们想请我们看看&#xff0c;这个是关于应用程序用户界面相关的死锁问题。 我也不清楚他为什么会找上我们&#xff0c;可能是因为我们经常会和窗口管理器打交道吧。 下面&#xff0c;我们来看看死锁的两个线程。 >> 请移步至 …

软件工程经济学--期末复习资料

软件工程经济学--期末复习资料 前言第一章 绪论第二章 软件工程经济学基础第三章 软件的成本管理与定价分析第四章 软件工程项目评价方法与经济效果评价第五章 软件生产函数、效益分析及不确定性分析第六章 软件工程项目进度计划的制定结尾总结 前言 软件工程经济学&#xff0…

Java 开发 框架安全:Spring 漏洞序列.(CVE-2022-22965)

什么叫 Spring 框架. Spring 框架是一个用于构建企业级应用程序的开源框架。它提供了一种全面的编程和配置模型&#xff0c;可以简化应用程序的开发过程。Spring 框架的核心特性包括依赖注入&#xff08;Dependency Injection&#xff09;、面向切面编程&#xff08;Aspect-Or…

计算机服务器中了devicdata勒索病毒如何解密,devicdata勒索病毒解密恢复工具

在网络技术飞速发展的时代&#xff0c;有效地利用网络开展各项工作业务&#xff0c;能够大大提升企业的生产运行效率&#xff0c;改善企业的发展运营模式&#xff0c;但如果网络利用不好就会给企业的数据安全带来严重威胁。近日&#xff0c;云天数据恢复中心接到很多企业的求助…

centos7.9升级4.19内核

centos默认的内核版本是3.10 通过命令 uname -a 输出系统的详细信息 在部署k8s集群时使用默认的3.10版本的内核&#xff0c;容易出各种奇奇怪怪的问题、可以理解为docker和k8s与该内核版本不兼容&#xff0c;所以在部署k8s集群时&#xff0c;务必要升级内核&#xff0c;这里…

Ant Design Vue的国际化设置(全局中文设置)

在使用 Ant Design Vue 进行国际化设置时&#xff0c;可以通过找到App.vue文件 添加引用 import { ConfigProvider } from ant-design-vue; import zhCN from ant-design-vue/es/locale/zh_CN; import dayjs from dayjs; import dayjs/locale/zh-cn; dayjs.locale(zh-cn);//日…

ESP32重要库示例详解(一):EEPROM之Preferences库

1. 了解EEPROM 在嵌入式系统开发中&#xff0c;断电后晚能存储少量数据是常见需求。EEPROM&#xff08;Electrically Erasable Programmable Read-Only Memory&#xff09;是一种非易失性存储器&#xff0c;即使断电数据也不会丢失。ESP32的EEPROM模拟功能利用闪存空间&#x…

移动硬盘加了PD充电口给设备供电:未来存储与供电的完美结合

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 一、引言 随着科技的飞速发展&#xff0c;电子设备在人们的日常生活中扮演着越来越重要的角色。与此同时&#xff0c;设备间的互联互通和供电方式的便捷性也成为了用户关注的焦点。移动硬盘&#xff0c;作…

Node.js安装与配置环境 v20.13.1(LTS)

1 下载 Node.js — Run JavaScript Everywhere LTS -- long-term support&#xff0c;长期维护版本 如果要下载其他版本在download里选择下载 2 安装 一路点击next&#xff0c;默认安装路径C:\Program Files\nodejs 3 环境变量配置 1&#xff09;Path环境变量增加nodejs安装…

Prometheus 监控平台组件深度讲解

Prometheus 的重要性和流行度已经无需多言。直入主题&#xff0c;本文对 Prometheus 监控平台的各个组件做深度讲解&#xff0c;希望能帮助读者更好地理解 Prometheus。 监控系统的核心逻辑 对于一套监控系统而言&#xff0c;核心就是采集数据并存储&#xff0c;然后做告警判…