图的强联通分量

强连通分量(SCC, Strongly Connected Components) 强连通分量及其Tarjan算法 阅读详情

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.youkuaiyun.com/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.youkuaiyun.com/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------

 

package com.data.struct;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;

public class StrongConnectedComponent {
	private Node[] list;
	private int time=0;
	private boolean isComponet=false;
	public StrongConnectedComponent(){
		
	}
	public StrongConnectedComponent(int v,int e){
		list=new Node[v];
		for(int i=0;i<v;i++){
			Node node=new Node();
			node.id=i;
			list[i]=node;
		}
		for(int i=0;i<e;i++){
			int v1=new Random().nextInt(v);
			int v2=new Random().nextInt(v);
			if(v1==v2){
				continue;
			}
			while(true){
				Node node=list[v1];
				boolean already=false;
				while(node.next!=null){
					if(node.next.id==v2){
						already=true;
						break;
					}
					node=node.next;
				}
				if(already==true){
					break;
				}
				Node ex=new Node();
				ex.id=v2;
				node.next=ex;
				break;
			}
		}
	}
	
	public void strongComponentDepthFirstSearch(Node[]list){
		Arrays.sort(list, new Comparator<Node>() {

			@Override
			public int compare(Node o1, Node o2) {
				if(o1.f>o2.f){
					return -1;
				}else if(o1.f<o2.f){
					return 1;
				}else{
					return 0;
				}
			}
			
		});
		int[]order=new int[list.length];
		for(int i=0;i<list.length;i++){
			order[i]=list[i].id;
		}
		Arrays.sort(list, new Comparator<Node>() {

			@Override
			public int compare(Node o1, Node o2) {
				if(o1.id<o2.id){
					return -1;
				}else if(o1.id>o2.id){
					return 1;
				}else{
					return 0;
				}
			}
			
		});
		for(int i=0;i<order.length;i++){
			if(list[order[i]].color==Node.WHITE){
				dfsVisit(list[order[i]]);
			}
		}
	}
	
	public void depthFirstSearch(){
		for(int i=0;i<list.length;i++){
			if(list[i].color==Node.WHITE){
				dfsVisit(list[i]);
			}
		}
	}
	
	private void dfsVisit(Node node){
		time++;
		node.d=time;
		node.color=Node.GRAY;
		Node w=list[node.id];
		Node u=w;
		while(w.next!=null){
			if(list[w.next.id].color==Node.WHITE){
				list[w.next.id].color=Node.GRAY;
				list[w.next.id].parent=u;
				dfsVisit(list[w.next.id]);
			}
			w=w.next;
		}
		node.color=Node.BLACK;
		time++;
		node.f=time;
	}
	
	public void printStrongComponent(StrongConnectedComponent t){
		System.out.println("strong component");
		for(int i=0;i<t.list.length;i++){
			Node s=t.list[i];
			isComponet=false;
			printStrongComponent(s);
			System.out.println();
		}
	}
	
	public void printStrongComponent(Node v){
		if(v.parent==null&&!isComponet){
			return;
		}else if(v.parent==null&&isComponet){
			System.out.print(v.id+"=>");
		}else {
			isComponet=true;
			printStrongComponent(v.parent);
			System.out.print(v.id+"=>");
		}
	}
	
	public void printDepth(Node v){
		Node s=list[0];
		if(v==s){
			System.out.print(s.id+"=>");
		}else if(v.parent==null){
			System.out.print(v.id+"=>");
		}else {
			printDepth(v.parent);
			System.out.print(v.id+"=>");
		}
	}
	
	public void print(){
		for(int i=0;i<list.length;i++){
			Node node=list[i];
			System.out.print(node.id+"=>");
			while(node.next!=null){
				System.out.print(node.next.id+"=>");
				node=node.next;
			}
			System.out.println();
		}
		
	}
	public void printAllDepth(){
		System.out.println("path");
		for(int i=0;i<list.length;i++){
			printDepth(list[i]);
			System.out.println();
		}
	}
	
	public StrongConnectedComponent tansform(){
		StrongConnectedComponent grapic=new StrongConnectedComponent();
		grapic.list=new Node[list.length];
		for(int i=0;i<list.length;i++){
			Node node=new Node();
			node.id=list[i].id;
			node.d=list[i].d;
			node.f=list[i].f;
			grapic.list[i]=node;
		}
		for(int i=0;i<list.length;i++){
			Node node=list[i];
			Node w=node;
			while(w.next!=null){
				Node last=grapic.list[w.next.id];
				while(last.next!=null){
					last=last.next;
				}
				Node next=new Node();
				next.id=node.id;
				last.next=next;
				w=w.next;
			}
		}
		return grapic;
	}
	
