package com.interview.basics.model.graph.searcher;
import com.interview.basics.model.graph.Graph;
import java.util.ArrayDeque;
import java.util.Queue;
public class BFSearcher extends Searcher {
protected Queue<Integer> queue;
public BFSearcher(Graph g){
super(g);
init();
queue = new ArrayDeque<Integer>();
}
public void search(int s, Processor p){
queue.add(s);
bfsInner(p);
}
protected void bfsInner(Processor p){
while(!queue.isEmpty()){
int s = queue.poll();
if(marked[s]) continue;
if(p != null){
p.preProcess(s);
}
if(isBreak) break;
marked[s] = true;
if(g.adj[s] != null){
for(int t : g.adj[s]){
if(!marked[t]){
queue.add(t);
edges[t] = s;
}
}
}
}
}
}