背景
假如有三个存在优先级的任务x、y及z,x要在y之前完成,y要在z之前完成,而z又要在x之前完成,那该问题一定是无解的。寻找有向图中是否存在有向环是判定一个任务优先级问题的前提
边的类型
从某个点开始的深度搜索过程中遇到了后向边,可作为找到有向环的标志
代码实现
private boolean[] onStack = new boolean[V];
public void dfs(int s) {
marked[s] = true;
onStack[s] = true;
for(int w : G.adj(s)) {
if (!marked[w]) {
dfs(w);
} else if (onStack[w]) {
hasCircle = true;
}
}
onStack[s] = false;
}