图的深度优先遍历(DFS)
DFS
- 1.定义
- 2.遍历思路
- 3.代码
1.定义
深度优先遍历就是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.
宽度优先遍历可以看这里:https://blog.csdn.net/weixin_56680764/article/details/126767834
2.遍历思路
深度优先遍历图的方法是,从图中某顶点v出发:
(1)访问顶点v;
(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;
(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。
3.代码
/*** 图结构类型定义
*/
public class Graph {//点集public HashMap<Integer,Node> nodes;//边集public HashSet<Edge> edges;public Graph() {nodes=new HashMap<>();edges=new HashSet<>();}
}/*** 点的数据结构描述*/
public class Node {//自己的数据项public int value;//一个点的入度public int in;//一个点的出度public int out;//从当前点出发,由它发散出的边的直接邻居点 A——>B:A的nexts是Bpublic ArrayList<Node> nexts;//属于当前点的边(由当前点发散出去的边才属于当前点)public ArrayList<Edge> edges;public Node() {}public Node(int value) {this.value=value;in=0;out=0;nexts=new ArrayList<>();edges=new ArrayList<>();}
}/*** 边的数据结构描述*/
public class Edge {//边的权值public int weight;//边从哪个点开始public Node from;//边从哪个点结束public Node to;public Edge(int weight,Node from,Node to) {this.weight=weight;this.from=from;this.to=to;}
}//图的深度优先遍历算法
public class GraphDFS {public static void dfs(Node node) {//如果节点不存在,直接返回if(node == null) {return;}//创建一个栈来进行深度优先遍历Stack<Node> stack=new Stack<>();//创建一个Set集合,利用Set集合的不可重复来保证已经遍历过的节点不再进入栈HashSet<Node> set=new HashSet<>();//node节点入栈和set集合stack.add(node);set.add(node);//执行输出操作,这里可以执行自己所需要做的具体操作System.out.println(node.value);//深度优先遍历图while(!stack.isEmpty()) {//弹出栈最后的节点Node cur=stack.pop();//遍历他的邻居节点,不在set里的入栈,在set里的跳过for(Node next:cur.nexts) {if(!set.contains(next)) {//当前节点cur和他的邻居节点next入栈stack.push(cur);stack.push(next);//将此邻居节点加入set集合set.add(next);//执行输出操作,这里可以执行自己所需要做的具体操作System.out.println(next.value);//直接退出,不再去遍历cur的其他节点break;}}}}
}
图的深度优先遍历(DFS)相关推荐
- 图的深度优先遍历DFS(JAVA)
图的深度优先遍历算法 在此介绍图的基本算法之一的深度优先遍历(DFS)算法 广度优先搜索(BFS). 什么是DFS 图是由节点(Node)和路径(Route)组成的一种数据结构,用于反应各节点间的关系 ...
- 数据结构-图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析
https://www.cnblogs.com/qzhc/p/10291430.html 最后一个广度优先有错误,H不指向E,只有G指向E,所以顺序应该是ABCFDHGE
- 图的深度优先遍历和广度优先遍历_图的深度优先遍历(DFS)与广度优先遍历(BFS)的c语言实现...
头文件 #pragma warning( disable : 4996)#pragma once#ifndef _GRAPH_H_#define _GRAPH_H_ #define MAX_VERTE ...
- 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)
目录 深度优先遍历(DFS)和广度优先遍历(BFS)原理 1.自己的原理图 2.官方原理图 一.邻接矩阵的深度优先遍历(DFS) 1.原理图 2. 过程: 3.总代码 二.邻接表的深度优先遍历(DFS ...
- java数据结构和算法——图的深度优先(DFS)遍历
目录 一.图的遍历介绍 二.图的深度优先搜索(Depth First Search) 三.图的深度优先遍历算法步骤 四.图的深度优先遍历示例需求 五.图的深度优先遍历代码示例 一.图的遍历介绍 所谓图 ...
- 算法学习:图的深度优先遍历(DFS)
图的深度优先遍历 采用邻接矩阵表示图的方法,递归实现. 栈的使用: 头文件:<stack> s.empty():栈空则返回true,否则返回false s.top():返回栈顶元素,不删除 ...
- 数据结构 图的深度优先遍历 C
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Bool ...
- java语言实现图的深度优先遍历
java语言实现图的深度优先遍历: 图的存储采用的是邻接矩阵存储的方式,对下面的无向图进行遍历 代码如下: public class Deep {int count=0;public static v ...
- C++实现图的深度优先遍历和广度优先遍历
图的深度和广度优先遍历 图的深度优先遍历 1.算法思想 2.邻接矩阵构造图 3.邻接表构造图 图的广度优先遍历 1.算法思想 2.邻接矩阵构造图 图的深度优先遍历 1.算法思想 (1)从图中的某个初始 ...
- 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法学习笔记:图...
图: 图结构区别于线性结构和树型结构,区别可见下图 逻辑上的图(graph)结构由顶点(vertex)和边(edge)组成. 一个图结构G包含顶点集合V和边集合E,任何两个顶点之间可以有一个边表示两者 ...
最新文章
- 解决“cannot open git-receive-pack”错误
- 喝清凉茶,吃绿豆汤看绿色奥运[我写绿色IT]
- Linux部署Ant Design Pro项目及nginx部署
- mysql db compare_数据传输 | mysqldiff/mysqldbcompare 实现 DTLE 自动化测试
- leetcode59. 螺旋矩阵 II
- python写http post请求的四种请求体
- java 编译class_.java文件怎样编译成.class文件,你值得一看的技巧
- Ubuntu 硬盘”分区“图文教程(用于光盘,U盘安装Ubuntu)
- selenium 如何处理table
- VFP开眼看世界的第一眼,就是学会真正的BS开发,走错一步费三年
- 三节点潮流计算matlab,电力系统分析大作业matlab三机九节点潮流计算报告.doc
- Spurious Wakup
- 浏览器不能调用JAVA打印_网页调用IE浏览器的打印功能
- go 1.16版本,go get用法介绍
- 论坛.newreply.php,discuz!论坛帖、删帖加减金钱值后台设定For D25sp1 4.3日整理版
- wtl单文档选项_[翻译]WTL开发者指南 第1章 WTL概述
- PSAM卡之常用APDU指令错误码
- 小米4充不了电处理办法(图文)小米4不能充电的维修教程
- [openwrt] 使用ubus实现
- 一个人可以办三个支付宝账号,这三个支付宝账户之间有什么影响?
热门文章
- pyhton matplotlib可视化图像基础(二维函数图、柱状图、饼图、直方图以及折线图)...
- 思科模拟器cisco模拟器
- Cuteftp9.0安装说明书
- JAVA毕业设计河南省农村多元化养老服务管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库
- HTML+CSS期末大作业:家乡旅游网站设计——山东菏泽(6页) 简单个人网页设计作业 静态HTML旅行主题网页作业 DW个人网站模板下载 大学生简单个人网页作品代码
- 拯救者Y7000在ubuntu下的1660Ti驱动安装
- C/C++程序设计题
- 写给励志做码农的大学生
- openjtag openocd libftd2xx
- 支付宝COM组件浅析