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

确定两个节点之间是否存在路径的最有效方法是什么?

确定两个节点之间是否存在路径的最有效方法取决于图的类型(有向图或无向图)、图的规模、是否有权重等因素。以下是几种常用的方法:

1. 广度优先搜索(BFS)

广度优先搜索是一种逐层遍历图的算法,适用于无权图。它从起始节点开始,逐层扩展节点,直到找到目标节点或遍历完所有可达节点。

应用场景:适用于无权图,特别是当图的规模较大时。

示例代码

代码语言:txt
复制
from collections import deque

def bfs(graph, start, end):
    queue = deque([start])
    visited = set([start])
    
    while queue:
        node = queue.popleft()
        if node == end:
            return True
        for neighbor in graph[node]:
            if neighbor not in visited:
                visited.add(neighbor)
                queue.append(neighbor)
    return False

2. 深度优先搜索(DFS)

深度优先搜索是一种沿着图的边深入到尽可能深的节点,然后回溯的算法。它适用于无权图和有权图。

应用场景:适用于无权图和有权图,特别是当图的深度较大时。

示例代码

代码语言:txt
复制
def dfs(graph, start, end, visited=None):
    if visited is None:
        visited = set()
    visited.add(start)
    
    if start == end:
        return True
    for neighbor in graph[start]:
        if neighbor not in visited:
            if dfs(graph, neighbor, end, visited):
                return True
    return False

3. Dijkstra算法

Dijkstra算法是一种用于有权图的单源最短路径算法。它可以用来判断两个节点之间是否存在路径,并且可以找到最短路径。

应用场景:适用于有权图,特别是当需要找到最短路径时。

示例代码

代码语言:txt
复制
import heapq

def dijkstra(graph, start, end):
    queue = [(0, start)]
    distances = {node: float('inf') for node in graph}
    distances[start] = 0
    
    while queue:
        current_distance, current_node = heapq.heappop(queue)
        
        if current_node == end:
            return True
        
        if current_distance > distances[current_node]:
            continue
        
        for neighbor, weight in graph[current_node].items():
            distance = current_distance + weight
            
            if distance < distances[neighbor]:
                distances[neighbor] = distance
                heapq.heappush(queue, (distance, neighbor))
    return False

4. A*算法

A*算法是一种启发式搜索算法,适用于有权图。它结合了Dijkstra算法的优点和启发式函数(如欧几里得距离)来加速搜索过程。

应用场景:适用于有权图,特别是当图的规模较大且需要高效找到路径时。

示例代码

代码语言:txt
复制
import heapq

def heuristic(a, b):
    # 欧几里得距离
    return ((b[0] - a[0]) ** 2 + (b[1] - a[1]) ** 2) ** 0.5

def a_star(graph, start, end):
    queue = [(0, start)]
    came_from = {}
    cost_so_far = {start: 0}
    
    while queue:
        _, current = heapq.heappop(queue)
        
        if current == end:
            return True
        
        for neighbor, cost in graph[current].items():
            new_cost = cost_so_far[current] + cost
            if neighbor not in cost_so_far or new_cost < cost_so_far[neighbor]:
                cost_so_far[neighbor] = new_cost
                priority = new_cost + heuristic(end, neighbor)
                heapq.heappush(queue, (priority, neighbor))
    return False

总结

  • 广度优先搜索(BFS):适用于无权图,特别是当图的规模较大时。
  • 深度优先搜索(DFS):适用于无权图和有权图,特别是当图的深度较大时。
  • Dijkstra算法:适用于有权图,特别是当需要找到最短路径时。
  • A算法*:适用于有权图,特别是当图的规模较大且需要高效找到路径时。

选择哪种方法取决于具体的应用场景和需求。

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

相关·内容

【算法设计题】判断无向图中任意给定两个顶点之间是否存在一条长度为k简单路径,第8题(CC++)

