package com.interview.algorithms.graph; import java.util.Stack; import com.interview.basics.model.graph.searcher.DFSearcher; import com.interview.basics.model.graph.Graph; import com.interview.basics.model.graph.searcher.ProblemSolver; /** * Run depth-first search. Return vertices in reverse postorder * @author stefanie * */ public class C6_6_TopologicalSorter extends ProblemSolver { Stack<Integer> stack = new Stack<Integer>(); C6_16_CycleFinder cycleFinder ; public C6_6_TopologicalSorter(Graph g) { super(g); searcher = new DFSearcher(g); cycleFinder = new C6_16_CycleFinder(g); cycleFinder.solve(); } @Override public void preProcess(int v) { } @Override public void postProcess(int v) { stack.add(v); } public String getOrder(){ StringBuilder builder = new StringBuilder(); while(!stack.isEmpty()){ builder.append(stack.pop() + "-"); } return builder.toString(); } public boolean canSort(){ return (cycleFinder.getCycle() == null) ? true : false; } public String why(){ return cycleFinder.getCycle(); } @Override protected void clean() { // if(searcher.allMarked()){ // this.isBreak = true; // } //else { // stack.clear(); // searcher.cleanPath(); // searcher.cleanMark(); // } } }