图的深度优先遍历java代码详解

article/2025/9/20 6:18:28

 

 代码是根据矩阵来实现深度优先遍历的

邻接结点就是按照vertex中的顺序来一个一个来找的

if(edges[i][j]>0&&!isVisited[j]) {
                return j;
            }

就很好的说明了  如果没找到就return -1 回到dfs(i)这一层

再return回到dfs()这一层 ,i++ 继续下一轮循环

import java.util.ArrayList;
import java.util.Arrays;class Graph{public ArrayList<String> vertex;//存储顶点集合public int[][] edges;//邻接矩阵public int numOfEdge;//边的个数public boolean[] isVisited;//辅助遍历工具,用来判断一个结点是否被访问过(注意,其实是一个数组)//构造器public Graph(int n) {//初始化矩阵和vertexvertex=new ArrayList<String>(n);edges=new int[n][n];numOfEdge=0;}//深度优先遍历图public void dfs() {//对每一个结点都进行深度优先遍历isVisited=new boolean[vertex.size()];//初始化辅助工具,初始均为未被访问for(int i=0;i<vertex.size();i++) {if(isVisited[i]) {//被访问就跳过continue;}else {dfs(i);//如果没被访问过就递归 调用的下面的那个带参数的dfs方法}}}private void dfs(int i) {//对结点i进行深度优先遍历System.out.print(getValueOfVertex(i)+"---");isVisited[i]=true;int n=getFirst(i);//查找i的邻接结点if(n!=-1) {//找到了dfs(n);}else {return;}}/*** *下面就是根据给定结点的下标得到下一个邻接结点下标的方法* @param i 给定结点的下标*          (就是vertex中的下标,也就是矩阵中的位置下标,因为其实是参考矩阵来深度优先遍历的)* @return	返回结点i的第一个且没有被访问过的邻接结点,没有返回-1*/private int getFirst(int i) {for(int j=0;j<vertex.size();j++) {if(edges[i][j]>0&&!isVisited[j]) {return j;}}return -1;}/*以下都是图的基本操作*///添加结点public void add(String str) {vertex.add(str);}//添加边public void addEdges(int a,int b,int value) {edges[a][b]=value;edges[b][a]=value;numOfEdge++;}//返回结点的个数public int getNumOfVertex() {return vertex.size();}//根据结点返回权值public int getValue(int a,int b) {return edges[a][b];}//显示图对应的矩阵public void show() {for(int[] arr:edges) {System.out.println(Arrays.toString(arr));}}//返回边的数目public int getNumEdges() {return numOfEdge;}//返回下标对应的结点public String getValueOfVertex(int a) {return vertex.get(a);}
}

如果要示例图的矩阵 代码和运行效果如下

 

 


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

相关文章

图(深度优先遍历、广度优先遍历)

文章目录 一、图的概述1.1 什么是图1.2 图对比线性表和树1.3 图的常见概念 二、图的存储方式2.1 邻接矩阵2.2 邻接表 三、图的遍历3.1 图的深度优先遍历3.1.1 什么是深度优先遍历3.1.2 深度优先遍历的步骤3.1.3 深度优先遍历代码实现 3.2 图的广度优先遍历3.2.1 什么是广度优先…

树与图的深度优先遍历

目录 一、概念 二、操作说明 1.树与图的深度优先遍历 2.树的DFS序 3.树的深度 4.树的重心 5.图的连通块划分 三、例题实践 1.树的重心例题实战 a.题目描述 b.解题思路 c.代码实现 一、概念 树与图的深度优先遍历&#xff1a;深度优先遍历&#xff0c;就是在每一个…

算法总结-深度优先遍历和广度优先遍历

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

图的两种遍历:深度优先遍历+广度优先遍历

一、深度优先遍历 1、简介 深度优先遍历是指按照深度方向搜索&#xff0c;它类似于树的先根遍历&#xff0c;是树的先根遍历的推广。 基本思想&#xff08;通俗&#xff09; 选一条路走到 底&#xff0c;直到 走不通&#xff0c;就 原路返回看看 是否还有路可走&#xff0c;如…

C++实现图的深度优先遍历和广度优先遍历

图的深度和广度优先遍历 图的深度优先遍历1、算法思想2、邻接矩阵构造图3、邻接表构造图 图的广度优先遍历1、算法思想2、邻接矩阵构造图 参考 图的深度优先遍历 1、算法思想 &#xff08;1&#xff09;从图中的某个初始点 v 出发&#xff0c;首先访问初始点 v.&#xff08;…

深度优先遍历

1.先序序列为a,b,c,d 的不同二叉树的个数是 &#xff08;14&#xff09; 。 13 14 15 16 f&#xff08;n&#xff09;c(n 2n)/n1 2.在构建哈弗曼树时&#xff0c;要使树的带权路径长度最小&#xff0c;只需要遵循一个原则&#xff0c;那就是&#xff1a;权重越大的结点离树…

图的遍历——深度优先遍历与广度优先遍历

目录 何谓遍历&#xff1f; 图的遍历特点 图的遍历方式 深度优先搜索 过程分析 案例分析&#xff1a; 算法的代码实现 测试案例&#xff1a; 测试结果如下&#xff1a; 遍历非连通图 算法复杂度分析 额外补充 广度优先搜索 过程分析 辅助队列 算法的代码实现 队…

