// // stack based general search engine import jds.Stack; import jds.collection.Vector; class SearchEngine { public SearchEngine (SearchState initialState) { // create data statck with one initial state states.addLast(initialState); } Stack states = new Vector(); public void run () { while (! states.isEmpty()) { SearchState current = (SearchState) states.getLast(); try { SearchState next = current.advance(); states.addLast(next); } catch (CannotAdvance e) { states.removeLast(); } catch (SearchDone e) { return; } } } }