当前位置: 首页 > news >正文

响应式商品展示的网站做现金贷的网站有哪些

响应式商品展示的网站,做现金贷的网站有哪些,网站二次开发多少钱,网站建设h5是指的那一块Tarjan 用于在有向图中查找强连通分量的算法介绍 Tarjan算法是一种用于在有向图中查找强连通分量的高效算法,由Robert Tarjan在1972年提出。强连通分量是指在有向图中,如果从顶点u到顶点v以及从顶点v到顶点u都存在一条路径,那么顶点u和顶点v…

Tarjan 用于在有向图中查找强连通分量的算法介绍

Tarjan算法是一种用于在有向图中查找强连通分量的高效算法,由Robert Tarjan在1972年提出。强连通分量是指在有向图中,如果从顶点u到顶点v以及从顶点v到顶点u都存在一条路径,那么顶点u和顶点v是强连通的。这些顶点组成的集合被称为强连通分量(Strongly Connected Component,简称SCC)。

Tarjan算法的核心思想是通过深度优先搜索(DFS)遍历图,并使用堆栈来追踪搜索过程中的顶点。在遍历的过程中,对每个顶点进行标记,记录其在搜索树中的深度和最小后向边的深度。如果发现某个顶点的后继节点指向了一个已经被访问过的顶点,并且这个顶点在当前的DFS搜索树中(即它还在栈中),那么这个顶点及其所有后继节点(在栈中且未被处理为其他强连通分量的部分)构成一个强连通分量。

Tarjan算法中最重要的两个数组是low[maxn]和dfn[maxn]:

low[u]代表u可以到达的深度最低的节点的深度值,即u能追溯到的最早被访问到的节点的时间戳。
dfn[u]代表u在DFS树中的深度,即u被访问时的时间戳。

算法的基本步骤如下:

初始化所有顶点的dfn和low值为未定义(通常可以设为无穷大或特定标记)。
对每个未访问的顶点v,进行DFS遍历。
将v标记为已访问,并将其dfn[v]和low[v]设置为当前时间戳。
将v压入栈中。
遍历v的所有邻接点w。
如果w未访问过,则递归地对w进行DFS,并在返回后更新low[v]为min(low[v], low[w])。
如果w已访问过且在栈中(即w是v的后继节点且尚未被处理为其他强连通分量的部分),则更新low[v]为min(low[v], dfn[w])。
如果dfn[v] == low[v],则栈中从v到栈顶的所有顶点构成一个强连通分量,将它们弹出栈并标记为同一个强连通分量。

Tarjan算法的时间复杂度为O(V + E),其中V表示图中的顶点数,E表示图中的边数。由于只需要一次DFS遍历即可找到所有的强连通分量,因此Tarjan算法是一种高效的强连通分量查找算法。

以上是对Tarjan算法用于在有向图中查找强连通分量的简要介绍。如需更详细的信息或示例代码,请参考相关算法书籍或在线资源。

Tarjan 用于在有向图中查找强连通分量的算法python实现样例

以下是Python中实现Tarjan算法查找强连通分量的示例代码:

class Tarjan:def __init__(self, graph):self.graph = graphself.num_nodes = len(graph)self.index = 0self.lowlink = [0] * self.num_nodesself.on_stack = [False] * self.num_nodesself.stack = []self.scc = []def tarjan_scc(self):for i in range(self.num_nodes):if self.lowlink[i] == 0:self.strong_connect(i)return self.sccdef strong_connect(self, v):self.index += 1self.lowlink[v] = self.indexself.stack.append(v)self.on_stack[v] = Truefor w in self.graph[v]:if self.lowlink[w] == 0:self.strong_connect(w)self.lowlink[v] = min(self.lowlink[v], self.lowlink[w])elif self.on_stack[w]:self.lowlink[v] = min(self.lowlink[v], self.lowlink[w])if self.lowlink[v] == self.index:scc_component = []while True:w = self.stack.pop()self.on_stack[w] = Falsescc_component.append(w)if w == v:breakself.scc.append(scc_component)

使用示例:

# 创建有向图的邻接表表示
graph = [[1],[2],[0, 3],[4],[5],[3]
]# 创建Tarjan对象
tarjan = Tarjan(graph)# 调用tarjan_scc方法查找强连通分量
scc = tarjan.tarjan_scc()# 输出强连通分量
for component in scc:print(component)

输出结果:

[0, 1, 2]
[3]
[4, 5]

以上代码实现了Tarjan算法用于在有向图中查找强连通分量。算法首先初始化相关数据结构,包括索引、低链接、栈等。然后按照Tarjan算法的步骤进行深度优先搜索,并在搜索过程中记录每个节点的索引和低链接值。当找到一个强连通分量时,从栈中弹出节点,直到找到当前节点为止,并将这些节点组成一个强连通分量。最终,算法返回所有的强连通分量。

http://www.yayakq.cn/news/425673/

相关文章:

  • 做电影网站量刑标准vi设计经典案例
  • 自己做电影网站怎么赚钱2023新闻大事10条
  • 南宁网站建设公司利润ASP net网站开发资料
  • 网站建设 申请周口航迪科技网站建设公司怎么样
  • 做网站自动赚钱qq企业邮箱怎么申请
  • 网站建设哪家公司好网站建设秦皇岛seo网站推广
  • 上海网站建设知识 博客网站建设与推广销售户话术
  • 北京网站优化昆山网站建设官网
  • 济南做网站优化哪家好长沙网站建设维护
  • 食品网站网页设计渭南做网站的公司电话
  • 做好网站怎么做appwordpress图片上传后显示不出来
  • 徐州品牌网站建设|徐州网站优化|徐州网络公司-徐州启思信息科技京东网上商城官网
  • 网站头部怎样做有气势濮阳市城乡一体化示范区七星医院
  • 中山专业手机网站建设刚刚
  • 深圳布吉做网站如何写网站开发的分析
  • 做盗版网站 国外服务器吗河南省住房和城乡建设厅电话
  • 手机分销网站公司上海建设银行公司网站
  • 网站开发工作内容如何调整网站板块位置
  • 做旅游网站宣传营销方案格式
  • 分类门户网站开发团队wordpress 鼠标点击
  • 网站建设设计风格描述国内做企业英文网站用什么cms
  • 个人网站怎么命名桂平市住房和城乡建设局门户网站
  • 常德网站建医院网站规划方案
  • 网站功能设计有哪些要求企业网站开发设计
  • 汉中网站建设哪家好c语言开发网站后端
  • 网页制作和网站制作有什么区别中国园林网
  • 厦门公司注册网站博客网站wordpress
  • 提取卡密网站怎么做301 wordpress
  • 网页导航设计步骤长沙seo优化公司哪家好
  • 竞猜网站建设wordpress 子网站