图-深度优先遍历

article/2025/9/13 1:41:21

概述

深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第-一个邻接结点,可 以这样理解:每次都在访问完当前结点后首先访问当前结点的第一个邻接结点。

深度优先遍历下图所有顶点;
在这里插入图片描述
思路:

1、先访问初始节点v,并标记v为已访问。
2、查找结点v的第一个邻接节点w。
3、若w存在,则继续执行4,如果w不存在,则退回到第1步。
4、若w未被访问,对w进行深度优先遍历(即把w当做另一个v,然后进行123步骤)。
5、遍历完v第一个邻接节点后,查找结点v的下一个邻接节点,转到步骤3。

代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** 深度优先遍历* @author gufusheng* @time 2021/11/11 19:17*/
public class DFSTest {public static void main(String[] args) {char[] vertex = { 'A', 'B', 'C', 'D', 'E', 'F', 'G'};//邻接矩阵int[][] matrix = new int[vertex.length][vertex.length];matrix[0]=new int[]{0,5,7,0,0,0,2};matrix[1]=new int[]{5,0,0,9,0,0,3};matrix[2]=new int[]{7,0,0,0,8,0,0};matrix[3]=new int[]{0,9,0,0,0,4,0};matrix[4]=new int[]{0,0,8,0,0,5,4};matrix[5]=new int[]{0,0,0,4,5,0,6};matrix[6]=new int[]{2,3,0,0,4,6,0};Graph graph = new Graph(matrix, vertex);graph.dfs();}}
class Graph {public char [] vertexList; // 顶点数组public boolean [] isVisited; // 记录顶点是否已访问 false为未访问public int [][] matrix; // 邻接矩阵public Graph(int [][] matrix, char [] vertexList){this.vertexList = vertexList;this.matrix = matrix;isVisited = new boolean[vertexList.length];Arrays.fill(isVisited, false);}/***  获取当前遍历顶点的第一个邻接顶点(没有返回-1)* @param index 当前正在遍历的顶点* @return 该顶点的第一个邻接点,按构建数组的顺序来找的*/public int getFirstNeighbor(int index) {for (int i = 0; i < vertexList.length; i++) {if (matrix[index][i] > 0) {return i;}}return -1;}/*** 获取当前遍历节点邻接节点的下一个邻接节点(没有返回-1)* @param index 当前正在遍历的节点* @param v 当前遍历节点的邻接点* @return 当前遍历节点的下一个邻接点*/public int getNextNeighbor(int index, int v) {for (int i = v + 1; i < vertexList.length; i++) {if (matrix[index][i] > 0) {return i;}}return -1;}public void dfs(int index) {System.out.println(vertexList[index]);isVisited[index] = true;int w = getFirstNeighbor(index); // 找遍历节点的第一个邻接节点while (w != -1) {  // 如果存在邻接点if (!isVisited[w]) { // 存在未访问的邻接点,则对该邻接点继续深度遍历dfs(w);}// 找下一个邻接节点w = getNextNeighbor(index, w);}}// 对每个顶点就行深度遍历public void dfs() {for (int i = 0; i < vertexList.length; i++) {if (!isVisited[i]) {dfs(i);}}}}

http://chatgpt.dhexx.cn/article/mNqmZULX.shtml

相关文章

深度优先搜索python

深度优先搜索 概念 深度优先搜索和广度优先搜索一样&#xff0c;都是对图进行搜索的算法&#xff0c;目的也都是从起点开始搜索直到到达指定顶点&#xff08;终点&#xff09;。深度优先搜索会沿着一条路径不断往下搜索直到不能再继续为止&#xff0c;然后再折返&#xff0c;…

DFS——深度优先搜索

什么是DFS DFS&#xff0c;中文名深度优先搜索&#xff0c;是一种图的搜索方式&#xff0c;本质上是一种递归。 dfs相当自由&#xff0c;学dfs可能最高境界就和打太极似的&#xff0c;无招胜有招 DFS的经典应用&#xff1a; 1.全排列 虽然感觉没有贴题目的必要 这应该是大多数d…

算法详解之深度优先搜索算法

14天阅读挑战赛 文章目录 1、深度优先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;介绍2、深度优先搜索算法思想3、深度优先搜索算法步骤&#xff1a;4、深度优先搜索算法的应用 1、深度优先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09…

第七章:深度优先搜索

不撞南墙不回头-深度优先搜索 广度优先搜索BFS是每次将当前状态能够一步拓展出的所有状态&#xff0c;全部拓展出来依次存入队列。而深度优先搜索是将当前状态按照一定的规则顺序&#xff0c;先拓展一步得到一个新状态&#xff0c;再对这个这个新状态递归拓展下去。如果无法拓…

Java实现深度优先搜索

Java实现深度优先搜索 图的遍历 图的遍历就是访问图中的每个节点并且每个节点只访问一次。但图中有那么多节点&#xff0c;要如何进行访问就是一个问题&#xff0c;所以我们需要有特定的策略来进行访问这些节点。图的访问策略一般有两种&#xff1a;深度优先搜索和广度优先搜…

深度优先搜索

深度优先搜索&#xff1a; 深度优先搜索是对先序遍历的一般化。我们从某个节点开始&#xff0c;先处理&#xff0c;并将标记为已知&#xff0c;然后任意选择的一个邻接顶点&#xff0c;对其进行深度优先搜索&#xff0c;这样就递归的遍历了图的所有顶点。当图中有圈时&#xf…

【基础知识】一文看懂深度优先算法和广度优先算法

概览 先上个图 现在我们要访问图中的每个节点&#xff0c;即图的遍历。 图的遍历是指&#xff0c;从给定图中任意指定的顶点&#xff08;称为初始点&#xff09;出发&#xff0c;按照某种搜索方法沿着图的边访问图中的所有顶点&#xff0c;使每个顶点仅被访问一次&#xff…

深度优先搜索(DFS),看这一篇就够了。

一&#xff0c;定义&#xff1a; 深度优先搜索的思路和树的先序遍历很像&#xff0c;下面是百度百科上的定义&#xff1a; 深度优先遍历图的方法是&#xff0c;从图中某顶点v出发&#xff1a; &#xff08;1&#xff09;访问顶点v&#xff1b; &#xff08;2&#xff09;依次从…

Python实现深度优先遍历(DFS)和广度优先遍历(BFS)

一&#xff0c;简介 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法&#xff0c;生产上广泛用于拓扑排序&#xff0c;寻路(走迷宫)&#xff0c;搜索引擎&#xff0c;爬虫等&#xff0c;也频繁出现在 leetcode&am…

算法数据结构——图的遍历之深度优先搜索算法(Depth First Search)

1. 深度优先搜索简介 深度优先搜索算法&#xff08;Depth First Search&#xff09;&#xff1a;英文缩写为 DFS。是一种用于搜索树或图的算法。所谓深度优先&#xff0c;就是说每次都尝试向更深的节点走。 深度优先搜索采用了回溯思想&#xff0c;该算法沿着树的深度遍历树的节…

【新书速递】实用安全多方计算导论

安全多方计算&#xff08;MPC&#xff09;是解决数据安全与隐私保护问题的关键安全数据交换技术&#xff0c;近年来发展迅速&#xff0c;但由于MPC涉及复杂的密码学和工程实现技术&#xff0c;行业长期缺乏同时具备MPC研究、应用和实现能力的综合性人才&#xff0c;这阻碍了MPC…

百万富翁问题--安全多方计算

百万富翁问题—安全多方计算 是由图灵奖获得者姚期智提出的。 有A、B两个富翁&#xff0c;A资产i亿元&#xff0c;B资产j亿元&#xff0c;i、j均在0-10范围内&#xff0c;在互不让对方知道自己资产的情况下&#xff0c;比较A和B的资产谁多谁少。 那么如何去比较呢&#xff1f;…

隐私保护技术之安全多方计算

安全多方计算(Secure Multi-Party Computation&#xff0c;SMPC)用于解决一组互不信任的参与方各自持有秘密数据&#xff0c; 协同计算一个既定函数的问题。安全多方计算在保证参与方获得正确计算结果的同时&#xff0c;无法获得计算结果之外的任何信息。 在整个计算过程中&…

基于同态加密体制的安全多方计算

本文首发公众号VenusBlockChain&#xff0c;关注公众号后可免费阅读&#xff01;VenusBlockChain致力于区块链技术研究&#xff0c;传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。有兴趣的小伙伴们&#xff0c;欢迎关注。 安全多方计算&#xff08;Secure Mu…

多方安全计算

说明&#xff0c;本文是转载的&#xff0c;个人觉得作者讲解清晰明了&#xff0c;收录用于学习&#xff0c;原文链接&#xff1a;https://blog.csdn.net/yuxinqingge/article/details/104588197。 如今&#xff0c;互联网已经完成了从IT时代向DT时代转变&#xff0c;数据已经成…

多方安全计算MPC

1.多方安全计算的价值 MPC是密码学的一个重要分支&#xff0c;旨在解决一组互不信任的参与方之间保护隐私的协同计算问题&#xff0c;为数据需求方提供不泄露原始数据前提下的多方协同计算能力。 在目前个人数据毫无隐私的环境下&#xff0c;对数据进行确权并实现数据价值显得…

安全多方计算(MPC)

MPC既适用于特定的算法&#xff0c;如加法、乘法、AES&#xff0c;集合交集等&#xff1b;也适用于所有可表示成计算过程的通用算法。 根据计算参与方个数不同&#xff0c;可分为只有两个参与方的2PC和多个参与方&#xff08;≥3&#xff09;的通用MPC 1&#xff09;安全两方&a…

安全多方计算之二:一文搞懂百万富翁问题

百万富翁问题 1. 解决方案2. 协议描述3. 协议说明4. 协议举例5. 协议扩展 两个百万富翁Alice和Bob想知道他们两个谁更富有&#xff0c;但他们都不想让对方及其他第三方知道自己财富的任何信息&#xff0c;这是由中国计算机科学家、2000年图灵奖获得者姚启智教授于1982年在论文《…

安全多方计算-入门学习笔记(三)

四、基于非噪音的安全多方计算介绍 1概念 非噪音方法一般是通过密码学方法将数据编码或加密&#xff0c;得到一些奇怪的数字&#xff0c;而且这些奇怪的数字有一些神奇的性质&#xff0c;比如看上去很随机但其实保留了原始数据的线性关系&#xff0c;或者顺序明明被打乱但人们…

基于隐私保护的安全多方计算区块链融合技术的智能合约

安全多方计算与区块链的融合技术 SMPC-安全多方计算综述安全的定义安全模型SMPC效率问题 区块链应用&#xff1a;智能合约智能合约的问题SMPC需求引入 基于SMPC的智能合约辅助&#xff1a;MPI协议-效率提升 SMPC-安全多方计算综述 随着物联网、移动计算、大数据、云计算的快速…