2013-11-22 24 views
4

我正在試驗JGraphT並嘗試使用JGraphT API實現深度優先搜索。我創建瞭如下一個簡單圖的節點和頂點的:如何使用DepthFirstSearchIterator類在圖上使用JGraphT運行深度優先搜索

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?親切的問候

回答

8

只需使用DepthFirstSearchIterator遍歷圖表。這裏有一個例子:

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

更多的控制,你可以將TraversalListener使用addTraversalListener()迭代器。這是一個基本聽衆的example