一、 搜索算法
深度优先搜索和广度优先搜索是最暴力的图的搜索算法。算法的目标是,给定一张图,一对初始和终止节点,找到两节点之间的节点路径。(代码均是找到两个节点之间的路径)
广度优先搜索是一层一层搜索,深度优先搜索是搜到底,不能走了在回溯。
无向图
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);
}
}
二、广度优先遍历
一种“地毯式”层层推进的策略搜索
各变量说明
- visited数组 记录已经被访问的顶点 避免顶点被重复访问
- queue表示已访问但未深入的节点(当前边界)
- prev数组访问节点的前驱
实现思路- 准备部分:visited清零,prev置-1。queue加入s节点,