1. 程式人生 > >有向圖中有向環檢測

有向圖中有向環檢測

背景

假如有三個存在優先順序的任務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; }