算法導論之深度優先搜索

jopen 9年前發布 | 1K 次閱讀 Java 算法

import org.loda.structure.Stack;

/**

    • @ClassName: DFS
    • @Description: 深度優先搜索(無向圖)
    • @author minjun
    • @date 2015年5月24日 上午4:02:24 / public class DFS {

      //原點 private int s;

      // visited[i]表示i節點是否被訪問過 private boolean[] visited;

      // prev[i]表示沿著一條路徑到i時,這條路徑上i的上一個節點 private int[] prev;

      public DFS(int s,Graph g){ //初始化 this.s=s; int v=g.v();

      visited=new boolean[v]; prev=new int[v];

      for(int i=0;i<v;i++){

         prev[i]=-1;
      

      }

      dfs(s,g); }

      private void dfs(int v, Graph g) {

      //訪問節點 visited[v]=true;

      //查找v所有的鄰接節點 for(int w:g.adj(v)){

         //找到沒有訪問過的節點
         if(!visited[w]){
             prev[w]=v;
             dfs(w, g);
         }
      

      } }

      public boolean hasPathTo(int v){ return visited[v]; }

      public Iterable<Integer> pathTo(int v){ if(!hasPathTo(v)) return null; Stack<Integer> path=new Stack<Integer>();

      for(int i=v;i!=s;i=prev[i]){

         path.push(i);
      

      } path.push(s); return path; }

      public static void main(String[] args) { //原點 int s=0; //頂點數目 int n=6; Graph g=new Graph(n);

      //將頂點添加到圖中 g.add(0, 5); g.add(2, 4); g.add(2, 3); g.add(1, 2); g.add(0, 1); g.add(3, 4); g.add(3, 5); g.add(0, 2);

      DFS bfs=new DFS(s, g);

      for(int i=0;i<n;i++){

         Iterable<Integer> path=bfs.pathTo(i);
         System.out.print("從原點"+s+"到"+i+"的可達路徑為:");
         if(path==null){
             System.out.println("不可達");
         }else{
             for(int j:path){
                 System.out.print(j+"->");
             }
      

      // System.out.println("\t統計得到的距離為"+bfs.distTo(i));

             System.out.println();
         }
      

      }

      } }

輸出內容為:

從原點0到0的可達路徑為:0-> 從原點0到1的可達路徑為:0->2->1-> 從原點0到2的可達路徑為:0->2-> 從原點0到3的可達路徑為:0->2->3-> 從原點0到4的可達路徑為:0->2->3->4-> <p> <span></span>從原點0到5的可達路徑為:0->2->3->5->
</p></pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!