思路:判断一个无向图是否是一棵树,只需要判断该图是否是一个包含n个顶点的连通子图且边数为n-1,只要这两个条件都满足,那么就是一棵树。

因此我们可以采用深度遍历,若图连通,那么只要一次深度遍历就可以遍历出所有的顶点,于是只需要调用一次dfs,并设置两个计数器记录边和顶点的数目即可。


编程注意事项:

1.邻接表在存储无向图的时, 每一条边都存储了两次,所以计数器中得到的是两边的边数

2.函数的形式参数要是引用

void DFS_my(ALGraph &G, int v, int &count_vec, int &count_arc, vector<int> &visited) {visited[v] = true;count_vec++;for (ArcNode* p = G.vertices[v].first; p; p = p->next) {count_arc++;if (!visited[p->adjvex]) DFS_my(G, p->adjvex, count_vec, count_arc, visited);}
}bool isTree(ALGraph G) {vector<int> visited(G.vecnum, false);int count_vec = 0;int count_arc = 0;DFS_my(G, 0, count_vec, count_arc,visited);//因为无向图在深度遍历的时候,每条边都计算了两次if (count_vec == G.vecnum&&count_arc == 2 * (G.vecnum - 1)) return true;else return false;
}inr main

【数据结构】-图-判断一个无向图是否是一棵树相关推荐

  1. HDU1878(判断一个无向图是否存在欧拉回路)

    1.欧拉回路:定义:经过图(有向图或无向图)中每条边一次且仅一次并且行遍图中每个顶点的回路( 闭合的欧拉路径,即一个环,保证每条边都通过且仅通过一次). 2.问题1:判断一个无向图是否有欧拉回路的充要 ...

  2. QQ图判断一个分布是否为正态分布

    一.正态QQ图的原理 QQ图通过把测试样本数据的分位数与已知分布相比较,从而来检验数据的分布情况.[1] 分位数:亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点.常用的有一个分位数叫 ...

  3. 【数据结构】判断一个单链表中各结点的值是否有序

    count记录的是单链表的总长 count1记录的是升序的结点的个数 count2记录的是降序的结点的个数 如果count1或者count2等于count,那么就说明该序列是升序或者降序的. 稍加改进 ...

  4. 数据结构——图-有向图和无向图的邻接表基础

    #include <stdio.h> #include <stdlib.h> #define VertexType char //顶点的数据类型(char) #define V ...

  5. 利用并查集判断一个无向图是否成树

    hdu 1272 利用并查集方法,找到各点的根节点. 几点注意: 一.树:1.无环 2.根节点入度为0,其余入度为1 判断依据: 1.若两个点的根节点相同(这两个点是父子关系),则形成环. 2.若所有 ...

  6. 数据结构--链表--判断一个字符串是否为回文串(单向链表,双向链表)

    回文串为首尾对称的字符串: 如a,aba,abba等 单链表思路 1.将字符读入链表 2.找到链表中点 3.将链表从中点断开成2条,将后半条反转 4.比较两条链表是否相等(比较次数以少的为准(长度为奇 ...

  7. 2020考研-王道数据结构-图-图的遍历

    说在开头 某些语法采用的是c11标准. 博客中中的代码均为可执行程序,以函数的形式给出,最后所有的程序会在博客完结后上传到CSDN. 头文件定义 #include <iostream> # ...

  8. 图11——判断图中是否为一棵树

    编写算法,判断一个无向图是否是一颗树. [分析] 一个无向图G是一棵树的条件为:G必须是无回路的连通图或n-1条边的连通图,这里我们采用后者作为判断条件.例如下图所示: 上面的无向图就是一棵树,它有6 ...

  9. 数据结构 图 思考题2

    全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案汇总 题目1:若有个顶点.条边,DFS的时间复杂度是多少? (该题对图的DFS遍历和存储方式有很好的理解作用) 当采用邻 ...

最新文章

  1. Linq-ToList与ToArray
  2. ZOJ 1610 Count the Colors 【线段树】
  3. django 通过数据库表名获取app名
  4. linux mysql root登录_linux下 root 登录 MySQL 报错的问题
  5. SAP Spartacus RouteEvent,如何从localhost跳转到其他路由路径的
  6. sql两个列值以下划线拼接得到一个新的列_面试必备sql知识点——MySQL基础
  7. HDU 2154:跳舞毯
  8. rvm,ruby的安装
  9. vb mysql数据库连接,VB连接Mysql数据库
  10. mysql rm-rf_rm-rf误操作的恢复过程
  11. 3乘3魔方第四步_【三阶魔方 - 初学】LBL第四步:顶层朝向
  12. 邮件服务器 二级域名,hMailServer+Roundcube+APMServ+希网二级域名+ADSL搭建邮件服务器...
  13. 仓库如何盘点?使用盘点机盘点有什么好处?仓库盘点方法?
  14. STM32 无法使用IAR下载程序问题
  15. UVM 中的消息机制
  16. charles(抓包神器)
  17. BUUCTF-web [极客大挑战 2019]PHP1 之 反序列化漏洞
  18. JetpackCompose从入门到实战学习笔记2——Modifier的简单使用
  19. win10禁止计算机进入休眠,Win10怎么关闭系统休眠 Win10关闭系统休眠方法
  20. springboot整合elasticsearch

热门文章

  1. dell使用SUU升级所有固件
  2. html怎么去掉下拉条,如何清除下拉列表中的边框:CSS
  3. Dart语法篇之面向对象继承和Mixins(六)
  4. 关于使用nodejs搭建微信小程序支付接口
  5. nginx的配置文件中的server里面localhost后面的~什么意思
  6. ITK学习笔记(五) ITK计算质心
  7. Kubernets 安装dashboard
  8. 对抖音流量明星主页全部视频信息进行抓取
  9. python中的repr_repr,python中的repr
  10. 防火墙之SNAT和DNAT