	public static class Node{
		public static final int WHITE=1;
		public static final int BLACK=2;
		public static final int GRAY=3;
		private int id;
		private Node next;
		private int color=WHITE;
		private int d=Integer.MAX_VALUE;
		private Node parent;
		private int f;
		
		
	}
	public static void main(String[] args)throws Exception {
		StrongConnectedComponent g=new StrongConnectedComponent(5,10);
		g.print();
		g.depthFirstSearch();
		g.printAllDepth();
		StrongConnectedComponent t=g.tansform();
		System.out.println("t======");
		t.print();
		t.strongComponentDepthFirstSearch(t.list);
		t.printStrongComponent(t);
		
	}

}

 

图论——强连通分量详解! 强连通分量等概念Tarjan算法的过程与实现就讲这么多,平时练习多注意vector与链式前向星的转换。今宵东方不见日,总有夜尽天明时。加油拜拜~~~(特意标红。。。 阅读详情

相关推荐

算法竞赛——强连通分量

强连通分量 强连通的定义是:有向图 G 强连通是指,G 中任意两个结点连通。 强连通分量(Strongly Connected Components,SCC)的定义是:极大的强连通子图也可以说,在强连图图的基础上加入一些点和路径,使得当前的图不在强连通,称原来的强连通的部分为强连通分量。 DFS生成树 DFS生成树是根据DFS搜索顺序构成的一颗生成树,形如(自上而下,自左而右): 有向图的 DFS 生成树主要有 4 种边: 树边(tree edge):示意图中以黑色边表示,每次搜索找到一个还没有访问过

TGX的博客 6181

强连通分量(tarjan算法)

强连通:两个点u,v可以互相到达强连通分量,一个图中每一块的任意点可以互相到达的数量(不一定整个图强连通,但是局部强连通)

WQhuanm的博客 3762

DFS求有向图强联通分量

在算法导论的图论算法里,有一个小节讲的是利用两次DFS和一次转置图来求有向图的强联通分量,觉得整个解法很有意思,所以想分享给大家一起瞅瞅。 先修知识: 主要是DFS的运行过程,以及我们将在对某个点完成DFS过程时标记一个完成时间,在这里用十分伪的代码描述一下。 void DFS(Graph G,Vertex u) { visit u; for each Vertex v adja

422

强连通分量-tarjan算法缩点

强连通分量:在有向图G中,如果两个顶点u,v间(u->v)有一条从u到v的有向路径,同时还有一条从v到u的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量。简单点说就是:如果一个有向图中,存在一条回路,所有的结点至少被经过一次,这样的图为强连通图。在强连图图的基础上加入一些点和路径,使得当前的图不在强连通,称原来的强连通的部分为强连通分量。

c__chong的博客 3501

【全开源】旅游系统源码(Uniapp+FastAdmin+ThinkPHP)

通过源码的灵活配置和定制开发,我们可以根据旅游企业的实际需求,快速构建出符合其业务特点的旅游系统。旅游系统源码,作为这一变革的基石,为旅游业的数字化转型提供了强有力的支撑。通过深入研究和应用旅游系统源码,我们能够构建出更加智能、便捷、个性化的旅游服务平台,满足游客日益增长的旅游需求。国际化发展:随着全球化的深入发展,旅游系统源码也将迎来国际化的发展机遇,为国内外游客提供更加便捷、高效的旅游服务。跨界融合:旅游系统源码将与更多领域进行跨界融合,如与交通、餐饮、购物等行业的结合,为游客提供更加丰富的旅游体验。

2401_84413757的博客 2155

python调用海康工业相机并用opencv显示(整体实现)

python语言调用海康机器人(hikrobotics)工业相机 第一章 Python 语言下连接海康工业相机,并获取数据 文章目录 系列文章目录 前言 目录 python语言调用海康机器人(hikrobotics)工业相机 文章目录 前言 一、底层接口的准备 二、使用步骤 1.引入库 2.枚举设备 3.判断设备类型 4.输入连接设备 5.创建相机实例并创建句柄 6.打开设备 7.获取相关参数 8.主动获取图像 9.开启取流并获取每张.

qq_39570716的博客 5万+

牛的舞会给定一个图,要求图中节点数大于1的强联通分量个数。

题目大意:给定一个图,要求图中节点数大于1的强联通分量个数。

no_play_no_games的博客 323

修改windows npt时钟服务器

然而,由于网络环境的限制,微软的NTP服务器在国内体验并不好,有时,时间误差能达到5S以上。ntp.sjtu.edu.cn 202.120.2.101 (上海交通大学网络中心NTP服务器地址)s2h.time.edu.cn 四川大学网络管理中心。s2j.time.edu.cn 大连理工大学网络中心。s2g.time.edu.cn 华东南地区网络中心。s2d.time.edu.cn 西南地区网络中心。s2e.time.edu.cn 西北地区网络中心。s2f.time.edu.cn 东北地区网络中心。

qq_37371407的博客 2282

[SNOI 2017] 炸弹 loj2255 线段树优化建图 Tarjan求强联通分量

题目链接 这个题一开始一直很懵逼 不是很理解建图 手动模拟一下才发现这个建图的妙处 首先我们把所有的点都放到线段树的叶子上 然后每个点对于它能炸到的logloglog个区间进行连边 这样子一个强连通分量里的点一定是炸一个就能全炸的 缩完点我们考虑用拓扑排序来进行dpdpdp 我们发现如果vvv能被uuu引爆,那么uuu就能引爆vvv能引爆的节点,所以我们要建反图进行拓扑排序dpdpd...

lunch__的博客 260

用Blender给ArduPilot无人船编队设计灯光秀:从建模到飞行的保姆级教程

本文详细介绍了如何利用Blender和ArduPilot为无人船编队设计灯光秀的全流程技术方案。从3D动画设计、坐标转换、数据导出到ArduPilot飞控配置和灯光控制,提供了一套完整的保姆级教程,帮助开发者实现水面灯光编队表演。

weixin_29213525的博客 387

STM32实战:滑模观测器与PLL锁相环融合的FOC无感控制精解

本文深入解析了STM32平台下结合滑模观测器(SMO)与PLL锁相环的无感FOC控制技术。通过实战案例详细介绍了PLL锁相环在消除SMO高频抖振、提升角度跟踪精度方面的关键作用,并分享了工程调参技巧、C语言实现细节及系统联调方法,为电机控制开发者提供了一套完整的解决方案。

weixin_30838873的博客 190

流图中的强联通分量

在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。   网上关于强联通分量的理论与分析十分的多,这里不再赘...

yeshahayes的博客 443

[24] cuda 应用之 nppi 实现图像颜色通道变换

[24] cuda 应用之 nppi 实现图像颜色通道变换

yohnyang的博客 343

图算法(十八):联通分量算法(Connected Component)【联通分量代表图中的一个子图,当中所有节点都相互连接】【考虑路径方向的为强联通分量、不考虑路径方向的为弱联通分量】

一、概述 联通分量代表图中的一个子图,当中所有节点都相互连接。 考虑路径方向的为强联通分量(strongly connected component); 不考虑路径方向的为弱联通分量(weakly connected component); 联通分量算法(Connected Component)计算得到的是弱联通分量。 适用场景: 二、 三、 参考资料: 联通分量算法(Connected Component) ...

u013250861的博客 880

详细分析 Bladex中的swagger-resources资源未授权访问的解决方法

有如下方式,网关过滤、去除配置以及修改代码还有隐藏彩蛋(附Demo),推荐阅读

码农研究僧的博客 1728

【AI面试】 Python 的装饰器

Python装饰器是一种高阶函数,用于在不修改原函数代码的情况下增强其功能。它通过@语法糖接收目标函数作为参数,并返回一个包含额外逻辑(如日志、缓存、权限验证等)的新函数。装饰器的核心价值在于代码复用和解耦,符合开闭原则,典型应用包括性能分析、权限控制等场景。例如,@timer_decorator可自动为函数添加耗时统计功能。本质上,@decorator等价于func = decorator(func),实际调用的是装饰器返回的包装函数。进阶技巧包括使用@functools.wraps保留原函数元信息。装饰

钱多多先森 185

圖的強聯通分量算法

Tarjan:              學習資料:傳送門              通俗易懂版:傳送門 kosaraju:               傳送門     POJ 2186 题意:A认为B厉害, B认为C厉害, 则A认为C厉害, 求有多少个牛被其他n-1个牛都认为厉害 首先给定的图没有保证一定连通、所以我们开始处理是不是有多个连通块、 如果只有一个连通块那么缩点...

傻傻分不清、 2648

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

图的强联通分量模板

#include #include #include #include using namespace std; #define maxn 10010 int dfn[maxn]; int low[maxn]; vectorG[maxn]; int N,M; int ins[maxn]; int index; int cnt; int belong[maxn], st[maxn]; int

favomj的博客 319

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

求解有向图的强联通分量的Java实现

有向图的强联通分量(SCC)是一个最大节点集合,在该结点中满足对于任意一个节点对u和v,同时存在从u到v的路径和从v到u的路径。下图便是一个强联通分量的例子,该图中有4个强联通分量。 根据强联通分量的定义,不难得出其一个重要的性质,如果将原图转置,在得到的转置图中,其强联通分量是不变的。其实对一个图中的强联通分量进行合并,就是把一个强联通分量看做是一个等价类将这个等价类合并成一个点,亦或

仰起脸笑得像满月 818

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

强联通分量分解

强联通分量分解一个有向图的强联通分量的定义如下: 若对于子图中的任意两个节点u,vu,v总存在 uu 到 vv 的路径则这个子图称作这个图G的一个强联通分量 对于图的强联通分量分解,《算法导论》中介绍了Kosaraju Algorithm.这个算法思想很简单: 1. dfs遍历有向图. 计算节点访问结束的时间. 2. 计算 GTG^T 即边反向后的图. 3. 按照结束时间递减的顺序,dfs

taotao 的大学墓志 881

51nod1072 求解一个图里面的强联通分量

给出一个无向图G的顶点V和边E。进行Q次查询,查询从G的某个顶点V[s]到另一个顶点V[t],是否存在2条不相交的路径。(两条路径不经过相同的边) (注,无向图中不存在重边,也就是说确定起点和终点,他们之间最多只有1条路) 这个题目,我们看到是一个无向图。可以转换成有向图之后再来处理。我们可以想到,两个点因为本来是无向的转化成有向的之后,那么看有没有两条不相交的路径就是看这

liuyanfeier的专栏 780

强联通分量(重制版)

本文详细介绍了强连通分量(SCC)的概念及其相关算法。

kamlam96的博客 733

HDU 3836 强联通分量

点击打开链接 题意:就是问你最少连多少边之后所有点都可以互相到达 思路:问的就是强联通的含义,先进行强联通分量进行缩点,如果强联通分量为1,恭喜你图已经联通,输出0即可,否则我们剩下的点是强联通缩点之后的点,其实我们就是可以将这些点当成要联通的点就行了,而现在已经缩过点了,所以我们这个残图只要满足每个点都有出度和入度就可以形成强联通分量为1的图,但是这个判断前提必须是已经缩过点之后的残图,现在

Dan__ge的博客 995

图论(强联通分量)

在图论中,特别是在讨论有向图(Directed Graph)时,我们常常需要了解图的结构特性,比如强联通分量(Strongly Connected Components, SCC)。了解强联通分量中的各种边对于理解图的整体结构以及某些算法(如Tarjan's算法或Kosaraju's算法)是非常重要的。

weixin_59561323的博客 754

hdu3639 Hawk-and-Chicken(强联通分量+反建图dfs)

targan算法训练 题目大意:给一个有向图,如果u是v的粉丝,v是w的粉丝,那么 u是w的粉丝,求最大粉丝的数量和点。 可以想到最大粉丝点肯定是存在在出度为零的强联通分量中,因为如果不是这样肯定有另一个他通往的点比他的粉丝多,而求最大粉丝点这里,用到了反建图,因为方便dfs来搜索每个点,搜索过程中,每个点首先有他自己强联通分量内的n-1个点以及他到达的强联通分量的n个点,然后搜索即可。 #inc...

zxc757126309的博客 2640

【POJ1236】Network of Schools 强联通分量缩点(本文kosaraju)

求强联通分量的极端好写算法:kosaraju详解!poj1236引题,你确定你要坚持你的大tarjan?

辗转山河弋流歌 2598
上一篇: 有向无环图的拓扑排序
下一篇: 深林表示的不相交集合
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值