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…

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.