Anda di halaman 1dari 9

GRAF BERARAH

Objektif :
1. Mahasiswa Memahami Konsep Graf Berarah
2. Mahasiswa Memahami Derajat
3. Mahasiswa Memahami Lintasan
4. Mahasiswa Memahami Konektivitas
5. Mahasiswa Memahami Matriks Ketetanggan
6. Mahasiswa Memahami Matriks bersisian

5.1. Graf Berarah


Graf terarah atau digraph merupakan graf yang sisi-sisinya bersifat satu-arah.
Suatu graf berarah G dan digraf (atau graf saja) terdiri dari dua hal:
1. Himpunan V yang elemen-elemennya disbut verteks, node, atau titik
2. Himpunan pasangan berurut E (u, v) dari verteks yang disebut lengkung atau sisi terarah atau
sisi saja

Kita akan menulis G(V, E) saat kita ingin menekankan kedua bagian G, kita juga menulis V(G) dan E(G)
untuk menotasikan, berturut-turut, himpunan vertex dan himpunan sisi(edge) suatu graf G .
Misalkan e = (u, v) adalah suatu sisi terarah dalam suatu digraf G. Maka istilah ini digunakan:
 e dimulai di u dan berakhir di v
 u adalah asal atau titik asal dari e, dan v adalah tujuan atau titik terminal dari e
 v adalah successor (penerus) dari u
 u bersebelahan dengan v, dan v bersebelahan dari u

jika = , maka disebut suatu loop.


Himpunan semua successor dari suatu verteks adalah penting; ini dinotasikan dan secara formal
didefinisikan oleh
succ( ) = { € V | ada suatu sisi ( , ) € E}
ini disebut sebagai daftar successor atau daftar adjacency dari .
Suatu gambar (picture) graf terarah G adalah representasi G pada bidang. Artinya, setiap verteks
dari G direpresentasikan oleh suatu titik (atau lingkaran kecil), dan setiap sisi (terarah) = ( , )
direpresentasikan oleh suatu tanda panah atau kurva terarah dari titik awal dari ke titik terminal .
Biasanya suatu digraf G ditampilkan dalam bentuk gambar dan tidak dengan menuliskan daftar secara
eksplisit semua verteks dan sisi-sisinya.
Jika sisi atau verteks dari suatu graf terarah G dilabeli dengan suatu jenis data, maka G disebut
sebagai graf terarah berlabel. Suatu graf terarah (V, E) disebut terhingga jika himpunan V verteks-
verteksnya dan himpunan E sisi-sisinya adalah terhingga.

1
Perhatikan graf terarah G pada gambar dibawah ini. graf ini terdiri dari empat verteks, A, B, C, D,
yang artinya V(G) = {A, B, C, D} dan tujuh sisi berikut:
E(G) = { , } = {(A, D), (B, A), (D, B), (B, C), (D, C), (B, B)}

Sisi dan disebut sejajar (pararel) karena keduanya dimulai di B dan berakhir di A. Sisi merupakan
loop karena dimulai dan berakhir di B

5.2. Derajat
Misalkan G adalah suatu graf terarah. Outdrgree (pranala Iuar/derajat ke luar) dari suatu verteks
dari G. yang dituliskan outdeg( ), adalah jumiah sisi yang dimulai di . dan indrgree (pranala dalam/derajat
ke dalam) dari . yang dituliskan indeg( ), adalah jumlah sisi-sisi yang berakhir di . Karena setiap sisi
dimulai dan berakhir di suatu verteks kita dapat segera memperoleh tcorema berikut.
Jumlah outdegree dari verteks-verteks suatu digraf G adalah sama dengan jumiah indegree dari
verteks-verteks tersebut, yang adalah sama dengan jumlah sisi-sisi dalam G.
Suatu verteks dengan indegree nol disebut source (sumber) dan suatu verteks dengan
outdegree nol disebut sink (muara)

Outdeg(A) = 1, Outdeg(B) = 4, Outdeg(C) = 0, Outdeg(D) = 2,


Indeg(A) = 2, Indeg(B) = 2, Indeg(C) = 2, Indeg(D) = 1

Sebagaimana disuga, jumlah outdegree-nya sama dengan jumlah indegree-nya, yang adalah sama dengan
jumlah 7 sisi-sisinya. Vertex C adalah suatu sink karena tidak ada sisi yang dimulai di C. graf ini tidak
memiliki source.

5.3. Lintasan
Misalkan G sebagai suatu graf terarah. Konsep-konsep tentang lintasan, lintasan sederhana. trail
dan siklus diambil dari graf-graf tak terarah dan diterapkan pada graf-graf terarah dengan pengecualian arah
sisi-sisinya harus sesusi dengan arah lintasannya.

2
Tepatnya:
 Suatu lintasan (terarah) P dalam G adalah suatu barisan bergantian antara ventcks-verteks dan
sisi-isi terarah misainya,
o P=( , , , , , …, , )
 Sedemikian sehingga sisi dimulai di dan berkhir di , jika tidak menimbulkan kerancuan, kita
