DFS_BFS(深度优先搜索 和 广度优先搜索)
- package com.rao.graph;
- import java.util.LinkedList;
- /**
- * @author Srao
- * @className BFS_DFS
- * @date 2019/12/10 19:16
- * @package com.rao.graph
- * @Description 深度优先搜索 和 广度优先搜索
- */
- public class BFS_DFS {
- /**
- * 图的顶点
- */
- private static class Vertex{
- int data;
- Vertex(int data){
- this.data = data;
- }
- }
- /**
- * 图(邻接表)
- */
- private static class Graph{
- private int size;
- private Vertex[] vertices;
- //存放每个顶点的链表
- private LinkedList<Integer>[] adj;
- Graph(int size){
- this.size = size;
- vertices = new Vertex[size];
- adj = new LinkedList[size];
- for (int i = ; i < size; i++) {
- vertices[i] = new Vertex(i);
- adj[i] = new LinkedList();
- }
- }
- }
- /**
- * DFS(深度优先搜索)
- * @param graph:图
- * @param start:起始访问点
- * @param visited:是否被访问过,true表示被访问过
- */
- public static void dfs(Graph graph, int start, boolean[] visited){
- System.out.println(graph.vertices[start].data);
- visited[start] = true;
- for (int index : graph.adj[start]){
- if (!visited[index]){
- dfs(graph, index, visited);
- }
- }
- }
- /**
- * BFS(广度优先搜索)
- * @param graph:图
- * @param start:起始访问点
- * @param visited:是否被访问过,true表示被访问过
- * @param queue:队列里面存放被遍历过的元素
- */
- public static void bfs(Graph graph, int start, boolean[] visited, LinkedList<Integer> queue){
- //队列的插入操作
- queue.offer(start);
- while (!queue.isEmpty()){
- int front = queue.poll();
- if (visited[front]){
- continue;
- }
- System.out.println(graph.vertices[front].data);
- visited[front] = true;
- for (int index : graph.adj[front]){
- queue.offer(index);
- }
- }
- }
- public static void main(String[] args) {
- Graph graph = new Graph();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- graph.adj[].add();
- System.out.println("图的深度优先遍历:");
- dfs(graph, , new boolean[graph.size]);
- System.out.println("图的广度优先遍历:");
- bfs(graph, , new boolean[graph.size], new LinkedList<>());
- }
- }
输出结果如下:
- 图的深度优先遍历:
- 图的广度优先遍历:
DFS_BFS(深度优先搜索 和 广度优先搜索)的更多相关文章
- 【js数据结构】图的深度优先搜索与广度优先搜索
图类的构建 function Graph(v) {this.vertices = v;this.edges = 0;this.adj = []; for (var i = 0; i < this ...
- java深度搜索与广度优先搜索
图结构展示: 实现过程: 首先,我们来看看图结构在代码中的实现.有三块逻辑: 1.图中的节点: public class GraphNode { public List<GraphEdge> ...
- Depth-first search and Breadth-first search 深度优先搜索和广度优先搜索
Depth-first search Depth-first search (DFS) is an algorithm for traversing or searching tree or grap ...
- 【Python排序搜索基本算法】之深度优先搜索、广度优先搜索、拓扑排序、强联通&Kosaraju算法
Graph Search and Connectivity Generic Graph Search Goals 1. find everything findable 2. don't explor ...
- DFS或BFS(深度优先搜索或广度优先搜索遍历无向图)-04-无向图-岛屿数量
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1: 输入: ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析
转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...
- Unity中通过深度优先算法和广度优先算法打印游戏物体名
前言:又是一个月没写博客了,每次下班都懒得写,觉得浪费时间.... 深度优先搜索和广度优先搜索的定义,网络上已经说的很清楚了,我也是看了网上的才懂的,所以就不在这里赘述了.今天讲解的实例,主要是通过自 ...
随机推荐
- 如何编写一个Systemd Service(转)
转自 https://segmentfault.com/a/1190000014740871 0x01 什么是Systemd Service Systemd 服务是一种以 .service 结尾的单元 ...
- 强迫症福利--收起.NET程序的dll来
作为上床后需要下床检查好几次门关了没有的资深强迫症患者,有一个及其搞我的问题,就是dll问题. 曾几何时,在没有nuget的年代,当有依赖项需要引用的时候,只能通过文件引用来管理引用问题,版本问题,更 ...
- 整理在Spring IOC容器初始化后可以处理特定逻辑的多种实现方式
Spring框架的核心是依赖注入.切面:Spring Boot是在Spring框架的基础上为其提供许多默认配置.默认约定(约定优于配置),从而达到减少或减化配置进而可开箱即用.快速上手:Spring ...
- windows上MongoDB远程访问配置
今天用另一台机器上的MongoDB,但是使用本地连接时,没问题 换成IP地址时,出现 解决的方法,修改配置文件 systemLog: destination: file path: d:/Mongod ...
- django实战(三)--删除和批量删除
上一节我们完成了带分页的模糊查询,本节我们继续删除操作. 同样的,先给出各个模块的代码(上一节的就不在贴出了):urls.py path('curd/delete/',views.curd_delet ...
- UVA 10852 Less Prime 题解
Less Prime Let n be an integer, 100 n 10000, nd the prime number x, x n, so that n
- Lambda表达式的用法
参考:https://www.cnblogs.com/knowledgesea/p/3163725.html
- C#工具类MySqlHelper,基于MySql.Data.MySqlClient封装
源码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...
- json时间格式化
//格式化日期字符串 String.prototype.jsonDateFormat = function (format) { var date, timestamp, dtObj timestam ...
- disconf的简单使用与远程配置更改为使用本地配置
这几天因为阿里云迁移到腾讯云的原因,原来服务器上的disconf不再使用了.在这段时间里,系统出现的bug很难寻找原因(项目起不来),现在想要把disconf远程配置更改成直接使用本地配置.首先,了解 ...