如何填写定向深度优先搜索的时间和它离开的时间? DFS的直接或无向是否重要?
例如
答案 0 :(得分:0)
每次在节点上启动和完成DFS时,只需保留一个计数器并分配并增加它。作为选择启动图片DFS的节点(因为它访问图中的所有节点而不仅仅是连接到U
节点的节点),您必须创建一个连接到该节点的假节点图中的所有节点并在该节点上调用DFS。
int time = 0;
HashSet<Vertex> visited = new HashSet<>();
DFS(Vertex v){
v.start = time++;
v.end = Integer.MAX_VALUE;
for(Vertex t : v.neighbors){
if(!visited.contains(t)){
visited.add(t);
DFS(t)
}
else if(t.start < v.start && t.end < v.start)
//cross edge
else if(t.start < v.start)
//back edge
else if(t.start > v.start)
//forward edge
}
v.end = time++;
}