图的深度优先搜索

【算法】蓝桥杯dfs深度优先搜索之图连通总结 前言 上两篇文章 → [《【算法】蓝桥杯dfs深度优先搜索之排列组合总结》](https://blog.youkuaiyun.com/midnight_time/article/details/88722460)      → [《【算法】蓝桥杯dfs深度优先搜索之凑算式总结》](https://blog.youkuaiyun.com/midnight_time/article/details/88673468)... 阅读详情

发布一个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.Random;

public class Graphic {
	private Node[] list;
	private NodeArrayQueue queue;
	private int time=0;
	public Graphic(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;
			}
		}
		queue=new NodeArrayQueue((v*(v-1)/2)+5);
	}
	
	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];
		while(w.next!=null){
			if(list[w.next.id].color==Node.WHITE){
				list[w.next.id].color=Node.GRAY;
				list[w.next.id].parent=w;
				dfsVisit(list[w.next.id]);
			}
			w=w.next;
		}
		node.color=Node.BLACK;
		time++;
		node.f=time;
	}
	
	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 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 {
		Graphic g=new Graphic(5,30);
		g.print();
		g.depthFirstSearch();
		g.printAllDepth();
		
		
	}

}

上面程序有个bug,修改后如下:

 

package com.data.struct;

import java.util.Random;

