我们知道,算法是作用于具体数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于“图”这种数据结构的。这是因为,图这种数据结构的表达能力很强,大部分涉及搜索的场景都可以抽象成“图”。
图上的搜索算法,最直接的理解就是,在图中找出从一个顶点出发,到另一个顶点的路径。具体方法有很多,比如今天要讲的两种最简单、最“暴力”的深度优先、广度优先搜索,还有 A*、IDA* 等启发式搜索算法。
图有两种主要存储方法,邻接表和邻接矩阵。本文使用邻接表来存储图。我这里先给出图的代码实现。需要说明一下,深度优先搜索算法和广度优先搜索算法,既可以用在无向图,也可以用在有向图上。本文仅针对无向图。
首先是使用邻接矩阵存储的无向图:
public class Graph {
//邻接表
private int v;//顶点的个数
private LinkList adj[];
public Graph(int v){
this.v=v;
adj=new LinkL