前两天参加了一个笔试,最后一道算法题,采用深度优先算法就能解决,但当时没有做出来,所以在网上查了下资料,写了这篇博客。
一.深度优先算法定义
顾名思义,深度优先搜索算法就是指在图中搜索时,沿着一条路走到黑,直到碰的头破血流了,然后回头,回到起点,在从起点出发,沿着未曾走过的路,继续去碰,直到所有的路都走完。这种每次一条道到黑的搜索过程称为深度优先
二.示例
如图所示:深度优先查看从1-->2--->5,返回1,然后1-->--6,返回1,在到4,返回1,发现没有了,搜索结束
三.代码框架
public abstract class DFS<T> {
public abstract boolean check(List<T> t, int depth);
public abstract boolean visited(T t);
public abstract boolean unvisited(T t);
public boolean dfs(List<T> elements, int depth) {
if (check(elements, depth)) {
return true;
}
for (T e : elements) {
if (!visited(e)) {
if (dfs(elements, depth + 1)) {
return true;
}
unvisited(e);
}
}
return false;
}
}