6

我正在尝试使用 JGraphT,并且在尝试使用 JGraphT API 实现深度优先搜索时遇到了困难。我创建了一个带有节点和顶点的简单图形,如下所示:

DirectedGraph <Integer, DefaultEdge> graph = new 
    DefaultDirectedGraph <Integer, DefaultEdge>(DefaultEdge.class);

graph.addVertex(7);
graph.addVertex(4);
graph.addVertex(9);
graph.addVertex(3);
graph.addVertex(2);
graph.addVertex(5);


graph.addEdge(7, 4);
graph.addEdge(7, 9);
graph.addEdge(9, 3);
graph.addEdge(3, 2);
graph.addEdge(3, 5);

我将如何使用DepthFirstSearchIterator在此图上运行 DFS?亲切的问候

4

1 回答 1

11

Just traverse the graph using DepthFirstSearchIterator. Here is an example:

import org.jgrapht.DirectedGraph;
import org.jgrapht.graph.DefaultDirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.traverse.DepthFirstIterator;
import org.jgrapht.traverse.GraphIterator;

public class GraphDemo {

    public static void main(String[] args) {
        DirectedGraph<Integer, DefaultEdge> graph = 
            new DefaultDirectedGraph <Integer, DefaultEdge>(DefaultEdge.class);

        graph.addVertex(7);
        graph.addVertex(4);
        graph.addVertex(9);
        graph.addVertex(3);
        graph.addVertex(2);
        graph.addVertex(5);


        graph.addEdge(7, 4);
        graph.addEdge(7, 9);
        graph.addEdge(9, 3);
        graph.addEdge(3, 2);
        graph.addEdge(3, 5);

        GraphIterator<Integer, DefaultEdge> iterator = 
                new DepthFirstIterator<Integer, DefaultEdge>(graph);
        while (iterator.hasNext()) {
            System.out.println( iterator.next() );
        }
    }
}

For more control, you can attach TraversalListener to the iterator using addTraversalListener(). Here is an example of a basic listener.

于 2013-11-24T22:21:30.687 回答