王道书 P217 T02 + 拓展 (判断无向连通图是否有环)
/*** 王道书 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 + 拓展 (判断无向连通图是否有环)相关推荐
- 王道书 P360 T03(计数排序)
/*** 王道书 P360 T03 计数排序* 可以和王道书 P361 T05 比较思考一下,* T05是在比较时比较的元素两者都进行count++了,* 所以下一轮的时候就不用从a[0]开始了,减少 ...
- 【23考研】计算机408数据结构代码题强化阶段划重点(王道书)
视频链接:[23考研]10分钟带你整理408数据结构强化阶段代码题复习重点 本篇只适合考408的同学,请自主命题的同学自觉右上角×掉 因为王道书为了照顾自主命题的同学,所以很多算法也给出了代码实现,实 ...
- 有符号拓展:signed-extending无符号拓展:unsigned-extending
符号拓展 拓展意义 举个栗子 有符号拓展:signed-extending&无符号拓展:unsigned-extending 拓展意义 符号拓展的意义是产生位数拓展,数值不变的的结果.常见于不 ...
- 王道书 P335 T05
/*** 王道书 P335 T05** ①算法思想* 使用快排的思想,low是每次枢轴的最终确定位置,* 从小到大排序,如果low + 1 等于 k 的话,那么 low + 1 位置的元素就是这个序列 ...
- 笔面集锦:判断单链表里面是否有环及相关扩展题
源于网络 1.如何判断单链表里面是否有环? 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环 ...
- 用python 判断一个单链表是否有环
文章目录 用python 判断一个单链表是否有环. 第二次做DAY20201130 [141. 环形链表](https://leetcode-cn.com/problems/linked-list-c ...
- Java实现无向连通图中的“割点”问题
直接上代码,详细请见注释或者下方留言. package cut.point;import java.util.Scanner; import java.util.Stack;/*** "轰炸 ...
- 算法分析与设计实践 - 作业12 - 给定无向连通图G和m种颜色
1.问题 给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色.如果要求G的每条边的两个顶点着不同颜色.给出所有可能的着色方案:如果不存在,则回答"NO". 2. ...
- c++生成随机平面无向连通图
c++生成随机平面无向连通图 算法描述 关键代码 运行结果 算法不足 前言: 为了检验路径搜索算法的优劣,需要用大量的图的数据来运行对应的算法,例如深度优先搜搜.宽度优先搜索.迪杰斯特拉算法等等,而对 ...
最新文章
- clustalw序列比对_如何做出漂亮的序列比对图——ENDscript/ESPript
- iOS 查询数组中的对象
- 为不同的屏幕尺寸提供不同的图片(为那些没有必要下载全尺寸大图的设备节省带宽)...
- pmml_再访PMML
- JQuery 基础:4.JQuery对象
- data mining 1 concept
- 线程同步(互斥锁与信号量的作用与区别)
- UOJ 30 【CF Round #278】Tourists
- 苹果mac系统隐藏文件的显示和取消显示
- 怎样恢复误删计算机管理员,win10管理员账号误删只有普通权限怎么恢复
- 聊聊directory traversal attack
- 纯css实现乌云密布的天气图标
- 飞机大战之六:敌机爆炸(碰撞检测)
- 国家为什么会失败-读书笔记
- 写作必备文献搜索网大全
- Python销售管理系统
- 北航计算机学院保研占比,许明杰:CSP助力保研入北航
- 如何防止域名被劫持?网站域名被劫持怎么办?怎么处理?
- 智慧路灯杆系统环境监测 5G智能灯杆网关的功能有哪些
- 基于Greenplum构建下一代数据分析平台