/*** 王道书 P217 T02 + 拓展 :判断无向连通图是否有环** ①算法思想* 若是一棵树,首先是连通的,判断连通的方法:* 1° 如果只调用了一次Traverse里面的DFS()或者BFS(),说明是连通的。* 2° 统计顶点个数,如果经过一次遍历之后,涉及到的顶点个数和给的图G的顶点个数相等、*    且统计边数,如果涉及到的边数是(顶点的个数 - 1) * 2,*    则说明是一棵树。* 拓展:* 无向连通图,如果有环则一定不是树,无环则一定是树。** ②算法设计*/#include <stdio.h>
#include <iostream>
#include <cstdio>
#include <malloc.h>
#include <cstdlib>
#define MaxSize 20
#define INF 999999//王道书 P217 T02 判断无向图是否是一棵树(用邻接表表示)
//拓展:判断无向连通图是否有环(最后返回的true和false颠倒一下)
//如果是非连通图,那么就对几个子部分分别进行判断
struct ArcNode{int adjvex;struct ArcNode *next;int weight;
};
struct VNode{char value;struct ArcNode *first;
};
struct AdGraph{VNode vertices[MaxSize];int vexnum,arcnum;
};
void DFS(AdGraph G,int v,int &nodenum,int &edgenum,int *visited){//v是起点顶点的下标,对顶点数(nodenum)和边数(edgenum)进行修改,用&最后可以带回visited[v] = 1;nodenum++;ArcNode *p = G.vertices[v].first;while(p){//递归edgenum++;if(!visited[p -> adjvex])DFS(G,p -> adjvex,nodenum,edgenum,visited);p = p -> next;}
}
bool IsTree(AdGraph G){int visited[MaxSize];for (int i = 0; i < G.vexnum; ++i) {//初始化visited[i] = 0;}int nodenum = 0,edgenum = 0;DFS(G,0,nodenum,edgenum,visited);if(nodenum == G.vexnum && 2 * (G.vexnum - 1) == edgenum)//如果遍历一次之后,涉及到的顶点的个数=图G所有的顶点数//并且涉及到的边数 = (顶点数 - 1) * 2  (注:因为是在无向图中,所以所有的的边被遍历的2遍,所以要*2)return true;elsereturn false;
}

王道书 P217 T02 + 拓展 (判断无向连通图是否有环)相关推荐

  1. 王道书 P360 T03(计数排序)

    /*** 王道书 P360 T03 计数排序* 可以和王道书 P361 T05 比较思考一下,* T05是在比较时比较的元素两者都进行count++了,* 所以下一轮的时候就不用从a[0]开始了,减少 ...

  2. 【23考研】计算机408数据结构代码题强化阶段划重点(王道书)

    视频链接:[23考研]10分钟带你整理408数据结构强化阶段代码题复习重点 本篇只适合考408的同学,请自主命题的同学自觉右上角×掉 因为王道书为了照顾自主命题的同学,所以很多算法也给出了代码实现,实 ...

  3. 有符号拓展:signed-extending无符号拓展:unsigned-extending

    符号拓展 拓展意义 举个栗子 有符号拓展:signed-extending&无符号拓展:unsigned-extending 拓展意义 符号拓展的意义是产生位数拓展,数值不变的的结果.常见于不 ...

  4. 王道书 P335 T05

    /*** 王道书 P335 T05** ①算法思想* 使用快排的思想,low是每次枢轴的最终确定位置,* 从小到大排序,如果low + 1 等于 k 的话,那么 low + 1 位置的元素就是这个序列 ...

  5. 笔面集锦:判断单链表里面是否有环及相关扩展题

    源于网络 1.如何判断单链表里面是否有环? 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环 ...

  6. 用python 判断一个单链表是否有环

    文章目录 用python 判断一个单链表是否有环. 第二次做DAY20201130 [141. 环形链表](https://leetcode-cn.com/problems/linked-list-c ...

  7. Java实现无向连通图中的“割点”问题

    直接上代码,详细请见注释或者下方留言. package cut.point;import java.util.Scanner; import java.util.Stack;/*** "轰炸 ...

  8. 算法分析与设计实践 - 作业12 - 给定无向连通图G和m种颜色

    1.问题 给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色.如果要求G的每条边的两个顶点着不同颜色.给出所有可能的着色方案:如果不存在,则回答"NO". 2. ...

  9. c++生成随机平面无向连通图

    c++生成随机平面无向连通图 算法描述 关键代码 运行结果 算法不足 前言: 为了检验路径搜索算法的优劣,需要用大量的图的数据来运行对应的算法,例如深度优先搜搜.宽度优先搜索.迪杰斯特拉算法等等,而对 ...

最新文章

  1. clustalw序列比对_如何做出漂亮的序列比对图——ENDscript/ESPript
  2. iOS 查询数组中的对象
  3. 为不同的屏幕尺寸提供不同的图片(为那些没有必要下载全尺寸大图的设备节省带宽)...
  4. pmml_再访PMML
  5. JQuery 基础:4.JQuery对象
  6. data mining 1 concept
  7. 线程同步(互斥锁与信号量的作用与区别)
  8. UOJ 30 【CF Round #278】Tourists
  9. 苹果mac系统隐藏文件的显示和取消显示
  10. 怎样恢复误删计算机管理员,win10管理员账号误删只有普通权限怎么恢复
  11. 聊聊directory traversal attack
  12. 纯css实现乌云密布的天气图标
  13. 飞机大战之六:敌机爆炸(碰撞检测)
  14. 国家为什么会失败-读书笔记
  15. 写作必备文献搜索网大全
  16. Python销售管理系统
  17. 北航计算机学院保研占比,许明杰:CSP助力保研入北航
  18. 如何防止域名被劫持?网站域名被劫持怎么办?怎么处理?
  19. 智慧路灯杆系统环境监测 5G智能灯杆网关的功能有哪些
  20. 基于Greenplum构建下一代数据分析平台

热门文章

  1. 开源算法介绍(Arcane Style)「将肖像转化成双城之战风格的漫画脸」
  2. 绩效考核的4个关键流程
  3. 209 长度最小的子数组(双指针)
  4. 外包没有资格 WFH?
  5. 酷毙了,Python“元宇宙”实现赛博朋克数据可视化
  6. Java实现 LeetCode 519 随机翻转矩阵
  7. 抖音直播数据分析,通过千场直播深入解读直播间自然流量转化率
  8. 用Python Script做PS:PIL多图合并DIY桌面之纪伯伦小诗
  9. 这次摄影师真输给了姑娘们的自拍照...
  10. 程序员英语语法学习(1)句子成分有八个,你却只知主谓宾?