DFS(G)
1 for each vertex u belong to G.V
2 u.color = WHITE
3 u.pi = NIL
4 time = 0
5 for each vertex u belong to G.V
6 if u.color == WHITE
7 DFS-VISIT(G,u)
DFS-VISIT(G,u)
1 time = time + 1 // white vertex u has just been discovered
2 u.d = time
3 u.color = GRAY
4 for each v belong to G:Adj[u] // explore edge (u,v)
5 if v.color == WHITE
6 v.pi = u
7 DFS-VISIT(G,v)
8 u.color = BLACK // blacken u; it is finished
9 time = time + 1
10 u.f = time
java代码:
/**
* 深度优先搜索
* @author obguy
*
*/
public class Depth_First_Search {
private static int time = 0;
/**
* 深度优先搜索
* @param graphContent
*/
public static void DFS(String graphContent){
List<Vertex> vertexs = Route.getVertexs(graphContent);
for (Vertex vertex : vertexs){
vertex.setColor(Color.WHITE);
vertex.setParent(null);
}
for (Vertex vertex : vertexs){
if (vertex.getColor().equals(Color.WHITE)){
DFS_VISIT(graphContent, vertex);
}
}
}
@SuppressWarnings("rawtypes")
public static void DFS_VISIT(String graphContent, Vertex vertex){
LinkedList[] lists = Route.getLinkedList(graphContent);
time = time + 1;
vertex.setS(time);
vertex.setColor(Color.GRAY);
for (Object v : lists[vertex.getID()]){
Vertex V = (Vertex)v;
if (V.getColor().equals(Color.WHITE)){
V.setParent(vertex);
DFS_VISIT(graphContent, V);
}
}
vertex.setColor(Color.BLACK);
time = time + 1;
vertex.setF(time);
}
}