@Override public Edge next() { edgeToReturn.start = edge.start; edgeToReturn.end = edge.end; edge.end++; if (edge.end == model.numStates()) { edge.end = 0; edge.start++; } return edgeToReturn; }
public ArrayList<Edge> search(int begNode) { // build list of edges for the result ArrayList<Edge> result = new ArrayList<Edge>(); // you have a list of nodes that have been visited ArrayList<Integer> done = new ArrayList<Integer>(); // populate the todo ArrayList<Integer> todo = new ArrayList<Integer>(); for (int i = 0; i < 18; i++) { todo.add(i); } // stick the start node into done, remove from todo done.add(begNode); todo.remove(begNode); // this will be used for the getting of options PriorityQueue<Edge> edges = new PriorityQueue<Edge>(); // until all the nodes are in done while (done.size() != 18) { // System.out.println("todo: "+todo); // System.out.println("done: "+done); // System.out.println("current result: \t"+result); // System.out.println(""); // get the options currently available, starting at done nodes // and ending on "todo" nodes, and load them into a priority queue for (int i = 0; i < done.size(); i++) { int start = done.get(i); for (int j = 0; j < todo.size(); j++) { int end = todo.get(j); // System.out.println(" edge we are adding is " + start + " to " + end); edges.add(new Edge(c, start, end)); } } // take the one off the top, add it to result Edge winner = edges.poll(); // System.out.println("The winner is: " + winner); result.add(winner); // set it's new node as visited done.add((Integer) winner.end()); todo.remove((Integer) winner.end()); // clear the edges at the end edges.clear(); } return result; }
protected Edge project(Edge edge) { tempEdge.start = edge.start; tempEdge.end = edge.end; tempEdge.state = gp.project(edge.state); tempEdge.head = edge.head; tempEdge.tag = edge.tag; return tempEdge; }
@Override public void start() { edge.start = 0; edge.end = 0; }