Menu

#51 BFS traverse result in cycle spanning tree in Luna4.4.0

SCV 4.4.0 stable
open
BFS LUNA440 (1)
2014-10-13
2014-10-13
seven
No

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);
            }
        }
    }
}

Discussion


Log in to post a comment.