首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

查找无向图中不包含子圈的所有圈

在无向图中,一个圈是由一系列顶点和边组成的闭合路径。而子圈是指一个圈中的一部分顶点和边所组成的路径,它也是一个圈。

要查找无向图中不包含子圈的所有圈,可以使用深度优先搜索(DFS)算法。具体步骤如下:

  1. 选择一个起始顶点作为当前顶点,并将其标记为已访问。
  2. 从当前顶点开始,遍历它的所有邻居顶点。
  3. 对于每个邻居顶点,如果它已经被访问过且不是当前顶点的父节点,则说明找到了一个圈。将这个圈保存起来。
  4. 如果邻居顶点没有被访问过,则将其标记为已访问,并将当前顶点设置为其父节点。
  5. 递归地对邻居顶点进行深度优先搜索。
  6. 当所有邻居顶点都被访问完毕后,回溯到上一级顶点,继续遍历其他未访问的邻居顶点。
  7. 重复步骤2-6,直到所有顶点都被访问过。

以下是一个示例代码,用于查找无向图中不包含子圈的所有圈:

代码语言:python
代码运行次数:0
复制
def find_cycles(graph):
    cycles = []
    visited = set()

    def dfs(current, parent, path):
        visited.add(current)
        for neighbor in graph[current]:
            if neighbor == parent:
                continue
            if neighbor in path:
                cycle = path[path.index(neighbor):] + [neighbor]
                cycles.append(cycle)
            elif neighbor not in visited:
                dfs(neighbor, current, path + [neighbor])
        visited.remove(current)

    for vertex in graph:
        if vertex not in visited:
            dfs(vertex, None, [vertex])

    return cycles

在这个代码中,graph 是一个字典,表示无向图的邻接表。键是顶点,值是与该顶点相邻的顶点列表。

使用这个函数,可以找到无向图中不包含子圈的所有圈。返回的结果是一个列表,每个元素都是一个圈的顶点列表。

这个算法的时间复杂度是 O(V + E),其中 V 是顶点数,E 是边数。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

找出平面上特殊图中所有三角形算法