第8题 判断无向图中任意给定两个顶点之间是否存在一条长度为k简单路径 编写算法,判断无向图中任意给定两个顶点之间是否存在一条长度为k简单路径(简单路径指的是其顶点序列中不含有重复出现顶点)。...得分点(必背) //判断是否存在长度为 k 简单路径 int visited[MAXSIZE]; int exist_path_len(ALGraph G ,int i, int j,int k){...exist_path_len(ALGraph G, int i, int j, int k): 判断在无向图 G 中,是否存在一条从顶点 i 到顶点 j 长度为 k 简单路径。...visited[temp] && exist_path_len(G, temp, j, k - 1)) 检查邻接点 temp 是否未被访问且从 temp 到 j 是否存在一条长度为 k-1 路径。...返回值:如果找到符合条件路径,则返回1;否则,返回0。 通过这种方式,函数递归地探索图中路径,并确保路径是简单路径,最终判断是否存在一条符合长度要求路径

9410

理解数据结构和算法背景数据本质算法来源应用总结参考

,一个连一个,这个有序在计算机里就叫做Array 另一种方法是让数据之间指向关系,前一个指向后一个,这就叫LinkList,LinkList中用做指向关系结构就叫做指针 第二个需求:如何判断某一个数据是否存在...,你可能第一次去路口看时候,车没来,然后你回来了说车没来,但是可能车在你刚回来时候又来了,这样子就其实是错过了车,这种判断车来没来方法带有很大确定性,对比到我们判断数是否在集合里例子中,我们先看前面几个数据...,发现没有,就认为集合里不存在我们要找数了,这种方法就叫做贪心,而且特点也很明显就是不确定性,我们只是判断了几个数据,就认为要找数不在集合里面了。...那有什么方法能够将贪心确定性变为确定性贪心呢?我们可以利用集合有序这个条件,先找中间元素,比对大了还是小了,不断缩减搜索范围,那这个和二分查找有什么区别呢?...首先我们需要做个转换,原先每个节点存在是本节点权重,现在每个节点新增根节点到本节点最短路径, 然后算出每个中间节点最短路径,这个过程是一个宽度优先过程,先算第K层最短路径,然后算K+1层