图的深度优先遍历和广度优先遍历

本文参考自《大话数据结构》 文章目录 定义图的存储结构邻接矩阵邻接表 图的遍历深度优先遍历邻接矩阵代码邻接表代码 广度优先遍历邻接矩阵邻接表 最小生成树最短路径算法 定义 图(Graph) 是由顶点的有穷非空集合和顶点之间边的集合组成&#xff0c;通常表示为G(V&#xff0…

深度优先遍历和广度优先遍历

深度优先遍历和广度优先遍历 什么是 深度/广度 优先遍历&#xff1f; 深度优先遍历简称DFS&#xff08;Depth First Search&#xff09;&#xff0c;广度优先遍历简称BFS&#xff08;Breadth First Search&#xff09;&#xff0c;它们是遍历图当中所有顶点的两种方式。 这…

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

1、深度优先搜索遍历过程 图的深度优先搜索(Depth First Search)&#xff0c;和树的先序遍历比较类似。 它的思想&#xff1a;假设初始状态是图中所有顶点均未被访问&#xff0c;则从某个顶点v出发&#xff0c;首先访问该顶点&#xff0c;然后依次从它的各个未被访问的邻接点出…

图的遍历算法之深度优先遍历(DFS)(C++)

图的深度优先遍历思想是&#xff1a; 从图中某结点出发&#xff0c;访问其某一相邻结点&#xff0c;再访问该结点的相邻结点&#xff0c;直至访问完所有的结点。 形象的比喻就是&#xff1a;一条路走到头&#xff0c;回头再走没走过的路。 可见&#xff0c;深度优先遍历是一…

图的深度优先遍历

一 图遍历介绍 所谓图的遍历&#xff0c;即是对结点的访问。一个图有那么多个结点&#xff0c;如何遍历这些结点&#xff0c;需要特定策略&#xff0c;一般有两种访问策略。 1 深度优先遍历 2 广度优先遍历 二 深度优先遍历基本思想 图的深度优先搜索(Depth First Search…

图的遍历 ——深度优先遍历

图的遍历 ——深度优先遍历 深度优先搜索&#xff08;Depth First Search&#xff0c;DFS&#xff09;是最常见的图搜索方法之一。 深度优先搜索沿着一条路径一直搜索下去&#xff0c;在无法搜索时&#xff0c;回退到刚刚访问过的节点。深度优先遍历是按照深度优先搜索的方式…

二、图的遍历——深度优先遍历

深度优先遍历&#xff0c;也有称为深度优先搜索&#xff0c;简称为DFS。 深度优先遍历其实就是一个递归的过程&#xff0c;它从图中某个顶点ⅴ出发&#xff0c;访问此顶点&#xff0c;然后从V的未被访问的邻接点出发深度优先遍历图&#xff0c;直至图中所有和V有路径相通的顶点…

图的遍历(深度优先遍历DFS,广度优先遍历BFS)以及C语言的实现

遍历的定义&#xff1a; 从已给的连通图中某一顶点出发&#xff0c;沿着一些边访遍图中所有的顶点&#xff0c;且使每个顶点仅被访问一次&#xff0c;就叫做图的遍历&#xff0c;它是图的基本运算&#xff0e; 一:深度优先遍历&#xff08;&#xff24;&#xff26;&#xff…

使用SSM框架上传图片

使用SSM框架上传图片 为了大家方便对照,我上传源码到网盘,有兴趣的自取. ps:其中有一个存储数据的网页,我没删除,可以忽略 链接&#xff1a;https://pan.baidu.com/s/1u24E8mUs4K-raoQgx-ae2A 提取码&#xff1a;java 建数据表 CREATE DATABASE my_resource;USE my_resource…

SSM框架简单介绍

一. SSM框架简介及特征 1.SpringMVC Spring MVC属于SpringFrameWork的后续产品&#xff0c;已经融合在Spring Web Flow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构&#xff0c;从而在使用Spring进行WEB开发时&#xff0c;可…

SSM框架整合详细教程

目录 1. 什么是SSM&#xff1f; 2. SSM整合的时候容器之间如何访问 3. SSM下面的开发步骤 4. SSM整合时候时容易混乱的知识点 1. 什么是SSM&#xff1f; SSM是对三个框架名字的简写&#xff0c;其中第一个S指的是SpringMVC,第二个S指的是Spring&#xff0c;第三个M指的是M…

SSM框架理解

一、作用&#xff1a; 1、 SSM是spingspringMVCmybatis集成的框架。是标准的MVC模式&#xff0c;将整个系统划分为表现层&#xff0c;controller层&#xff0c;service层&#xff0c;DAO层四层。 2、使用spring MVC负责请求的转发和视图管理&#xff0c;spring实现业务对象管理…

SSM框架初探

SSM 框架初探 SSM框架简介对框架的理解为什么使用 SSM 框架 SpringSpringMVCMybatis SSM框架简介 SSM框架一种以java语言作为后端搭建基本语言的应用系统搭建框架。是继SSH(strutsspringhibernate)之后&#xff0c;目前较为主流的Java EE企业级框架&#xff0c;适用于搭建各种大…