iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java如何实现的图的遍历
  • 339
分享到

Java如何实现的图的遍历

2023-06-29 16:06:41 339人浏览 薄情痞子
摘要

这篇文章主要介绍Java如何实现的图的遍历,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.图的遍历从图中某一顶点出发访问图中其余顶点,且每个顶点仅被访问一次图的遍历有两种深度优先遍历DFS、广度优先遍历BFS2.深

这篇文章主要介绍Java如何实现的图的遍历,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1.图的遍历

从图中某一顶点出发访问图中其余顶点,且每个顶点仅被访问一次

图的遍历有两种深度优先遍历DFS、广度优先遍历BFS

2.深度优先遍历

深度优先遍历以深度为优先进行遍历,简单来说就是每次走到底。类似于二叉树的前序遍历

思路:

以某一个顶点为起点进行深度优先遍历,并标记该顶点已访问

以该顶点为起点选取任意一条路径一直遍历到底,并标记访问过的顶点

第2步遍历到底后回退到上一个顶点,重复第2步

遍历所有顶点结束

根据遍历思路可知,这是一个递归的过程,其实DFS与回溯基本相同。

遍历:

Java如何实现的图的遍历

以此图为例进行深度优先遍历

static void dfs(int[][] graph,int idx,boolean[]visit) {int len = graph.length;//访问过 if(visit[idx]) return; //访问该顶点 System.out.println("V"+idx); //标志顶点 visit[idx] = true; for(int i = 1;i < len;i++) { //访问该顶点相连的所有边 if(graph[idx][i] == 1) { //递归进行dfs遍历 dfs(graph, i, visit); } }}

遍历结果:

V1

V2

V3

V4

V5

V6

V7

V8

V9

创建图的代码:

public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//顶点数 以1开始int n = scanner.nextInt();int[][] graph = new int[n+1][n+1];//边数int m = scanner.nextInt();for(int i = 1;i <= m;i++) {int v1 = scanner.nextInt();int v2 = scanner.nextInt();graph[v1][v2] = 1;graph[v2][v1] = 1;}//标记数组 false表示未访问过 boolean[] visit = new boolean[n+1];dfs(graph, 1, visit);}

3.利用DFS判断有向图是否存在环

思路:遍历某一个顶点时,如果除了上一个顶点之外,还存在其他相连顶点被访问过,则必然存在环

//默认无环   static boolean flag = false;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//顶点数 以1开始int n = scanner.nextInt();int[][] graph = new int[n+1][n+1];//边数int m = scanner.nextInt();for(int i = 1;i <= m;i++) {int v1 = scanner.nextInt();int v2 = scanner.nextInt();graph[v1][v2] = 1;} //标记数组 true为访问过boolean[] visit = new boolean[n+1];dfs(graph, 1, visit,1);if(flag) System.out.println("有环");}static void dfs(int[][] graph,int idx,boolean[]visit,int parent) {int len = graph.length; System.out.println("V"+idx); //标记顶点 visit[idx] = true; for(int i = 1;i < len;i++) { //访问该顶点相连的所有边 if(graph[idx][i] == 1) { if( !visit[i] ) { dfs(graph, i, visit,idx); } else if(idx != i) { flag = true; } } } }

注意:是有向图判断是否存在环,无向图判断是否存在环无意义,因为任意两个存在路径的顶点都可以是环

4.广度优先遍历

广度优先遍历是以广度(宽度)为优先进行遍历。类似于二叉树的层序遍历

思路:

以某一个顶点为起点进行广度优先遍历,并标记该顶点已访问

访问所有与该顶点相连且未被访问过的顶点,并标记访问过的顶点

以第2步访问所得顶点为起点重复1、2步骤

遍历所有顶点结束

通过队列来辅助遍历,队列出队顺序即是广度优先遍历结果

Java如何实现的图的遍历

遍历

Java如何实现的图的遍历

以此图为例,采用邻接矩阵的方式创建图,进行BFS遍历

static void bfs(int[][] graph) {int len = graph.length;//标记数组 false表示未访问过 boolean[] visit = new boolean[len];//辅助队列Queue<Integer> queue = new LinkedList<>();queue.offer(1);visit[1] = true;while(!queue.isEmpty()) {int num = queue.poll();System.out.println("V"+num);//遍历该顶点所有相连顶点for(int i = 1;i < len;i++) {//相连并且没有被访问过if(graph[num][i] == 1 && !visit[i]) {queue.offer(i);visit[i] = true;}}}}

遍历结果:

V1

V2

V6

V3

V7

V9

V5

V4

V8

创建图的代码

public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//顶点数 以1开始int n = scanner.nextInt();int[][] graph = new int[n+1][n+1];//边数int m = scanner.nextInt();for(int i = 1;i <= m;i++) {int v1 = scanner.nextInt();int v2 = scanner.nextInt();graph[v1][v2] = 1;graph[v2][v1] = 1;}bfs(graph);}

以上是“Java如何实现的图的遍历”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Java如何实现的图的遍历

本文链接: https://www.lsjlt.com/news/325772.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java如何实现的图的遍历
    这篇文章主要介绍Java如何实现的图的遍历,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.图的遍历从图中某一顶点出发访问图中其余顶点,且每个顶点仅被访问一次图的遍历有两种深度优先遍历DFS、广度优先遍历BFS2.深...
    99+
    2023-06-29
  • Java如何实现Map集合遍历
    这篇文章给大家分享的是有关Java如何实现Map集合遍历的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用...
    99+
    2023-05-30
  • java如何遍历map的key
    Java中可以使用迭代器(Iterator)或者增强型for循环(forEach)来遍历Map的key。使用迭代器遍历Map的key...
    99+
    2023-08-11
    java
  • DOM如何实现遍历
    小编给大家分享一下DOM如何实现遍历,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!      遍历...
    99+
    2024-04-02
  • Java如何实现二叉树和遍历
    这篇文章主要介绍了Java如何实现二叉树和遍历,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是二叉树简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个...
    99+
    2023-06-29
  • es6如何实现数组的遍历
    这篇文章主要介绍“es6如何实现数组的遍历”,在日常操作中,相信很多人在es6如何实现数组的遍历问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”es6如何实现数组的遍历”的疑惑...
    99+
    2024-04-02
  • java栈如何实现二叉树的非递归遍历
    这篇文章主要介绍了java栈如何实现二叉树的非递归遍历,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。二叉树设置class Node{public int&...
    99+
    2023-06-14
  • 利用java如何实现遍历二叉树
    这篇文章给大家介绍利用java如何实现遍历二叉树,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。遍历二叉树,从上往下遍历。但是同层节点可以从左向右遍历,也可以从右向左遍历(也就是之字型遍历),其中,都需要队列进行实现。只...
    99+
    2023-05-31
    java 二叉树 遍历
  • C++如何实现二叉树的遍历
    本篇内容介绍了“C++如何实现二叉树的遍历”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!二叉树的遍历Q:什么是二叉树的遍历?A:二叉树的遍历...
    99+
    2023-06-30
  • JAVA如何实现数组遍历和随机Random
    这篇文章给大家分享的是有关JAVA如何实现数组遍历和随机Random的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。import java.util.Random;public class&nb...
    99+
    2023-06-02
  • jquery如何实现元素遍历
    这篇文章主要讲解了“jquery如何实现元素遍历”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“jquery如何实现元素遍历”吧! ...
    99+
    2024-04-02
  • C++图的遍历实例分析
    这篇文章主要介绍了C++图的遍历实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++图的遍历实例分析文章都会有所收获,下面我们一起来看看吧。图的遍历要想遍历图,肯定要先储存图啊。下面我们采用邻接表来存图...
    99+
    2023-06-30
  • JavaScript如何实现循环遍历
    这篇文章给大家分享的是有关JavaScript如何实现循环遍历的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。总结JavaScript中的循环遍历定义一个数组和对象const&nb...
    99+
    2024-04-02
  • Java中page如何遍历
    在Java中,可以使用循环来遍历页码。以下是一个示例代码:```javaint totalPages = 10; // 总页数in...
    99+
    2023-08-11
    Java page
  • python如何实现反向遍历
    这篇文章给大家分享的是有关python如何实现反向遍历的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。反向遍历如果我们希望对列表从后往前依次输出,那么应该怎么做呢其实只要加入reversed函数就可以了:fruit...
    99+
    2023-06-27
  • C++实现广度优先遍历图
    本文实例为大家分享了C++实现广度优先遍历图的具体代码,供大家参考,具体内容如下 广度优先遍历 void bfs(int start, int parent[], int di...
    99+
    2024-04-02
  • python的序列遍历和字典遍历的实现方法
    这篇文章主要介绍“python的序列遍历和字典遍历的实现方法”,在日常操作中,相信很多人在python的序列遍历和字典遍历的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • 详解Java 二叉树的实现和遍历
    目录什么是二叉树二叉树建树前序建树中序建树后序建树二叉树的遍历什么是二叉树 简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个下级节点的数据结构。 由于很多排序算...
    99+
    2024-04-02
  • Java中逆序遍历List集合的实现
    目录1 问题2 方法3 结语1 问题 手写一个程序,完成List集合对象的逆序遍历 2 方法 创建List接口的多态对象 向创建好list集合添加元素 使用hasPreviou...
    99+
    2023-01-28
    Java 逆序遍历List Java 逆序遍历
  • 在Java如何使用File类实现遍历文件
    本篇文章为大家展示了在Java如何使用File类实现遍历文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 构造函数File(String args0)//使用一个表示文件或目录的路径的字符串创...
    99+
    2023-05-31
    java file 遍历
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作