public class GraphicDepthFirst {
	private Node[] list;
	private int time=0;
	public GraphicDepthFirst(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 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 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 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 {
		GraphicDepthFirst g=new GraphicDepthFirst(5,30);
		g.print();
		g.depthFirstSearch();
		g.printAllDepth();
		
		
	}

}

 

 

 

 

 

深度优先搜索--以及图的基本操作 临接:如果两个顶点被同一条边连接,就称这个顶点是临接的。 路径:路径是边的序列 连通图:如果至少有一条路径可以连接起所有的顶点,那么称这个图是连通的。 邻接矩阵:邻接矩阵是一个二维数组,数组项表示两点之间是否存在遍。如果有N个顶点,邻接矩阵就是N*N的数组。邻接表: 邻接表是一个链表数组(或者链表的链表)。每个单独的链表表示邻有哪些顶点与当前顶点邻接。 在图中添加顶点和边: 为了向图 阅读详情

相关推荐

数据结构之图的深度优先搜索

下面来讲一下图的深度优先搜索的方法:

bbewx的专栏 2421

图的遍历(深度优先搜索)

1、深度优先搜索遍历过程 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。 它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。 若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有

Unique-You的博客 13万+

C++图的深度优先搜索遍历

C++图的深度优先搜索遍历!

PanDaoxi 778

采用邻接矩阵形式存储图,进行图的深度优先搜索并输出结果。

内容: 采用邻接矩阵形式存储图,进行图的深度优先搜索并输出结果。 步骤: 算法分析 本题需要利用邻接矩阵的形式存储图,并对图进行深度优先搜索并输出结果。大体上可以分为两个部分,一是采用邻接矩阵的方式存储图,二是对图进行深度优先搜索并输出。 对于第一部分,图是一种结构复杂的数据结构,图的常用存储结构有四种,分别为邻接矩阵、邻接表、十字链表和邻接多重表。其中相较于十字链表和邻接多重表来说,邻接矩阵和邻接表较为简单,也更好理解。此题采用邻接矩阵形式存储图,存储时分为两个部分,顶点的信息和顶点之间的关系,分

weixin_49647945的博客 1715

用KalmanNet搞定非线性状态估计:当卡尔曼滤波遇上神经网络

本文深入探讨了KalmanNet如何将神经网络与卡尔曼滤波结合,以解决非线性状态估计中的模型失配和噪声不确定性问题。通过保留经典滤波框架并用RNN学习卡尔曼增益,该方法在无人机导航、机器人定位等场景中实现了模型驱动与数据驱动的优势互补,提升了估计的鲁棒性和灵活性。

mango的博客 315

使用Eggjs做服务端获取微信小程序云开发数据库的access_token

最近自己想写了一个微信小程序,恰巧里面有个云开发,恰巧里面有个数据库,那懒人的我,就直接用云开发里面的数据库了,做测试或者正式也好,对于刚开始来说,免费的配额是够用的。 后来想到在小程序云开发上面的数据怎么看才方便?刚好微信小程序有一个服务端API,那就方便很多了,那就直接敲个服务端来获取云开发上数据库的数据出来到自己的后台上面,那以后管理起来也方便很多。 看了一下服务端api之后,发现有三个重要...

kalenE992的博客 1705

图的深度优先搜索-递归

图的深度优先搜索的过程: (1)从图的某个顶点V出发,访问V. (2)找出刚访问过的顶点的第一个未被访问的邻接点,访问该顶点。以该顶点为新顶点,重复此步骤,直到 刚顶点没有未bedi被访问的邻接点为止。 (3)返回前一个访问过的且仍有未被访问的邻接点的顶点,找出该din 顶点的下一个未被访问的邻接点,访问该顶点。 (4)重复步骤(2)和(3),直到图中所有的顶点都被访问过,搜索结束。 例如,上图的深度遍历过程如下: (1)从a顶点出发,访问a。 (2)从a出发,访问第一个未被访问的邻接

千言万语ROOM 2332

[金仓数据库V8R6]更换授权

上传授权,使用mv license_xxx_0.dat /home/kingbase/KingbaseES/license.dat替换每个授权,并使用ls -l license.dat确保替换前后属主和权限不变。根据步骤1的数据目录位置,执行/home/kingbase/KingbaseES/Server/bin/sys_ctl -D /home/kingbase/KingbaseES/data reload使新的授权文件生效。该参数意义为授权剩余有效天数,查询结果为新授权中有效期间的天数即为替换成功。

l04050924的博客 3712

图的创建及深度优先搜索

图的创建及深度优先搜索

x2656271356的博客 551

退火朗之万动力学采样

退火朗之万动力学采样(Simulated Annealing Langevin Dynamics Sampling)结合了退火技术和朗之万动力学,是一种用于分子模拟和统计物理中的计算方法。这种方法可以帮助系统从局部最小值中逃逸,以找到全局最小值或进行有效的配置空间探索。

weixin_39699362的博客 1951

GPS-SDR-SIM使用详解

GPS-SDR-SIM 是一款开源工具,能够生成 GPS 基带信号数据流,这些数据流可通过软件定义无线电(SDR)平台(如 ADALM-Pluto、bladeRF、HackRF、USRP 等)转换为射频(RF)信号。简单来说,它能模拟 GPS 卫星信号,帮助开发者或爱好者测试 GPS 接收设备的性能,而无需依赖真实的卫星信号。

qq_35621280的博客 1241

图的深度优先搜索(dfs)

图的遍历, 即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历 (2)广度优先遍历 图的深度优先搜索(Depth First Search) 指的是在搜索时,如果遇到一个结点既有子结点,又有兄弟结点,那么先找子结点,然后找兄弟结点。 深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点, 可以这样理解:每次都在

wujianrenn的博客 9558

SAP Business Technology Platform 支持的技术栈

SAP Business Technology Platform(简称 BTP)是 SAP 提供的一个综合技术平台,旨在帮助企业实现业务转型和创新。BTP 融合了数据库管理、应用开发、集成、分析和智能技术,为企业提供从基础架构到端到端应用的全面服务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1568

noj19 基于图的深度优先搜索策略

//基于图的深度优先搜索(邻接表) #include <stdio.h> #include <stdlib.h> #define max 200 typedef struct arcnode{ //arc弧, 边表 int adjvex; //该弧指向的节点(adj 邻域) // int weight; //权重 struct arcnode *next; //同一节点下一条边 }arcnode;.

qq_42110967的博客 802

PCL Fast Global Registration 快速全局配准(源码版)

Fast Global Registration(FGR)是一种经典的点云粗配准算法,已集成到Open3D和CloudCompare等软件中。本文介绍了该算法的源码实现及优化方法,包括如何通过修改源码直接读取点云进行配准,而不依赖文件中读取特征描述子。文章还提供了关键参数设置(如最大迭代次数、匹配距离等)。算法实现简单高效,未来计划发布基于纯PCL的版本。源码和论文链接已附上,供开发者参考。

点云侠的博客 383

Vue3 - Element Plus上传组件el-upload上传多个文件时,让on-change监听事件仅执行一次并获取最终文件列表方法(开启多选文件并手动上传,拿到文件列表统一循环调用接口上传)

vue3,elementplus,Upload上传,el-upload,文件上传组件,上传组件on-change里执行多次,取消自动上传后change重复执行问题,upload上传多个文件后导致on-change执行多次拿不到最终文件列表,Element-plus的upload组件on-change不断执行怎么办,上传多个文件多次执行调用,上传多个文件时如何只执行一次on-change方法拿到最终的文件列表,vue3elementplus上传组件开启多个上传后导致change方法执行好几次,仅调用一

🏆 前端领域优质创作者 1万+

邻接表形式的图的深度优先搜索

#include #include #include #define MaxVertexNum 1000 bool Visited[MaxVertexNum]; /**< 记录顶点是否已经被访问了 */ typedef int Vertex; typedef int WeightType; typedef char DataType; /**<

royzdr的博客 820

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

图的遍历之深度优先搜索

深度优先搜索遍历类似于树的先根遍历,是树的先根遍历的推广。假设初始状态是图中所有的顶点未曾访问过,则深度优先搜索可从从中某个顶点出发,访问该顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问过,则另选图中一个未曾访问的顶点作为起始点,重复上述过程,直至图中所有顶点都被访问过为止。当以邻接表作图的存储结构时,深度优先搜索遍历

yang20141109的专栏 1391

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++邻接表存储图的深度优先搜索

1. 在数据结构中对于图的存储主要有三种方式,分别为邻接矩阵,邻接表和边集,前两种比较常用,下面使用的是C++语言vector来实现邻接表并且实现深度优先搜索 因为对于初学者来说,使用链表来实现邻接表的话过程比较复杂,不太容易理解,存在多个结构体之间的相互嵌套,所以我们在学习的时候可以使用简单一点的工具来实现邻接表 2. 下面是具体的实现过程: ① 由于vector变长数组之称,因此可以开一...

二哈 1341

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 图的广度优先搜索
下一篇: 有向无环图的拓扑排序
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、付费专栏及课程。

余额充值