menuliskan P dengan menggunakan barisan vertex-verteksnya atau barisan sisi-sisinya.
 Panjang lintasan P adalah n, jumlah sisi-sisinya
 Lintasan sederhana adalah suatu lintasan yang memiliki verteks-verteks yang unik. Trail adalah
lintasan dengan sisi-sisi yang unik
 Lintasan tertutup memiliki verteks awal dan akhir yang sama
 Lintasan merentang berisi semua verteks dari G
 Siklus (atau sirkuit) adalah lintasan tertutup yang memiliki verteks-verteks yang unik
 Semilintasan sama dengan lintasan dengan pengecualian sisi dapat dimulai di atau dan
berakhir di verteks yang satunya

5.4. Konektivitas
Ada tiga jenis konektivitas (keterhubungan) dalam suatu graf terarah G:
(i) G terhubung secara kuat (atau kuat saja) jika, untuk setiap pasangan verteks dan dalam G. ada suatu
lintasan dari ke dan suatu lintasan dari ke . artinya, masing-masing dapat dijangkau dari yang
lainnya.
(ii) G terhubung secara unilateral atau unilateral saja) jika, untuk sembarang pasangan verteks dan
dalam G.ada suatu lintasan dari ke atau suatu lintasan dari ke , artinya, salah satu dari mereka dapat
dijangkau dari yang lainnya.
(ii) G terhubung secara lemah (atau lemah saja) jika ada suatu semilintasan antara sembarang pasangan
verteks dan dalam G.
Misalkan G' sebagai graf (tak terarah) yang diperoleh dari graf terarah G dengan cara menjadikan
semua sisi dalam G menjadi tak terarah. Jelaslah, G adalah terhubung secara lemah jika dan hanya jika graf
G' terhubung.
Perhatikan bahwa terhubung secara kuat mengimplikasikan terbubung secara unilateral yang
mengimplikasikan terhubung secara lemah. Kita mengatakan bahwa G faktual unilateral jika memang
unilateral tapi tidak kuat, dan kita mengatakan bahwa G faktual lemah jika memang lemah tapi tidak
unilateral.
Konektivitas dapat dikarakteristikkan dalam istilah lintasan membentang sebagai berikut:
Misalkan G sebagai suatu graf terarah yang terhingga. Maka:
 G adalah kuat jika dan hanya jika G memiliki suatu lintasan membentang tertutup.
 G adalah unilateral jika dan hanya jika G memiliki suatu lintasan membentang.
 G adalah lemah jika dan hanya jika G memiliki suatu semilintasan membentang.

3
5.5. Matriks Ketetanggaan (Adjacency Matriks)
Jika G adalah graf dengan n simpul yaitu , , ….., maka matriks ketetanggaan dari graf G
adalah suatu matriks A(G) = ( ) berukuran n x n dimana adalah banyaknya sisi yang menghubungkan
simpul dan
Matriks ketetanggaan untuk graf sederhana dan tidak berarah selalu simetri sedangkan untuk graf
berarah matriks ketetanggaannya belum tentu simetri (akan simetri jika berupa graf berarah lengkap). Selain
itu diagonal utamanya selalu nol karena tidak terdapat sisi gelang(loop). Jumlah elemen matriks
ketetanggaan untuk graf dengan simpul adalah .

Keuntungan representasi dengan matriks ketetanggaan adalah matriksnya dapat diakses langsung
melalui indeks. Selain ga dapat menentukan dengan langsung apakah simpul i dan simpu bertetangga.
Derajat tiap simpul i dapat dihitung dari matriks ketetanggaan. Untuk graf berarah,

( ) ∑ ( ) ∑

5.6. Matriks Bersisian (Incidency Matriks)


Jika G adalah graf dengan n simpul yaitu , , ….., dan t sisi yaitu , , ….., maka matriks
bersisian dari graf G adalah suatu matriks M(G) = ( ) berukuran n x t dimana diberikan oleh:
= 0, simpul tidak bersisian dengan sisi
1, simpul bersisian dengan sisi bukan gelang (loop)
2, simpul bersisian dengan sisi gelang (loop)
Contoh:

4
Contoh Demo Program "Matriks Berarah" :

Dalam representasi daftar ketetanggaan graf, setiap simpul dalam graf diasosiasikan dengan kumpulan
simpul atau sisi tetangganya, yaitu, setiap simpul menyimpan daftar simpul yang berdekatan.

Sebagai contoh untuk grafik di atas, di bawah ini adalah representasi bergambar daftar kedekatannya:

/* Demo program graf berarah */

#include <stdio.h>
#include <stdlib.h>

// Tentukan jumlah maksimum simpul dalam grafik


#define N 6

// Struktur data untuk menyimpan objek grafik


struct Graph
{
// Array pointer ke Simpul untuk mewakili daftar kedekatan
struct Simpul* head[N];
};

// Struktur data untuk menyimpan simpul daftar kedekatan


struct Simpul
{
int dest;
struct Simpul* next;
};

// Struktur data untuk menyimpan sisi grafik


struct Sisi {
int src, dest;

5
};

// Berfungsi untuk membuat daftar adjacency dari sisi yang ditentukan


