private void breadthFirstSearch() { ReachableSet reachset = new ArrayListReachableSet(); Queue q = new FleXQueue(); reachset.add(start); if(goal.matches(start.getData())) { goalReachable = true; reachableSet = reachset; return; } q.enqueue(start); MultiNode u; ArrayList forwardNhbrs; boolean exists; while (q.size() != 0) { u = (MultiNode) q.dequeue(); forwardNhbrs = u.getFwd(); exists = false; for (int i =0; i < forwardNhbrs.size(); i ++) { for (int j=0; j< reachset.size(); j++) { if (forwardNhbrs.get(i).equals(reachset.get(j))) { exists = true; } if (!exists) { MultiNode temp = forwardNhbrs.get(i); temp.setDistance(temp.getDistance()+1); reachset.add(temp); if (goal.matches(temp.getData())) { goalReachable = true; reachableSet = reachset; return; } q.enqueue(temp); } } } } } // end of breadthFirstSearch