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. linux 查看用户列表

    cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"| ...

  2. AngularJS入门Demo

    1 :表达式 <html> <head> <title>入门小Demo-1</title> <script src="angular.m ...

  3. SpringCloud与Dubbo区别对比

    1:SpringCloud与Dubbo区别对比 (1):活跃度 目前SpringCloud的活跃度明显远高于Dubbo(参考github) (2):主要区别   Dubbo Spring Cloud ...

  4. forever帮助node应用后台运行

    windows系统下,运行node应用的时候,会有个命令窗存在,看着就碍眼,而且一不小心就关掉了,那有没有方法让node应用也可以运行在后台呢?方法也不止一种,我这里就选forever了,因为安装使用 ...

  5. pod的yaml说明

    apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数据/属性 name: ...

  6. Mysql系列(十一)—— 性能分析慢查询日志

    转载自:http://www.cnblogs.com/kerrycode/p/5593204.html 慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响 ...

  7. 2019-11-29-C#-性能分析-反射-VS-配置文件-VS-预编译

    原文:2019-11-29-C#-性能分析-反射-VS-配置文件-VS-预编译 title author date CreateTime categories C# 性能分析 反射 VS 配置文件 V ...

  8. 15-213 Bomb Lab

    bomb lab是一道学习汇编语言的题,一共有六个阶段,全部解开即可完成 phase_1 0x0000000000400e32 <+>: callq 0x40149e <read_l ...

  9. 三款免费好用的Gif录屏神器

    三款免费好用的Gif录屏神器 1. 免费开源的GIF录制工具ScreenToGif 官网地址:http://www.screentogif.com/ ScreenToGif,国外免费开源小巧实用的Gi ...

  10. git的clone

    在使用git来进行版本控制时,为了得一个项目的拷贝(copy),我们需要知道这个项目仓库的地址(Git URL). Git能在许多协议下使用,所以Git URL可能以ssh://, http(s):/ ...