有关图的几个经典问题

1、判断一个有向图是否有环
       1、深度优先
       2、拓扑排序
拓扑排序过程如下图

Selection_083.png
2、4个顶点的无向完全图,一共有多少棵生成树?
       4个顶点无向完全图共有C(2,4) = 6 条边,生成树有 4 - 1 = 3 条边,因此共有 C(3,6)棵生成树

3、n个节点的二叉树数目

4、无向图G = (V,E)含有7个顶点,要保证图G在任何情况下都是连通的,那么需要的最小边数是?
方法:任何情况下都是连通的,考虑极端情况,即图G的6个顶点构成完全无向图,再加上一条边链接该无向图和剩余那个顶点即构成了一个连通图。因此,最少边数 = 6 × 5 / 2 + 1 = 16 
考虑:若边数n小于或等于15的时候,可以使这n条边仅连接图G中某6个顶点,从而导致第7个顶点被孤立,不连通(不满足任何情况

5、一个含有28条边的非连通无向图至少有多少个顶点?
用上题的思路,考察最少多少个个顶点,则考虑由一个完全图和一个顶点构成。因此完全图设需要n个节点,那么n×(n-1)/ 2 = 28,得 n = 8,因此至少有 8 + 1 = 9个顶点。

6、如果具有n个顶点的图是一个环,则它有多少棵生成树?
共有n条边,去掉任意一条边都是生成树,于是有n种情况。

7、若一个具有n个顶点,e条边的无向图是一个森林,则该森林必有多少棵树?
设森林中有x棵树,把每棵树根连起来(需要用 x-1 条边连接)构成一棵新的树,也满足树的性质,因此有
连接后边的数目为 n - 1 = x - 1 + e,所以 x = n - e

8、对于连通无向图,边至少构成一棵树的情形; 对于强连通有向图,边最少构成一个环的情形。

9、一些图的概念
(1连通在无向图中,若从顶点v到顶点w有路径存在,则称v和w是连通的。若图G中任意两顶点都是连通的,那么图G为连通图,否则称为非连通图。
(2连通分量无向图中的极大连通子图称为连通分量。
(3强连通:这属于有向图的概念。若从顶点v到顶点w和从顶点w到顶点v之间都有路径,则称这两个顶点是强连通的。若图中任意两顶点都是强连通的,那么图G为强连通图。
(4)强连通分量:有向图中的极大强连通子图称为有向图的强连通分量。
  • 13
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
内容简介 本书以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 本书结构清晰,讲解透彻,是各高校相关专业C语言课程很好的教学参考书,也是各层次C程序员的优秀实践指南。 全球C语言程序员集体智慧的结晶;Amazon全五星书;权威解答495个最常遇到的C语言问题。C是一门简洁精妙的语言,掌握基本语法容易,真正能够自如运用,就不那么简单了。你难免会遇到各种各样的问题,有些可能让你百思不得其解,甚至翻遍书馆,也找不到问题的答案。《你必须知道的495个C语言问题》的出版填补了这一空白。许多知识点的阐述都是其他资料中所没有的,弥足珍贵。涵盖C99标准。 第1章 声明和初始化 C语言的声明语法本身实际上就是一种小的编程语言。一个声明包含如下几个部分(但是并非都必不可少):存储类型、基本类型、类型限定词和最终的声明符(也可能包含初始化列表)。每个声明符不仅声明一个新的标识符,同时也表明标识符是数组、指针、函数还是其他任意的复杂组合。基本的思想是让声明符模仿标识符的最终用法。(问题1.21将会更加详细地讨论这种“声明模仿使用”的关系!)  基本类型  让一些程序员惊奇的是,尽管C语言是一种相当低级的语言,但它的类型体系仍然略显抽象。语言本身并没有精确定义基本类型的大小和表示法。  问:我该如何决定使用哪种整数类型?  答:如果可能用到很大的数值(大于32 767或小于一32 767),就使用lon9型。否则,如果空间很重要(例如有很大的数组或很多的结构),就使用short型。除此之外,就用int型。如果定义明确的溢出特征很重要而负值无关紧要,或者希望在操作二进制位和字节时避免符号扩展的问题,请使用对应的unsigned类型。(但是,在表达式中混用有符号和无符号值的时候,要特别注意。参见问题3.21。)尽管字符类型(尤其是unsigned char型)可以当成“小”整数使用,但这样做有时候很麻烦,不值得。编译器需要生成额外的代码来进行char型和int型之间的转换(导致目标代码量增大),而且不可预知的符号扩展也会带来一堆麻烦。(使用unsigned char会有所帮助。类似的问题参见问题12.1。)在决定使用float型还是double型时也有类似的空间/时间权衡。(很多编译器在表达式求值的时候仍然把所有的float型转换为double型进行运算)。但如果一个变量的地址确定且必须为特定的类型时,以上规则就不再适用。很多时候,人们错误地认为C语言类型的大小都有精确的定义。事实上,能够确保的只有如下几点:  …… 目录第1章 声明和初始化 第2章 结构、联合和枚举第3章 表达式第4章 指针第5章 空指针第6章 数组和指针第7章 内存分配 第8章 字符和字符串 第9章 布尔表达式和变量第10章 C预处理器第11章 ANSI/ISO标准C 第12章 标准输入输出库第13章 库函数第14章 浮点运算第15章 可变参数列表第16章 奇怪的问题第17章 风格第18章 工具和资源第19章 系统依赖第20章 杂项术语表 参考文献 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值