问题提出背景:在非结构化三角形网格生成过程中,若采用前沿推进法,在推进过程中是不好构造三角形(而且也没有要),最好在把所有的边都连好以后再找出所有三角形,于是提出了问题:在由三角形构成平面无图中如何找出所有三角形...要注意是,这个图很特殊, 1.这个图在平面上。 2.这个图是由三角形构成(如果不是由三角行构成,那这个网格就没有用处了)。...我算法如下,伪代码表示: 1 2 3 4 5 6 7 8 9 10 11 12 foreach(点 p in所有的点){ foreach(点 np in p所有邻居点){...foreach(点 nnpin np所有邻居点){ if( p,np,nnp三点两两不重合 && p,np,nnp三点两两相连...这两个函数原理相同, uniqPointOfTriangle( )uniqPointOf2Points()唯一作用是 它一个性质:    输出和输入参数顺序无关。

33830
  • 数据结构与算法-图

    弧:有图中,顶点 Vi 到顶点 Vj 边,记作,Vj为弧头箭头端;Vi弧尾箭头端。 3. 完全图 (1). 完全图:边数=n*(n-1)/2图,其中n为顶点数。...图:图G和G′,若有V(G′) 包含于 V(G) 和 E(G′) 包含于 E(G),则称 G′ 为图 G 图。 6. 邻接:若 (Vi ,Vj ) 属于 E(G),则称Vi和Vj互为邻接点。...度D(Vi ):有度=入度+出度,即 D(Vi ) = OD(Vi )+ID(Vi ); 图中边数与顶点关系为:所有顶点度数之和一半即为边数。 9....简单回路:第一个和最后一个顶点相同简单路径,简单回路只能有一个。 14. 连通:图中,若从顶点Vi到Vj顶点有路径,则称Vi和Vj是连通。 15. 连通图和连通分量 ? 16....G图G’边数小于n-1,则G’中一定连通。 17. 生成森林:在非连通图中,每个连通分量都可得到一个极小 连通图,也就是生成树。这些生成树就组成了一个非连通图生成森林。 图基本运算 1.

    56840

    从一道算法面试题看我国信息科技原创性不足:查找包含所有元素最短数组

    前不久我遇到这样一道算法面试题:在一个包含重复元素数组中,找到一个最短数组,要求该数组包含了整个数组所有元素,例如给定数组:7, 3, 7, 3, 1, 3, 4, 1,包含所有元素最短数组为...现在问题在于,我们并不知道t和h值,但我们可以确定是,只要任何一个数组,如果它包含了数组所有元素,那么最短数组就有可能被这个子数组所包含,所以算法要点就是先找到一个包含所有元素数组,然后再看看能不能对其进行压缩...,看看是否能在一个包含所有元素数组中,确定最短数组。...算法第一步是查找给定数组中所有元素,做到这个不难,我们先遍历数组,然后将当前访问到元素加入哈希表,如果元素在表中已经存在,说明该元素是重复元素,可以直接忽略,如此遍历一遍后,我们就能得到该数组所有元素...此时我们得到数组a[start…end]可能是包含所有元素最短数组,也有可能不是。我们需要继续探寻,以确认后面是否会存在包含所有元素但长度更短数组。

    65920

    5 分钟了解下【复杂度】是如何计算

    + 2*P E 为图中个数,N 为图中节点个数,P 为图中连通分量个数。...此图中,E = 9, N = 8, P = 1,因该程序复杂度为 9 - 8 + (2*1) = 3 ; 边个数和节点个数很好理解,但: 什么是 连通分量?...原来,在图中,如果任意两个顶点之间都能够连通,则称此图为连通图; 虽然 V1 和 V3 没有直接关联,但从 V1 到 V3 存在两条路径,分别是 V1-V2-V3 和 V1-V4-V3,因此称...若无图不是连通图,但图中存储某个子图符合连通图性质,则称该图为 连通分量;如图示: 而在有图中,若任意两个顶点 Vi 和 Vj,满足从 Vi 到 Vj 以及从 Vj 到 Vi 都连通,也就是都含有至少一条通路...,则称此有图为 强连通图; 若有图本身不是强连通图,但其包含最大连通图具有强连通图性质,则称该图为 强连通分量。

    2.5K00

    【计算理论】计算复杂性 ( NP 完全问题 | 顶点覆盖问题 | 哈密顿路径问题 | 旅行商问题 | 子集和问题 )

    | G 是图 , 包含 k 个节点 点集覆盖 \} 其中 \rm k 个节点 点集覆盖 就是图中有 \rm k 个点点集子集 , 满足点集覆盖要求 ; 点集覆盖 是 \rm NP...完全问题 ; 二、哈密顿路径问题 ---- 哈密顿路径问题在图论中是很重要问题 ; 在下图中 , 从某个顶点出发 , 将所有的顶点都走一遍, 并且每个顶点只能经过一次 , 经过所有顶点 称为...哈密顿 , 经过所有顶点 道路 称为 哈密顿道路 , 又称为 哈密顿路径 ; 哈密顿路径问题 就是 找到图中哈密顿路径 ; 涉及到其它概念 : … 途径 : 顶点和边交替出现序列...与 哈密顿 ; 哈密顿路径问题 是 \rm NP 完全 ; 图中哈密顿路径是否存在 , 该问题也是 \rm NP 完全 ; 前者是求出具体哈密顿路径 , 后者求哈密顿路径是否存在...; 三、旅行商问题 ---- 旅行商问题 : 图中 , 每条边都有一个权重 , 求是否有一条哈密顿路径权重之和 , 超过给定自然数 \rm W ; 旅行商问题 是 \rm NP 完全

    1.5K00

    图论基本概念(更新之中)

    (r-正则图表示所有节点度都是r) 图:边没有方向性。 有图:边具有方向性。 加权图:是一种赋予了边值图,这些值称为权重或者成本。...*有边集由有序对构成,边集由无序对构成 度(图):节点度指的是与节点v邻接节点数。记作:deg(v). 入度:以顶点v为终点数目,称为v入度。...连通图:图中任意两个节点间都存在路。 测地线路:是指节点u和v之间长度最短路,简称为测地线。 标记图:给所有的节点都给以记号来表示。 数目:对于一个标记图而言,它数目是:2ʌk。...k为标记图中连接了被标记节点数目。 连同分量:在非连通图中,各个分支称为连同分量。严格来说,图连同分量指的是极大连同图。极大不是最大。...(极大是指包含顶点个数极大) 一个连通图只有一个连同分量,就是它本身。 平凡图:只有一个节点图。记作K1。 :n个节点构成有回路2—正则图。

    1.2K10

    最全JavaScript 算法与数据结构

    /总和 范围查询示例 A 树状数组 (二叉索引树) A 图 (有图与图) A 并查集 A 布隆过滤器 算法 算法是如何解决一类问题明确规范。...莫里斯-普拉特算法 - 串搜索 A 字符串快速查找 - 串搜索 A 最长公共串 A 正则表达式匹配 搜索 B 线性搜索 B 跳转搜索 (或块搜索) - 搜索排序数组 B 二分查找 B 插值搜索 -...(BFS) 图 B 深度优先搜索 (DFS) B 广度优先搜索 (BFS) A 戴克斯特拉算法 - 找到图中所有顶点最短路径 A 贝尔曼-福特算法 - 找到图中所有顶点最短路径 A 弗洛伊德算法...- 找到所有顶点对 之间最短路径 A 判算法 - 对于有图和图 (基于DFS和不相交集版本) A 普林演算法 - 寻找加权最小生成树 (MST) B 克鲁斯克尔演算法 - 寻找加权最小生成树..., 不考虑以后情况 B 跳跃游戏 A 背包问题 A 戴克斯特拉算法 - 找到所有图顶点最短路径 A 普里姆算法 - 寻找加权最小生成树 (MST) A 克鲁斯卡尔算法 - 寻找加权最小生成树

    1.4K10

    C++ 图论算法之欧拉路径、欧拉回路算法(一笔画完算法)

    欧拉图几个概念: 欧拉回路:指在图(图或有图)中,经过图中所有边且只经过边一次所形成回路,称为欧拉回路。具有欧拉回路图称为欧拉图。...欧拉图性质: 欧拉图中所有顶点度数都是偶数。也就是说,图中存在欧拉回路充要条件是图中每个结点都是偶节点(连接该节点数量为偶数)。...欧拉图判定法: 图是欧拉图当且仅当:非零度顶点是连通;顶点度数都是偶数。 图是半欧拉图当且仅当:非零度顶点是连通;恰有 2 个奇度顶点。...Tips: 根据欧拉图判断法,下图中每一个节点都是偶节点,满足图是欧拉图前提条件。 选节点1为起点,并将该起点加入路径中。Fleury算法选择栈存储欧拉路径。...寻找回路:如下从节点1开始,沿着边遍历图,一边遍历一边删除经过边。如果遇到一个所有边都被删除节点,那么该节点必然是 1(回到初始点)。将该回路上节点和边添加到结果序列中。

    85520

    漫画:什么是 “图”?

    节点之间是一对多关系,并且存在父与层级划分;而图顶点(注意,这里不叫节点)之间是多对多关系,并且所有顶点都是平等,无所谓谁是父谁是。...(貌似是这样) 因此,QQ好友关系可以认为是一个没有方向区分图,这种图被称为图。 图表示 邻接矩阵 拥有n个顶点图,它所包含连接数量最多是n(n-1)个。...同时,图对应矩阵是一个对称矩阵,V0和V1有关联,那么V1和V0也必定有关联,因此A[0][1]和A[1][0]值一定相等。 那么,有邻接矩阵又是什么样子呢?...这样就麻烦一些了,我们要遍历每一个顶点所在链表,看看链表节点中是否包含节点1,最后发现顶点0和顶点3可以到达顶点1。 像这种逆向查找麻烦,该如何解决呢?我们可以是用逆邻接表来解决。...总结 1.我们这一次介绍了图定义和分类。根据图边是否有方向,可分为有图和图。根据图边是否有权重,可分为带权图和无权图。当然,也可以把两个维度结合起来描述,比如有带权图,无权图等等。

    77720

    漫画:什么是 “图”?(修订版)

    节点之间是一对多关系,并且存在父与层级划分;而图顶点(注意,这里不叫节点)之间是多对多关系,并且所有顶点都是平等,无所谓谁是父谁是。 ?...(貌似是这样) 因此,QQ好友关系可以认为是一个没有方向区分图,这种图被称为图。 图表示 ? ? 邻接矩阵 拥有n个顶点图,它所包含连接数量最多是n(n-1)个。...同时,图对应矩阵是一个对称矩阵,V0和V1有关联,那么V1和V0也必定有关联,因此A[0][1]和A[1][0]值一定相等。 那么,有邻接矩阵又是什么样子呢? ?...这样就麻烦一些了,我们要遍历每一个顶点所在链表,看看链表节点中是否包含节点1,最后发现顶点0和顶点3可以到达顶点1。 ? 像这种逆向查找麻烦,该如何解决呢?我们可以是用逆邻接表来解决。 ?...初学十字链表时候,可能会觉得有些乱。 总结 1.我们这一次介绍了图定义和分类。根据图边是否有方向,可分为有图和图。根据图边是否有权重,可分为带权图和无权图。

    66610

    清北NOIP训练营集训笔记——图论(提高组精英班)

    d.重复步骤b和c直到所有顶点都包含在S中。 啊~上面的乱七八糟概念太难懂了,还是举个例子吧!如下图! 3.jpg 我们假设1号节点为原点。...如果没有输出所有的顶点,则有图中一定存在环 //拓扑排序,时间复杂度:O(n+m) #include #include const int N=100500; const...强连通图:有图中,任意一对点都满足强连通,则这个图被称为强连通图。 强联通分量:有图中极大强连通图,就是强连通分量。...欧拉回路:在欧拉路径基础上回到起点路径(从起点出发一笔画遍历每一条边)。 欧拉路径存在: 图:当且仅当该图所有顶点度数为偶数 或者 除了两个度数为奇数外其余全是偶数。...有图:当且仅当该图所有顶点 出度=入度 或者 一个顶点 出度=入度+1,另一个顶点 入度=出度+1,其他顶点 出度=入度 欧拉回路存在: 图:每个顶点度数都是偶数,则存在欧拉回路。

    78510

    C++ 不知图系列之基于邻接矩阵实现广度、深度搜索

    图中所有顶点构建成一个顶点集合。是图组成部分。...如上图中 (V1, V2, V3, V1) 就是一个环。 图类型: 综上所述,图可以分为如下几类: 有图: 边有方向图称为有图。 图: 边没有方向图称为图。...加权图: 边上面有权重信息图称为加权图。 环图: 没有环图被称为环图。 有环图: 没有环图,简称 DAG。...2.2 定义图 ---- 根据图特性,图数据结构中至少要包含两类信息: 所有的顶点构成数据集合信息,这里用 V 表示(如地图程序中,所有城市构在顶点集合)。...有权图中,路径指从一个顶点到另一个顶点经过所有边上权重相加之和。 如查找到 A1 到 E5 之间路径长度: 直观思维角度查找一下,可以找到如下路径以及路径长度。

    1.2K20

    PHP数据结构-图概念和存储结构

    (1)图:假设有两个图 G=(V, E) 和 G'=(V', E') 如果 V' 包含于 V 且 E' 包含于 E ,则称G' 为 G 图 ?...上图中右边那些图都是属于原图图,可以看出图可以产生非常多形态,有图 也是相同概念,不过相对于 图 来说,有图能够生成图更少一些,因为它边是有方向。...其实完全图概念就是图中所有相邻结点都有边能够连结在一起。...如果整个图中所有的结点都可以是互相连通,则这个图就是连通图。连通分量就是图非连通图中极大连通图。 ? 包括后面的三个概念也在这张图中一并给出了。...在 图 中,连通分量就等于极大连通图,在这个图中,我们有两个连通分量。

    86730

    图论碎碎念(2.3)

    a 树是一个图 b c d 连通 那么问题来了:a树是一个图,b在上一节里已经讲到了,但c和d什么鬼?这就需要对图扩展下。 ? 其中 ? ? 问题c.1:图论中是啥?...如果图中一条链首位相连,这条链就是一个。 问题c.2:图论中链是啥? 在有图中,若有点边交替序列: ? 如果可以有 ? 则称该序列为链接vi0至vik一条链。...有的同学就要问了: 问题c.3:链+概念与路+回路概念有啥区别? 链(黄色)可以回头指向,路(红色)只能单行指向: ? ? 和路区别同理: ? 问题d.1:连通图是啥?...连通图中每个点都在一条链上,不存在孤立点 ? 总之,树定义可以按下图来理解: ? 在这棵树中可以看到,点分为两类:一类是结点(圆),一类是端点(终端结点)(三角)。 本宝宝是一棵树 ?...临近期末,这是一枚短小推送。不知道现在你是否也和小编一样奔波在三点一线间忙于复习呢?后台回复【壁纸】获取MATHWORK网站MATLAB图标的大图壁纸呦~~

    57120

    Python 图_系列之基于邻接炬阵实现广度、深度优先路径搜索算法

    类型: 综上所述,图可以分为如下几类: 有图: 边有方向图称为有图。 图: 边没有方向图称为图。 加权图: 边上面有权重信息图称为加权图。 环图: 没有环图被称为环图。...有环图: 没有环图,简称 DAG。 1.2 定义图 根据图特性,图数据结构中至少要包含两类信息: 所有顶点构成集合信息,这里用 V 表示(如地图程序中,所有城市构在顶点集合)。...add_vertex( vert ):图中添加一个新节点,参数应该是一个节点类型对象。 add_edge(fv,tv ):在 2 个项点之间建立起边关系。...find_vertex( key ) : 根据关键字 key 在图中查找顶点。 find_vertexs( ):查询所有顶点信息。...搜索路径 在图中经常做操作,就是查找从一个顶点到另一个顶点路径。

    96930

    08.一道美团算法题,Don E.Knuth 花了 24 小时才解出来!

    如果执着于二分查找思路去优化,答案是果,优化方向是使用快慢指针。...1、通过快慢指针方式,在环中寻找它们第一次相遇节点位置 2、当快慢指针相遇时候: x 代表从头节点到环形入口节点节点数(包含头节点) y 代表从环形入口到第一次相遇节点节点数(包含环形入口节点...) z 代表从第一次相遇节点到环形入口节点数(包含第一次相遇节点) 此时,快指针走了 x + y + n (y + z),其中,x + y 表示快指针第一次到达相遇节点,n 代表快指针在环里面绕了多少...(包含头节点) // y 代表从环形入口到第一次相遇节点节点数(包含环形入口节点) // z 代表从第一次相遇节点到环形入口节点数(包含第一次相遇节点)...(包含环形入口节点) // 所以 n(y + z) - y 时,b 到达了环形入口节点位置 // 由于 x 代表从头节点到环形入口节点节点数(包含头节点)

    55620

    《offer来了》第四章学习笔记

    5.二叉查找树 满足以下条件树: ◎ 若左子树空,则左子树上所有节点值均小于它根节点值; ◎ 若右子树空,则右子树上所有节点值均大于或等于它根节点值; ◎ 左、右子树也分别为二叉排序树...◎ 每个叶子节点(NIL)都是黑色。 ◎ 如果一个节点是红色,则它节点必须是黑色。 ◎ 从一个节点到该节点子孙节点所有路径上都包含相同数量黑色节点。 结构 ?...7.1.图 从顶点 Vi到 Vj边没有方向,则称这条边为边。顶点和边组成图为图 ?...,直到图中所有已被访问顶点邻接点都被访问;若此时图中尚有顶点未被访问,则另选图中未曾被访问一个顶点作为起始点重复上述过程,直至图中所有顶点均被访问。...,直至图中所有节点都被访问。

    96740

    点双连通分量与割点

    前言 在图论中,除了在有图中强连通分量,在图中还有一类双连通分量 双连通分量一般是指点双连通分量 当然,还有一种叫做边双连通分量 点双连通分量 对于一个连通图,如果任意两点至少存在两条“点不重复...”路径,则说图是点双连通(即任意两条边都在一个简单环中),点双连通极大子图称为点双连通分量。...计算方法比较简单 在tarjan过程中,如果由i dfs到j,并且low[j]>=dfn[i],那么进行弹栈直到j被弹出,弹出点加上i构成了一个点双连通分量。...=edge[i].v);//warning 与二分图关系 (1) 如果一个点双连通分量内某些顶点在一个奇中(即双连通分量含有奇),那么这个双连通分量其他顶点也在某个奇中; (2) 如果一个点双连通分量含有奇...割点(割顶) 割点:对于图中点i,若去掉i点,连通快个数会增加,则称点i为割点 不难发现一个点是割点当且仅当他在多个点双里。 考虑之前求点双过程,找到一个点双时,那个i就是一个割点。

    1.1K80
    领券