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

完全图与强连通图的那些坑

文章目录

  • 前言
  • 一些概念
  • 关于题目的解释
  • 题目变型
  • 补充两个图例
  • 总结

前言

图这个数据结构相比队列、栈、树来说算是复杂多了,关于图的问题也多如牛毛,先来看一下常见的问题:

若无向图 G 中含7个顶点,要想保证图 G 在任何情况下都是连通的,则需要的边数最少是几条?

回答这种问题一定要注意细节,找到关键的点,不然一定会掉到坑里的。这个题关键点有以下几个:

  • 7个顶点
  • 任何条件下连通
  • 最少几条边

其中第1点和第3点不容易出错,比较容易出现问题的是第2点,要想保证任何条件下连通,意思给定边数以后无论怎么连都能通?

先说下答案是16,至于为什么,我们后面先复习一下图相关的概念再慢慢解释,因为此刻的我连什么是强联通图都忘了~

一些概念

  • :是由顶点V集和边E集构成,边表示了与之相连的两点间的关系,因此图可以表示成G = (V, E)
  • 有向图:是指图中的两个顶点从A到B和从B到A的含义是不同的,我们认为两点的关系是有方向的,则称其为有向图
  • 无向图:是指两点间的连接线无方向无关,这种图叫做无向图
  • 连通性:从图中一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通着的
  • 连通图:在无向图中,如果任意两个顶点之间都能够连通,则称此无向图为连通图
  • 完全图:在无向图中,如果任意两个顶点之间都边直接相连,则称此无向图为完全图
  • 连通分量:若无向图不是连通图,但图中存在某个子图符合连通图的性质,则称该子图为连通分量
  • 强连通图:在有向图中,若任意两个顶点之间包含至少来回两条通路,则称此有向图为强连通图
  • 有向完全图:在有向图中,如果任意两个顶点之间都有相反的两条弧直接相连,则称此有向图为有向完全图
  • 强连通分量:若有向图不是强连通图,但图中存在某个子图符合强连通图的性质,则称该子图为强连通分量

关于题目的解释

这是一个无向图,要想在任何情况下都连通,那考虑极端情况就是孤立一个顶点,让尽可能多的边连接剩余的顶点,那会构成一个 n-1 个顶点的完全图,然后再考虑加一条边把剩下的孤立顶点连起来,这样得到的边数是 N = 5+4+3+2+1 + 1 = 16,用组合数表示就是

C n − 1 2 + 1 = ( n − 1 ) ∗ ( n − 2 ) / 2 + 1 C^2_{n-1} + 1= (n-1) * (n-2) / 2 + 1 Cn12+1=(n1)(n2)/2+1

题目变型

  • 若无向图 G 中含7个顶点,要想保证图 G 在是连通的,至少需要几条边?

    答案6条,即 (n-1)

  • 一个包含7个顶点的无向图 G 为完全图,那么它共有几条边?

    答案21条,即 n * (n-1) / 2

  • 若有向图 G 中含7个顶点,要想保证图 G 在是强连通的,至少需要几条弧?

    答案7条,即 n,也就是形成一个环

  • 一个包含7个顶点的有向图 G 为完全图,那么它共有几条弧?

    答案42条,即 n * (n-1)

补充两个图例

  • 完全图,特点是任何两个顶点都有直接的边相连
A
B
C
D
E
  • 强连通图,任意两点间都有路径可达
A
B
C
D
E
F

总结

  • 解答关于图的问题可以从概念入手,更要注意题目中至多、至少、任何等字眼
  • 弄清楚连通图、完全图、连通分量、强联通图、强连通分量等概念,迷糊的时候可以画一画
  • 使用mermaid语法画的图确实不怎么好看,不过它强在了描述性的语言

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

那些看似漫不经心的成功,其实都是蓄谋已久;那些你以为的驾轻就熟,其实都是有备而来。一个人越活越好的样子应该是不沮当下,不弃未来。你要相信,所有的事与愿违或许都是惊喜的铺垫,所有的坚持不懈终将得到岁月的奖赏~

相关文章:

  • linux环境下恢复rm误删的文件
  • 记一次使用Valgrind查找解决内存问题的玄幻旅程
  • 网络工具nc的常见功能和用法
  • git常用配置——git show/diff tab 显示宽度
  • Windows设置防火墙允许指定应用正常使用网络
  • 2021年终总结——脚踏实地,为下一次腾飞积蓄力量
  • 通过WindowsStore安装QuickLook小工具方便文件预览
  • linux环境下随时照看服务器进程的ps和top命令
  • 简单梳理下git的使用感受,思考git中最重要的是什么
  • 总结下各种常见树形结构的定义及特点(二叉树、AVL树、红黑树、Trie树、B树、B+树)
  • epoll的LT模式(水平触发)和ET模式(边沿触发)
  • C++可变参数模板的展开方式
  • 恶搞一下std::forward函数
  • C++11新式洗牌std::shuffle与老式洗牌函数std::random_shuffle的区别
  • linux环境下常用的网络命令ping、telnet、traceroute、tcpdump
  • python3.6+scrapy+mysql 爬虫实战
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • gcc介绍及安装
  • JavaScript HTML DOM
  • js ES6 求数组的交集,并集,还有差集
  • Laravel 中的一个后期静态绑定
  • node-glob通配符
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • React-Native - 收藏集 - 掘金
  • spring boot 整合mybatis 无法输出sql的问题
  • Web设计流程优化:网页效果图设计新思路
  • Xmanager 远程桌面 CentOS 7
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何进阶一名有竞争力的程序员?
  • 入门级的git使用指北
  • 为视图添加丝滑的水波纹
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 通过调用文摘列表API获取文摘
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • $.ajax中的eval及dataType
  • %check_box% in rails :coditions={:has_many , :through}
  • (06)金属布线——为半导体注入生命的连接
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (转)Windows2003安全设置/维护
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .Net Core和.Net Standard直观理解
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET MVC第五章、模型绑定获取表单数据
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .Net6 Api Swagger配置
  • .ui文件相关
  • ??javascript里的变量问题