package com.interview.basics.model.graph.searcher; import com.interview.algorithms.graph.C6_16_CycleFinder; import com.interview.basics.model.graph.Graph; public class DFSearcher extends Searcher{ public DFSearcher(Graph g){ super(g); init(); } public void search(int s, Processor p){ dfsInner(s, p); } protected void dfsInner(int s, Processor p){ if(p != null){ p.preProcess(s); } marked[s] = true; if(g.adj[s] != null){ for(int t : g.adj[s]){ if(isBreak) return; if(!marked[t]){ edges[t] = s; dfsInner(t, p); if(p instanceof C6_16_CycleFinder){ ((C6_16_CycleFinder)p).remove(t); } } else { if(p instanceof C6_16_CycleFinder){ isBreak = ((C6_16_CycleFinder)p).buildCycle(s, t); } } } } p.postProcess(s); } }