Graph — Konsep — Struktur Data

Graph adalah kumpulan node (vertex) yang dihubungkan oleh edge (sisi). Tidak seperti tree, graph bisa punya cycle dan node bisa terhubung ke siapa saja. Jenis G

Graph adalah kumpulan node (vertex) yang dihubungkan oleh edge (sisi). Tidak seperti tree, graph bisa punya cycle dan node bisa terhubung ke siapa saja.

Jenis Graph:

Jenis Penjelasan
Directed Edge punya arah (A→B ≠ B→A)
Undirected Edge dua arah (A—B = B—A)
Weighted Edge punya bobot/jarak
Unweighted Semua edge sama

Representasi di kode:

// Adjacency List — paling umum
class Graph {
  constructor() {
    this.adjacencyList = new Map();
  }

  addVertex(vertex) {
    if (!this.adjacencyList.has(vertex)) {
      this.adjacencyList.set(vertex, []);
    }
  }

  // Undirected edge
  addEdge(v1, v2) {
    this.adjacencyList.get(v1).push(v2);
    this.adjacencyList.get(v2).push(v1);
  }
}

const g = new Graph();
["Jakarta", "Bandung", "Surabaya", "Yogya"].forEach(v => g.addVertex(v));
g.addEdge("Jakarta", "Bandung");
g.addEdge("Jakarta", "Surabaya");
g.addEdge("Bandung", "Yogya");
g.addEdge("Surabaya", "Yogya");

// Jakarta: [Bandung, Surabaya]
// Bandung: [Jakarta, Yogya]
// Surabaya: [Jakarta, Yogya]
// Yogya: [Bandung, Surabaya]

Kegunaan nyata:

🎭 Analogi sehari-hari: Graph = peta hubungan teman di kampus. Setiap orang = vertex. Garis "kenalan dengan" = edge. Bedanya:

Tree = kasus khusus graph (no cycle, satu root). Graph lebih bebas.

💡 Adjacency List vs Matrix:

Default pilih List kecuali graph dense (>50% kemungkinan edge ada).

⚠️ Jebakan umum:

🎯 Kapan butuh Graph (bukan Tree)?

TL;DR: Graph = vertex + edge, lebih fleksibel dari tree. Adjacency List paling umum. Fondasi navigasi, social network, dan dependency management.