深度和广度优先搜索

Posted cherrytab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度和广度优先搜索相关的知识,希望对你有一定的参考价值。

我们知道,算法是作用于具体数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于“图”这种数据结构的。这是因为,图这种数据结构的表达能力很强,大部分涉及搜索的场景都可以抽象成“图”。

无向图的代码实现

public class Graph { // 无向图
  private int v; // 顶点的个数
  private LinkedList<Integer> adj[]; // 邻接表

  public Graph(int v) {
    this.v = v;
    adj = new LinkedList[v];
    for (int i=0; i<v; ++i) {
      adj[i] = new LinkedList<>();
    }
  }

  public void addEdge(int s, int t) { // 无向图一条边存两次
    adj[s].add(t);
    adj[t].add(s);
  }
}

 

广度优先搜索

广度优先搜索(Breadth-First-Search),我们平常都把简称为 BFS。直观地讲,它其实就是一种“地毯式”层层推进的搜索策略,即先查找离起始顶点最近的,然后是次近的,依次往外搜索。理解起来并不难,所以我画了一张示意图,你可以看下。

技术图片

 

吃个饭再写。

   

以上是关于深度和广度优先搜索的主要内容,如果未能解决你的问题,请参考以下文章

图的广度、深度优先搜索和拓扑排序

深度和广度优先搜索

无向图 广度优先搜索 和 深度优先搜索

七十九深度和广度优先搜索算法

图的遍历之 深度优先搜索和广度优先搜索

Python算法-深度优先搜索&广度优先搜索(DFS&BFS)