package com.interview.algorithms.graph; import com.interview.basics.model.graph.Graph; import com.interview.basics.model.graph.searcher.DFSearcher; import com.interview.basics.model.graph.searcher.ProblemSolver; import java.util.Stack; public class C6_16_CycleFinder extends ProblemSolver { private String cycle; private Stack<Integer> path = new Stack<Integer>(); public C6_16_CycleFinder(Graph g){ super(g); searcher = new DFSearcher(g); } public void remove(int t) { path.remove((Integer)t); } @Override public void postProcess(int v) { // TODO Auto-generated method stub } @Override public void preProcess(int v) { path.add(v); } public boolean buildCycle(int s, int t) { if(path.contains(t)){ StringBuilder builder = new StringBuilder(); builder.append(t); while(s != t && s >= 0){ builder.append("-" + s); s = searcher.getPrevious(s); } builder.append("-"+ s); cycle = builder.toString(); this.isBreak = true; return true; } else { return false; } } public String getCycle() { return cycle; } @Override protected void clean() { path.clear(); searcher.cleanPath(); searcher.cleanMark(); } }