package com.interview.basics.model.graph.searcher; import com.interview.basics.model.graph.Graph; public abstract class Searcher { protected Graph g; protected boolean[] marked; protected int[] edges; boolean isBreak = false; public Searcher(Graph g){ this.g = g; } public abstract void search(int s, Processor p); public void init(){ marked = new boolean[g.V]; edges = new int[g.V]; for(int i = 0; i < g.V; i++){ edges[i] = -1; } } public String path(int s, int v){ search(s, null); if(marked[v]){ StringBuilder builder = new StringBuilder(); builder.append(v); int n = edges[v]; while(n != s){ builder.append("-" + n); n = edges[n]; } builder.append("-" + s); return builder.toString(); } else { return ""; } } public boolean isMarked(int s){ return marked[s]; } public int getPrevious(int s){ return edges[s]; } public void cleanPath(){ for(int i = 0; i < g.V; i++){ edges[i] = -1; } } public void cleanMark(){ marked = new boolean[g.V]; } public boolean allMarked(){ for(int i = 0; i < g.V; i++){ if(marked[i] == false) return false; } return true; } public boolean isBreak() { return isBreak; } public void setBreak(boolean isBreak) { this.isBreak = isBreak; } }