47740
  • 贝叶斯网络D-separation详解和Python代码实现

    对于一个DAG(有向无环图),D-Separation方法可以快速判断出两个节点之间是否是条件独立。 了解 D 分离 在贝叶斯网络中,D 分离到底是什么,它可以用于什么?...简单地说,它是一种常规的确定独立性方法。如果两个变量X 和 Y 在有向图中相对于另外一组变量 Z 是 d 分离,那么在这种图可以表示所有概率分布中都是独立于 Z 。这是什么意思?...要完全理解它是如何完成,首先需要介绍 active 和 inactive trails 。如果一条路径存在依赖关系,就可以说它是 active。...连接节点节点,为具有共同子节点变量之间绘制一条无向边。 将有向边替换为无向边 删除给定节点及其边:例如,在“给定 Z 情况下,X 和 Y 是否独立?”,则必须删除 Z 及其所有边。...最后还可以对不同节点进行颜色编码网络可视化。代码如下: 现在看看代码是否有效

    91820

    再看最著名 NP 问题之 TSP 旅行商问题

    这就是 P 与 NP 问题核心。 它们之间关系是什么是否存在一种方法可以将 NP 问题转化为 P 问题,使得我们可以更有效地解决它们?...这些问题 可能很难找到解答,但一旦你有了潜在解答,你可以轻松地验证它是否正确。 目前尚未证明 P 问题和 NP 问题之间是否存在一种等价关系。...也就是说,尚未证明是否所有可以在多项式时间内验证问题都可以在多项式时间内解决,或者是否存在一种方法可以将 NP 问题有效地转化为 P 问题。 P与NP问题仍然是一个悬而未决问题。...经典 NP 问题 NP 问题(非确定性多项式时间问题)是一类计算问题,虽然我们不能确定是否可以在多项式时间内找到这些问题解答,但我们可以轻松地验证一个潜在解答是否正确。...最大独立集问题(Maximum Independent Set Problem) :给定一个图,找到一个节点子集,其中没有两个节点相邻,使得这个子集大小最大。

    86930

    游戏数值策划

    数值策划在游戏战斗设计中工作是什么?有哪些设计技巧和方法? 因为内容篇幅较长,我将内容分为了上、下两个部分。如果大家对游戏战斗数值有什么经验与想法,也请在评论区留言,我期待与你交流!...3.定义战斗时长作用 定义了这个战斗时长后,就确定了基础战斗节奏,然后就确定有效生命和有效输出之间关系,衍生出就是关卡难度和养成效果关系。 也就是说,验证型战斗难度其实是算出来。...大家可能还记得,之前我们说到了一个战斗时长,公式是:战斗时长=有效生命/有效输出。这里有效生命和有效输出是一个概念。 所以,在确定有效生命和有效输出时候,数值还是要符合战斗时长这个基础限制。...《王者荣耀》英雄“镜”开锋技能lv1-lv6效果 所以经验成长一定是正反馈?我们可以先试想一下,如果这时候存在负反馈会怎么样?直接反馈就是,玩家会犹豫,他们是否需要进行升级。...对于同一个关键时间节点,我们可以通过上下限来进行验证是否符合预期。对于不同关键节点来说,也需要一个标准来验证关键时间节点之间关系。

    1K20

    脑网络通信: 概念、模型和应用

    这种启发式方法不能保证确定节点之间有效路径。事实上,与大多数网络通信模型不同,导航下信令可能会陷入中间节点之间环路中,无法到达预定目标。然而,众所周知,复杂网络是高度可导航。...具体来说,高(低)可通信性表明两个节点之间存在许多(很少)有效行走,这种特性可以解释为通信弹性和并行信号总体容量。可沟通性是网络神经科学中一个流行测量方法,是最常用替代最短路径测量方法之一。...最短路径集成模型提出,信号通过由k条最有效路径组成集成在两个节点之间传播。传统最短路径路由对应于k =1特殊情况,在这种情况下,信号只利用节点之间有效一条路径。...与其他多路径信令模型相反,最短路径集成只考虑节点之间有效前k条路由,因此对支持通信路径保持选择性。对于较小k值,确定节点之间k条最有效路径仍然严重依赖于全局拓扑知识。...因此,可通信性度量是由更广泛网络拓扑形成,例如,两个节点之间存在多条可选路由,从而促进它们通信。有了来自这两个模型测量方法,研究人员就可以确定路由或广播是否更能解释感兴趣经验观察(图4)。

    26750

    【愚公系列】软考中级-软件设计师 038-软件工程基础(系统测试)

    集成测试目的是检查模块之间,以及模块和已集成软件之间接口关系,并验证已集成软件是否符合设计要求 1、自顶向下集成测试。自顶向下集成测试是一种构造软件体系结构增量方法。 2、自底向上集成测试。...这种方法可以帮助测试人员分析系统功能和逻辑,以确定可能导致问题潜在原因。 在构建因果图时,可以考虑以下步骤: 确定系统输出结果:首先需要明确要测试系统或功能输出结果是什么。...基本路径测试步骤如下: 步骤 目标 示例 绘制控制流图 根据源代码绘制控制流图 控制流图包含多个基本块,每个基本块标记为一个节点,用边连接各个基本块 确定基本路径 从控制流图中确定所有可能基本路径...执行测试用例来验证经过特定条件节点路径 分析结果 分析测试结果,检查程序行为和潜在错误 检查程序是否按照预期路径执行 2....检查是否存在潜在错误 基本路径测试是一种比较全面的测试技术,可以有效地发现程序中错误。它也有一些限制,比如在复杂程序中,基本路径数量可能很大,难以覆盖所有的基本路径

    16800

    因果图模型:理解因果关系强大工具

    例如,医生想知道某种药物是否有效治疗疾病,政策制定者想知道新教育政策是否能提高学生成绩。因果图模型(Causal Graph Model)为我们提供了一种系统方法来表示和推理这些因果关系。...相关性表示两个变量之间存在某种联系,但这并不意味着一个变量导致了另一个变量变化。例如,夏季冰淇淋销售量与溺水事件之间存在正相关关系,但这并不意味着冰淇淋销售导致了溺水事件。...无环性(Acyclicity)因果图模型中图是一个有向无环图(DAG, Directed Acyclic Graph),这意味着图中不存在从一个节点出发通过一系列有向边又回到该节点路径。...路径分析(Path Analysis)路径分析是一种基于因果图模型统计方法,用于估计和检验变量之间直接和间接因果关系。具体步骤如下:绘制路径图:根据因果图模型绘制路径图,表示变量之间因果关系。...(Exercise):是否定期运动(是/否)吸烟习惯(Smoking):是否吸烟(是/否)步骤2:确定因果关系根据已有研究和专家意见,确定变量之间因果关系:年龄影响心脏病、运动习惯和吸烟习惯运动习惯和吸烟习惯影响心脏病新药物直接影响心脏病步骤

    13810

    因果推断入门:为什么需要因果推断?

    这里 C 代表病情轻重,T 代表治疗方案,Y 代表是否死亡。这个 Graph 意思是说病情轻重会影响医生给你用哪种方案,而且病情轻重本身也会导致是否死亡。治疗 B 在降低死亡率方面更有效。...但是,实际情况是 我们通常无法确定有条件可交换性是否成立。可能有一些未观察到混杂因子不是 X 一部分,这意味着违反了条件可交换性,如下图所示,由于存在另外一个混杂因子 W,独立性并不存在。...相反,如果两个节点之间有边(图3.11),那么一定是 associated 。...下面给出 d-分离概念: 在给定集合 Z 条件下,如果 X 和 Y 中任意两个节点之间路径都被 block,那么就说 X 和 Y被 Z d-分离。...我们可以通过两个节点是否被 d-分离来判断它们是否有关联(两者之间有关联流)。 因果图特殊之处在于,我们还假设边具有因果意义(因果边假设,假设 3.3)。

    1.7K13

    《算法设计与分析》学习笔记

    确定性:组成算法每条指令是清晰,无歧义。 ④有限性:算法中每条指令执行次数是有限,执行每条指令时间也是有限。 ⑤可行性: 算法是能够有效解决问题。...连通图:对于一个无向图,任意两个节点之间存在一条路径连接。 强连通图:对于一个有向图,任意2个节点之间存在一条有向路径连接。...稀疏图:|E|≈|V| 稠密图:|E|≈|V|² 完全图:对于一个有向或者无向图,任意两个节点之间都有边邻接(对于有向图需要两个方向 边)。...残留网络 增广路径 最小割 指将原有网络G(V, E)划分成两个不相交集合(A, B),使得A中所有节点都无法到达B中所有节点,在满足这一条件情况下,将划分这两个集合所有边容量之和称为最小割...证明思路如下: 假设存在一个算法或程序H,可以判断任意给定程序是否会在有限步骤内停止。 假设程序H接收两个输入:P(要判断是否停机程序)和I(程序P输入)。

    25420

    网络方法发展及最新iDIRECT方法介绍

    作者:顾一文 审核:Listenlii 注: 自iDIRECT方法文章在今年出现以来,已经有若干公众号进行了解读。但全都集中于结果,而对我感兴趣方法部分都不涉及。本文主要从方法部分进行介绍。...1921年,遗传学家、网络推理领域创始人Sewall Wright描述了推断网络中错误链接问题,他说:“两个变量之间相关程度可以通过众所周知方法计算,但是它仅给出了所有连接影响路径结果”。...这三种方法都能够考虑任意长度间接路径。 由于网络推理确定性,总关联矩阵G趋于单一性或病态性。当G单一性或病态性在实现过程中成为问题时,其他方法使用通用数值分析技术来反转关联矩阵G。...(b)此外通过传递性矩阵(Ti)去消除自循环诱发间接关系。通过考虑两个节点i和j之间通过节点i一个邻居k。节点i通过节点k和j之间相互间接关系强度为SikTi,kj。...节点i和j之间总相关强度Gij为节点i和j之间直接相关强度Sij加上通过节点k间接相关Ti,kj。 引入了两个新概念--顺序路径和平行路径。顺序路径:节点i和节点j通过中间节点k间接连接。

    58110

    复杂性思维第二版 三、小世界图

    Watts 和 Strogatz 定义了一个群聚系数,用于量化两个节点彼此连接,并同时连接到同一个节点可能性。 路径长度是两个节点之间平均距离度量,对应于社交网络中分离度。...它们不允许自环或多边;也就是说,节点不能拥有到它自身边,并且两个节点之间不能拥有多个边。 这是我这个过程实现。...集团是一组完全连接节点;也就是说,在集团中所有节点之间存在边。 假设一个特定节点u具有k个邻居。如果所有的邻居都相互连接,则会有k(k-1)/2个边。...如果节点邻居少于两个,则群聚系数未定义,但为简便起见,node_clustering返回 0。 否则,我们计算邻居之间可能边数量,total,然后计算实际存在边数量。...之后看看你是否可以修改这个函数来实现更快shortest_path_dijkstra版本。 练习 3: 下面的 BFS 实现包含两个性能错误。它们是什么?这个算法实际增长级别是什么

    72510

    《Julia 数据科学应用》总结

    3.假设你想创建一个列表,保存在一段文本中遇到不同(唯一)词以及词数量,你应该使用哪种数据结构来保存它们,可以容易地进行随后数据存取?...8.t-SNE 函数主要用途是什么? 构建数据空间 ---- 数据降维是数据科学中一个基本环节,因为它可以压缩并精简数据集,使数据分析方法更加有效。...6.对于回归问题,统计回归与神经网络之间关系是什么? 7.监督式学习中直推式系统主要局限性是什么?如何克服? 8.既然深度学习方法这么好,为什么不是所有人都应该使用?...节点 x 邻居——Graphs.out_neighbors(x,g)。 图度——图中所有节点最大值。 环检测需要找出是否有一条路径,从一个点开始并在同一个点结束。...图中连接节点 x 和其他节点最短路径一般是非常重要,因为使用它可以有效地在图中进行移动。

    1.7K40

    人工智能:第三章 搜索推理技术

    对已经在OPEN或CLOSED表上每一个M成员,确定是否需要更改通到n指针方向。对已在CLOSED表上每个M成员,确定是否需要更改图G中通向它每个后裔节点指针方向。    ...宽度优先搜索方法能够保证在搜索树中找到一条通向目标节点最短途径;这棵搜索树提供了所有存在路径(如果没有路径存在,那么对有限图来说,我们就说该法失败退出;对于无限图来说,则永远不会终止)。 ...f(n)——表示节点n估价函数值     建立估价函数一般方法:试图确定一个处在最佳路径节点概率;提出任意节点与目标集之间距离量度或差别量度;或者在棋盘式博弈和难题中根据棋局某些特点来决定棋局得分数...1、几个记号    令k(ni,nj)表示任意两个节点ni和nj之间最小代价路径实际代价(对于两节点间没有通路节点,函数k没有定义)。...、不确定表示    关于结论确定性也叫做规则确定性,它表示当规则条件被完全满足时,产生某种结论确定程度。它也是以赋予规则在)和!之间系数方法来表示

    1.7K40

    精读《算法题 - 二叉树中最大路径和》

    今天我们看一道 leetcode hard 难度题目:二叉树中最大路径和。 题目 二叉树中 路径 被定义为一条节点序列,序列中每对相邻节点之间存在一条边。...,而是可以横向蛇形游走,如下图: 尝试动态规划 第二想法是,这种蛇形游走路径,求路径最大值应该用什么方法?...大概率是暴力解法,因为 必须遍历完所有节点,才知道是否有更大可能性,而应对暴力解法最好策略是动态规划,那么应该如何定义状态?...这无疑是一个最有效兜底解法,但效率太低,那么为了提升效率,假设一条路径最大潜力已经计算过一次了,那么一条新路径经过时,就没必要重新算一遍。所以我们要寻找每个方向最大贡献。...再想想二叉树特征是什么,怎么样能稳定定义每个节点最大贡献?很容易想到是以树深度来定义,即 以当前节点向子节点遍历时,能带来最大贡献。这种最大贡献是比较容易计算

    24140

    零基础学并查集算法

    遇到判断敌友时候,只要一层层向上问,直到最高层,就可以在短时间内确定队长是谁了。由于我们关心只是两个之间是否连通,至于他们是如何连通,以及每个圈子内部结构是怎样,甚至队长是谁,并不重要。...因为模型中选择数据结构和算法显然会根据问题不同而不同,就动态连通性这个场景而言,我们需要解决问题可能是: 给出两个节点,判断它们是否连通,如果连通,不需要给出具体路径 给出两个节点,判断它们是否连通...建模思路: 简单而直观假设是,对于连通所有节点,我们可以认为它们属于一个组,因此不连通节点必然就属于不同组。随着Pair输入,我们需要首先判断输入两个节点是否连通。如何判断呢?...平方阶算法是存在问题,这种情况下,每次添加新路径就是“牵一发而动全身”,想要解决这个问题,关键就是要提高union方法效率,让它不再需要遍历整个数组。...还是有的,即将节点节点指向该节点爷爷节点,这一点很巧妙,十分方便且有效,相当于在寻找根节点同时,对路径进行了压缩,使整个树结构扁平化。

    1.2K80

    【算法】如何确定图(Graph)里有没有环(Cycle)?

    这里图就是计算机数据结构中说图结构(Graph),它包括两个要素:顶点和边,前者又称为节点节点表示事物抽象,而边则表示事物之间两两联系。 ? 边可以分为有方向和无方向两种。...有方向边表示两个节点之间单向连通,而无方向边则表示双向连通。边有方向图叫做有向图,反之叫做无向图。 ? 环则是指在途中一条由边组成路径,从一个节点出发,可以回到这个节点自身。 ?...在动手编程之前,我们首先要想清楚如何做,也就是说我们先要能够找到一个用自然语言可以描述办法,来确定无向图中是否有环。...这种方法描述如下: 使用拓扑排序可以判断一个无向图中是否存在环,具体步骤如下: 1. 求出图中所有节点度。 2. 将所有度 <= 1 节点入队。 3....若第 i 行第 j 列元素为 1,则说明 i 节点和 j 节点相邻,也就是有一条无向边存在于二者之间,若为 0,则说明节点 i 和 j 不相邻。 由此图一和图二对应矩阵分别是这样: ?

    8.8K20

    测试人员都是画画大神,让我看看谁还不会用代码图?

    给大家30秒时间,一起来思考这是什么?这是某系统登陆模块功能初始类图。随着现代软件不断复杂化,代码图(Code Graphs)为测试人员提供了一种直观方法,让复杂代码逻辑易于理解。...代码图由以下两个部分组成:节点(Nodes) 表示代码元素,如类、对象、活动;边(Edges) 表示节点之间关系,如关联、继承、依赖。...以新闻推送算法为例, 该算法根据用户兴趣和互动情况,对用户进行个性化推荐。最初,测试人员需要仔细逐行检查代码,这种既耗时又费力方法很难确定所有潜在测试场景。...2 区分路径可行性识别有意义路径挑战:代码图中所有路径并非都代表有效或有意义执行序列。...这涉及考虑循环条件、预期用户输入和潜在错误场景等因素,以确定对测试影响最大路径。通过理解和解决这些限制,测试人员可以有效地利用代码图。

    7010

    机器学习之K近邻(KNN)算法

    因此暴力计算只适合少量样本简单模型,那么有没有什么方法适用于大样本数据,有效降低距离计算成本呢?那是当然,我们下面主要介绍KD树和球树方法。...二叉搜索:对于目标点,通过二叉搜索,能够很快在KD树里面找到包含目标点叶子节点。 回溯:为找到最近邻,还需要进行回溯操作,算法沿搜索路径反向查找是否有距离查询点更近数据点。...更新最近邻:返回叶子节点节点,检查另一叶子节点包含超矩形体是否和超球体相交,如果相交就到这个子节点中寻找是否有更近最近邻,有的话就更新最近邻。...3.2球树搜索最近邻 KD树在搜索路径优化时使用是两点之间距离来判断,而球树使用是两边之和大于第三边来判断。相对来说球树判断更加复杂,但却避免一些无效搜索,下述为球树搜索最近邻过程。...自上而下贯穿整棵树找出包含目标点所在叶子,并在这个球里找出与目标点邻近点,这将确定目标点距离邻近点上限值。

    1.4K20

    复杂性思维第二版 二、图

    例如,Dijkstra 最短路径算法,是从图中找到某个节点到所有其他节点最短路径有效方式。路径两个节点之间,带有边节点序列。 图节点通常以圆形或方形绘制,边通常以直线绘制。...Erdős-Rényi 图(ER 图)特征在于两个参数:n是节点数量,p是任何两个节点之间存在概率。...如果每个节点到每个其他节点存在路径,那么无向图是连通。 在 ER 图中,当p较小时,图是连通图概率非常低,而p较大时接近1。在这两种状态之间,在p特定值处存在快速转变,表示为p*。...不久之后,我们将修改此代码来生成 ER 图,但首先我们将开发函数来检查图是否是连通。 2.5 连通图 如果每个节点到每个其他节点存在路径,这个图就是连通图。...稍后我们将寻找方法,来使此算法更有效率。

    93930
    领券