I paste here the bug and fix code:
/** * Traverses the graph from the given node. * @param startnode */ protected void bfs(INodeExt startnode){ Queue<INodeExt> queue = new LinkedList<INodeExt>(); enqueue(queue, startnode); visitNode(startnode); while(!queue.isEmpty()){ INodeExt node = dequeue(queue); IEdgeListExt outgoingEdges = node.getOutgoingEdgeList(); //fix code by lingtong List<IEdgeExt> bkup = new ArrayList<IEdgeExt>(); for(int i = 0; i < outgoingEdges.size(); i++){ bkup.add(outgoingEdges.getEdgeExt(i)); } for(int i = 0; i < bkup.size(); i++){ IEdgeExt edge = bkup.get(i); if(edge.isVisited()){ continue; } visitEdge(edge); INodeExt targetNode = edge.getTarget(); if(!targetNode.isVisited()){ enqueue(queue, targetNode); visitNode(targetNode); } } } }