struct Graph* buatGraph(struct Sisi Edges[], int n)
{
unsigned i;

// Mengalokasikan penyimpanan untuk struktur data grafik


struct Graph* graph = (struct Graph*)malloc(sizeof(struct Graph));

// Inisialisasi penunjuk kepala untuk semua simpul


for (i = 0; i < N; i++) {
graph->head[i] = NULL;
}

// Tambahkan tepi ke grafik berarah satu per satu


for (i = 0; i < n; i++)
{
// Dapatkan simpul sumber dan tujuan
int src = Edges[i].src;
int dest = Edges[i].dest;

// Mengalokasikan Simpul baru daftar adjacency dari `src` ke `dest`


struct Simpul* newSimpul = (struct Simpul*)malloc(sizeof(struct Simpul));
newSimpul->dest = dest;

// Arahkan simpul baru ke kepala saat ini


newSimpul->next = graph->head[src];

// Arahkan penunjuk kepala ke simpul baru


graph->head[src] = newSimpul;
}

return graph;
}

// Berfungsi untuk mencetak representasi daftar adjacency dari grafik


void cetakGraph(struct Graph* graph)
{
int i;
for (i = 0; i < N; i++)
{
// Cetak simpul saat ini dan semua tetangganya
struct Simpul* ptr = graph->head[i];
while (ptr != NULL)
{
printf("(%d —> %d)\t", i, ptr->dest);
ptr = ptr->next;
}

printf("\n");
}
}

// Implementasi graf berarah di C


int main(void)
{
// Array input yang berisi tepi grafik (sesuai diagram di atas)
// Pasangan `(x, y)` dalam array mewakili tepi dari `x` ke `y`
struct Sisi Edges[] =
{
{ 0, 1 }, { 1, 2 }, { 2, 0 }, { 2, 1 }, { 3, 2 }, { 4, 5 }, { 5, 4 }
};

// Hitung jumlah sisinya


int n = sizeof(Edges)/sizeof(Edges[0]);

// Buatlah graf dari sisi-sisi yang diberikan


struct Graph *graph = buatGraph(Edges, n);

// Berfungsi untuk mencetak representasi daftar adjacency dari grafik


cetakGraph(graph);

return 0;
}

6
Outputnya:

(0 —> 1)

(1 —> 2)

(2 —> 1) (2 —> 0)

(3 —> 2)

(4 —> 5)

(5 —> 4)

Contoh Demo Program "Matriks Ketetanggaan" :

Matriks ketetanggaan adalah cara untuk merepresentasikan grafik sebagai matriks boolean (0 dan 1). Graf
berhingga dapat direpresentasikan dalam bentuk matriks bujur sangkar di komputer, di mana nilai boolean
matriks menunjukkan jika ada jalur langsung antara dua simpul.

Sebagai contoh, kita memiliki grafik di bawah ini.

Grafik ini dapat kita nyatakan dalam bentuk matriks seperti di bawah ini.

7
Setiap sel dalam tabel/matriks di atas direpresentasikan sebagai Aij, di mana i dan j adalah simpul. Nilai Aij
adalah 1 atau 0 tergantung pada apakah ada sisi dari simpul i ke simpul j.
Jika ada lintasan dari i ke j, maka nilai Aij adalah 1 jika tidak 0. Misalnya ada lintasan dari simpul 1 ke simpul
2, maka A12 adalah 1 dan tidak ada lintasan dari simpul 1 ke 3, jadi A13 adalah 0.
Dalam kasus graf tak berarah, matriksnya simetris terhadap diagonal karena setiap sisi (i,j), ada juga sisi
(j,i).

/* Representasi Matriks Ketetanggaan dalam C */

#include <stdio.h>
#define V 4

// Inisialisasi matriks ke nol


void init(int arr[][V]) {
int i, j;
for (i = 0; i < V; i++)
for (j = 0; j < V; j++)
arr[i][j] = 0;
}

// Tambahkan sisi
void tambahSisi(int arr[][V], int i, int j) {
arr[i][j] = 1;
arr[j][i] = 1;
}

// Cetak matriks
void cetakAdjMatrix(int arr[][V]) {
int i, j;

for (i = 0; i < V; i++) {


printf("%d: ", i);
for (j = 0; j < V; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}

// Program utama
int main() {
int adjMatrix[V][V];

init(adjMatrix);
tambahSisi(adjMatrix, 0, 1);
tambahSisi(adjMatrix, 0, 2);
tambahSisi(adjMatrix, 1, 2);
tambahSisi(adjMatrix, 0, 3);

cetakAdjMatrix(adjMatrix);

return 0;
}

8
Output:
0: 0 1 1 1
1: 1 0 1 0
2: 1 1 0 0
3: 1 0 0 0

Referensi
Daniel, F., & Taneo, P. N. (2019). Teori Graf. Yogyakarta: Deepublish.
Lipschutz, S. (2008). Matematika Diskrit (Schaum's Outlines). Jakarta: Erlangga.
Wilson, R. J. (2010). Pengantar Teori Graf. Jakarta: Erlangga
https://www.programiz.com/.

Anda mungkin juga menyukai