nurzain-pradana

Source Code Depth-First Search (DFS)

Nov 23rd, 2025
746
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.69 KB | Source Code | 0 0
  1. package id.ac.ut.tugaspraktikumstrukturdata;
  2.  
  3. import java.util.Iterator;
  4. import java.util.LinkedList;
  5.  
  6. /**
  7.  *
  8.  * @author Nur Zain Pradana
  9.  * https://www.linkedin.com/nurzainpradana
  10.  */
  11. public class GraphDFS {
  12.  
  13.     private int V; // Menampung Jumlah Vertex
  14.     private LinkedList<Integer> adj[]; // Adjacency List
  15.  
  16.     GraphDFS(int v) {
  17.         V = v;
  18.         adj = new LinkedList[v];
  19.  
  20.         for (int i = 0; i < v; i++) {
  21.             adj[i] = new LinkedList<>();
  22.         }
  23.     }
  24.  
  25.     // Menambahkan edge dari vertex v ke vertex w
  26.     void addEdge(int v, int w) {
  27.         adj[v].add(w);
  28.     }
  29.  
  30.     /**
  31.      * DFS Util (rekursif) *
  32.      */
  33.     void DFSUtil(int v, boolean visited[]) {
  34.         System.out.println("Visit node: " + v);
  35.         visited[v] = true;
  36.  
  37.         Iterator<Integer> i = adj[v].listIterator();
  38.  
  39.         while (i.hasNext()) {
  40.             int n = i.next();
  41.  
  42.             System.out.println("  Periksa tetangga dari " + v + ": " + n);
  43.  
  44.             if (!visited[n]) {
  45.                 System.out.println("   Masuk ke: " + n);
  46.                 DFSUtil(n, visited);
  47.                 System.out.println("Backtrack ke: " + v);
  48.             } else {
  49.                 System.out.println("    (Sudah dikunjungi) -> " + n);
  50.             }
  51.         }
  52.     }
  53.  
  54.     /**
  55.      * DFS Utama (Tanpa Pencarian) *
  56.      */
  57.     void DFS(int v) {
  58.         boolean visited[] = new boolean[V];
  59.         DFSUtil(v, visited);
  60.     }
  61.  
  62.     /**
  63.      * Pencarian nilai n di Graf menggunakan DFS *
  64.      */
  65.     boolean searchDFS(int start, int target) {
  66.         boolean visited[] = new boolean[V];
  67.         boolean found = searchDFSUtil(start, target, visited);
  68.         if (!found) {
  69.             System.out.println("Node " + target + " TIDAK ditemukan di graf.");
  70.         }
  71.  
  72.         return found;
  73.     }
  74.  
  75.     /**
  76.      * DFS Util untuk Pencarian *
  77.      */
  78.     private boolean searchDFSUtil(int current, int target, boolean visited[]) {
  79.         visited[current] = true;
  80.  
  81.         // Jika node cocok -> ditemukan
  82.         if (current == target) {
  83.             System.out.println("Node ditemukan: " + current);
  84.             return true;
  85.         }
  86.  
  87.         Iterator<Integer> it = adj[current].listIterator();
  88.  
  89.         while (it.hasNext()) {
  90.             int next = it.next();
  91.  
  92.             System.out.println("   Periksa tetangga dari " + current + ": " + next);
  93.  
  94.             if (!visited[next]) {
  95.                 System.out.println("    Masuk ke: " + next);
  96.  
  97.                 if (searchDFSUtil(next, target, visited)) {
  98.                     return true;
  99.                 } else {
  100.                     System.out.println("    Kembali ke: " + current + " (setelah cek " + next + ") ");
  101.                 }
  102.             } else {
  103.                 System.out.println("    (Sudah dikunjungi) -> " + next);
  104.             }
  105.  
  106.         }
  107.  
  108.         return false; // Tidak Ditemukan
  109.     }
  110.  
  111.     public static void main(String args[]) {
  112.  
  113.         GraphDFS g = new GraphDFS(8);
  114.  
  115.         g.addEdge(0, 1);
  116.         g.addEdge(0, 2);
  117.         g.addEdge(1, 3);
  118.         g.addEdge(1, 4);
  119.         g.addEdge(2, 5);
  120.         g.addEdge(2, 6);
  121.         g.addEdge(3, 7);
  122.         g.addEdge(4, 7);
  123.         g.addEdge(5, 6);
  124.         g.addEdge(6, 7);
  125.        
  126.         /** Tampilkan DFS **/
  127.         System.out.println("DFS (mulai dari 0):");
  128.         g.DFS(0);
  129.        
  130.         System.out.println("\n");
  131.        
  132.         /** Cari Node N **/
  133.         int target = 3;
  134.        
  135.         System.out.println("Mencari node " + target + " dengan DFS:");
  136.         boolean find = g.searchDFS(0, target);
  137.        
  138.         if(!find)
  139.         {
  140.             System.out.println("Node " + target + " TIDAK ditemukan di Graf.");
  141.         }
  142.  
  143.     }
  144.  
  145. }
  146.  
Advertisement
Add Comment
Please, Sign In to add comment