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(深度优先搜索 和 广度优先搜索)的更多相关文章

  1. 【js数据结构】图的深度优先搜索与广度优先搜索

    图类的构建 function Graph(v) {this.vertices = v;this.edges = 0;this.adj = []; for (var i = 0; i < this ...

  2. java深度搜索与广度优先搜索

    图结构展示: 实现过程: 首先,我们来看看图结构在代码中的实现.有三块逻辑: 1.图中的节点: public class GraphNode { public List<GraphEdge> ...

  3. Depth-first search and Breadth-first search 深度优先搜索和广度优先搜索

    Depth-first search Depth-first search (DFS) is an algorithm for traversing or searching tree or grap ...

  4. 【Python排序搜索基本算法】之深度优先搜索、广度优先搜索、拓扑排序、强联通&Kosaraju算法

    Graph Search and Connectivity Generic Graph Search Goals 1. find everything findable 2. don't explor ...

  5. DFS或BFS(深度优先搜索或广度优先搜索遍历无向图)-04-无向图-岛屿数量

    给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1: 输入: ...

  6. 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)

    深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...

  7. 深度优先搜索(DFS)和广度优先搜索(BFS)

    深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...

  8. 深度优先搜索DFS和广度优先搜索BFS简单解析

    转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...

  9. Unity中通过深度优先算法和广度优先算法打印游戏物体名

    前言:又是一个月没写博客了,每次下班都懒得写,觉得浪费时间.... 深度优先搜索和广度优先搜索的定义,网络上已经说的很清楚了,我也是看了网上的才懂的,所以就不在这里赘述了.今天讲解的实例,主要是通过自 ...

随机推荐

  1. web版聊天功能简单实现

    一.问题 核心点:如何找到要发送的人? 要完成一个功能我觉得首先要分析该功能的逻辑及技术难点,而不是盲目的直接就撸代码,这样非常浪费时间.个人觉得web版聊天功能没什么实际应用场景,以前看过中国移动好 ...

  2. LInux 学习笔记系列

    1.Linux 就该这么学的笔记系列

  3. 文件上传之靶场upload-labs (11-20)

    第十一关 strrpos() 函数查找字符串在另一字符串中最后一次出现的位置 substr() 函数返回字符串的一部分 文件保存的方式是上传路径+随机时间+截取的文件后缀 其中上传路径可控,可以利用这 ...

  4. Econ 493 A1 - Fall 2019

    Econ 493 A1 - Fall 2019Homework 4Assignment InformationThis assignment is due on Monday November 18 ...

  5. tomcat闪退的解决思路

    用Tomcat总会遇到启动Tomcat闪退的问题. 什么叫闪退啊,就是闪一下,就退出了控制台. 都闪退了,为啥闪退也不知道呀,又没有错误信息,所以就要先阻止闪退,先看到错误信息,知道启动不起来的原因. ...

  6. Client 客户端AspNetCore.SignalR 通讯服务器 Quartz 执行任务

    背景 需要Client跑服务在终端间隔执行任务,我的目标是运行在树莓派上 Client代码 如果未连接成功时隔3秒重新连接服务器 public static void Reconnect() { va ...

  7. c#WinForm中TeeChart控件的注册和使用

    首先要注册好TeeChart控件,注册方法参考:https://blog.csdn.net/my_clear_mind/article/details/79741020 完成注册之后,新建一个WinF ...

  8. C# static readonly 修饰符初始化变量

    同事问了一个问题,readonly和static啥区别? 我就写了个demo运行了下: /*** * 验证初始化次数:static只初始化一次,无论多少用户访问,在内存中只有一份 * readonly ...

  9. 图示详解BERT模型的输入与输出

    一.BERT整体结构 BERT主要用了Transformer的Encoder,而没有用其Decoder,我想是因为BERT是一个预训练模型,只要学到其中语义关系即可,不需要去解码完成具体的任务.整体架 ...

  10. HighChat 动态绑定数据记录

    最近刚开始做图形操作,纠结了一上午,highchat 动态绑定数据这块一直不知道怎么绑定,后来多次尝试,发现 1.x轴的数据是个数组格式,我从后台传到前台的时候,js中用数组进行处理数据,然后赋值到c ...