Anda di halaman 1dari 14

MODUL PRAKTIKUM

STRUKTUR
DATA
TA. 2020-2021

Laboratorium Jaringan Komputer


dan Struktur Data (Netlab)
2021
BAB 10
GRAPH
10.1 PENGERTIAN GRAPH
Graph adalah struktur data non-linier yang terdiri dari node dan edge.
Node juga disebut sebagai simpul dan garis atau busur yang menghubungkan
dua titik/simpul dalam grafik disebut edge. Secara lebih formal, Graph dapat
didefinisikan sebagai sebuah Graph (G) terdiri dari himpunan simpul atau
Vertices/nodes (V) terbatas dan himpunan Busur atau Edge (E) yang
menghubungkan sepasang simpul.

Gambar 10.1 Ilustrasi Graphs


Maka dapat dirumuskan dalam notasi matematika bahwa G = (V,E)
dimana posisi urutan objek pada elemen berurutan sangat penting dan posisi
urutan objek pada elemen tidak berurutan tidak penting. Berikut syaratnya :
Elemen berurutan (ordered pair) = jika a ≠ b maka (a,b) ≠ (b,a)
Elemen tidak berurutan (unordered pair) = {a,b} = {b,a}

A. REPRESENTASI SIMPUL (V) & BUSUR (E)


Dalam merepresentasikan sebuah graph, pastikan graph tersebut
memiliki Simpul atau Vertices (V) dan Busur atau Edge (E). Titik simpul
dapat diletakkan secara bebas dan dapat diberi nama sesuai kebutuhan.
Sebagai contoh mari kita buat graph dengan 8 buah Simpul atau Vertices
(V) dan 10 buah Busur atau Edge (E). Berikut hasilnya :

1
Gambar 10.2 Contoh Graph
Pada contoh itu di dapatkan Simpul atau Vertices (V) nya adalah
V = { V1, V2, V3, V4, V5, V6, V7, V8 } dan Busur atau Edge (E) nya
adalah E = {{V1,V2}, {V1,V3}, {V1,V4}, {V2,V5}, {V2,V6}, {V3,V7},
{V4,V8}, {V7,V8}, {V5,V8}, {V6,V8}}.
B. Jenis Graph

Gambar 10.3 Contoh Jenis Graph


1. Terarah (Directed)
Busur terarah adalah busur yang memiliki sambungan atau arah
dari vertex A ke B namun kita tidak bisa mengasumsikan sambungan atau
arah dari B ke A. Koneksi ini disebut koneksi satu arah. Dalam jenis busur
terarah ini, salah satu sisi akan menjadi asal atau origin dan salah satu sisi
lainnya akan menjadi tujuan atau destination. Untuk digambarkan kita
menggunakan sebuah anak panah dari titik asal mengarah ke tujuan.

Gambar 10.4 Ilustrasi busur tearah

2
Dalam contoh diatas terdapat 2 buah busur terarah. Pertama kita
dapat definisikan vertex asal adalah A dan tujuannya adalah B sehingga
dihasilkan anak panah pada bagian atas (dalam kasus tersebut). Kemudian
terdapat juga vertex asal adalah B dan tujuannya adalah A sehingga
dihasilkan anak panah pada bagian bawah (dalam kasus tersebut).
Dikarenakan prinsip Elemen berurutan (ordered pair), Maka untuk
menuliskan notasinya haruslah urut. Objek pertama adalah asal dan objek
kedua adalah tujuan maka didapatkan (A,B) dan (B,A). Perlu diingat
kedua busur tersebut dapatlah berbeda jika nilai A tidak sama dengan nilai
B (Pahami prinsip Elemen berurutan (ordered pair)) .

2. Tidak Terarah (Undirected)


Dalam graph yang tidak berarah, Busur atau Edge nya bersifat
bidirectional atau terdapat dua arah, tanpa arah yang terkait dengannya.
Jadi tidak dapat dipastikan mana asal dan mana tujuan, yang diketahui
hanyalah node mana yang saling terkoneksi. Oleh karena itu, graph dapat
dilintasi ke salah satu arah. Tidak adanya panah memberi tahu kita bahwa
graph termasuk Tidak Terarah.

Gambar 10.5 Ilustrasi busur tak tearah


Graph tak terarah direpresentasikan dengan Elemen tidak
berurutan (unordered pair) sehingga contoh diatas graph dapat dilintasi
dari node A ke B serta dari node B ke A. Jadi notasinya adalah {A,B}.

3. Berbobot (weighted graph)


Jika busur dalam graph memiliki bobot/nilai, maka graph itu
disebut sebagai graph berbobot. Sebagai contoh, bayangkan Anda
sekarang berada di Magelang dan ingin pergi ke Solo. Maka jalan mana
yang anda harus lewati agar perjalanan tidak membutuhkan waktu yang
lama? Busur memiliki bobot bisa didefinisikan seperti jarak kilometer.

3
Misal Magelang ke Yogya memiliki bobot 40 atau berjarak 40 kilometer.
Lalu jalan mana yang harus dilewati agar perjalanan tidak membutuhkan
jarak yang panjang? Maka jawabannya adalah melewati Yogya, lalu ke
Klaten, kemudian sampai di Solo dengan jarak total adalah 100 Km.
Berbeda jika melewati Yogya, lalu ke Wonosari, dan sampai di Solo yang
berjarak 113 Km.

Gambar 10.6 Contoh graph berbobot

4. Tak Berbobot (Unweighted graph)


Jika tepi dalam graph tidak memiliki berbobot, maka graph itu
disebut tidak berbobot. Graph tidak berbobot digunakan bila tidak ada
besaran dalam hubungan. Misalnya, graph yang mewakili mata kuliah dan
prasyaratnya memiliki properti ini. Simpul atau Vertices adalah mata
kuliah dan Busur atau Edge mewakili hubungan prasyarat antara dua
kelas. Jika suatu mata pelajaran tertentu memiliki dua prasyarat, kita tidak
bisa mengatakan bahwa salah satu mata pelajaran lebih penting daripada
yang lain, Anda hanya harus lulus kedua mata kuliah prasyarat sebelum
mengambil mata kuliah tersebut.

4
Gambar 10.7 Contoh graph tak berbobot

5. Campuran dari semuanya

Gambar 10.8 Contoh graph campuran

C. Berbagai istilah dalam Graph


Graf bisa dibedakan menjadi Graf tidak berarah (undirected graph)
dan graf berarah (directed graph atau sering disebut digraph) . Contohnya
ada pada Gambar 10.1 dan 10.2. Sedangkan graf pada Gambar 10.9
merupakan contoh graf berarah. Graf berarah ditandai dengan sebuah panah
pada setiap garis yang menunjukkan asal dan tujuan.

5
Gambar 10.9 Contoh Graph Berarah

Kedua vertex yang dihubungkan oleh garis dibedakan menjadi dua


yaitu vertex inisial atau garis yang tidak mengandung panah dan vertex
terminal atau garis yang mengandung panah.

Gambar 10.10 Berbagai Istilah dalam graf

Dua buah vertex yang berbeda disebut bertetangga apabila kedua


vertex dihubungkan oleh sebuah garis. Pada Gambar 10.10 V1 bertetangga
dengan V2 dan V3.
Sebuah garis bisa melibatkan vertex yang berbeda ataupun vertex
yang sama. Apabila vertex yang dilibatkan dalam sebuah garis ternyata
sama, garis seperti itu dinamakan kalang (loop).

6
Suatu vertex bisa saja disebut vertex terisolasi. Hal ini terjadi kalau
terdapat vertex yang tidak terhubung ke vertex lain. Contoh Vertex terilosai
V5 pada Gambar 10.10.
Sebuah graf disebut graf berbobot kalau pada setipa garis terdapat
nilai atau bobot. Contoh dapat dilihat pada Gambar10.6
Sebuah graf G2 disebut sebagai subgraf dari graf G1, apabilla
himpunan vertex graf G2 merupakan himpunan bagian dari Vertex G1 dan
himpunan garisnya merupakan himpunan bagian dari himpunan garis pada
G1. Contoh dapat dilihat pada Gambar 10.11.

Gambar 10.11 Graf dan subgraf. Graf b, c, dan d adalah subgraf


dari graf a
Sebuah graf tidak berarh disebut terhubung kalau semua vertex bisa
berhubungan dengan semua vertex yang lain, baik secara langsung atau
melalui perantara vertex yang lain. Sebaliknya, disebut terputus apabila ada
vertex yang tidak berhubungan sama sekali dengan vertex lain. Gambar
10.12 memperlihatkan contoh graf yang terhubung dan yang terputus.

Gambar 10.12 Graf terhubung dan graf terputus


D. Representasi Graph
1. Adjacency Matrix
Dalam representasi ini, grafik direpresentasikan menggunakan
matriks ukuran jumlah total simpul dengan jumlah total simpul. Artinya
graf dengan 4 buah simpul direpresentasikan dengan menggunakan
matriks berukuran 4X4. Dalam matriks ini, baris dan kolom mewakili

7
simpul. Matriks ini diisi dengan 1 atau 0. Di sini, 1 menyatakan bahwa
ada tepi dari puncak baris ke puncak kolom dan 0 menunjukkan bahwa
tidak ada tepi dari puncak baris ke puncak kolom.

Gambar 10.13 Contoh Adjacency Matrix dalam undirected graph

Gambar 10.14 Contoh Adjacency Matrix dalam directed graph

2. Incidence Matrix
Dalam representasi ini, grafik direpresentasikan menggunakan
matriks ukuran jumlah total simpul dengan jumlah total sisi. Artinya graf
dengan 4 buah simpul dan 6 tepi direpresentasikan dengan menggunakan
matriks berukuran 4X6. Dalam matriks ini, baris mewakili simpul dan
kolom mewakili tepi. Matriks ini diisi dengan 0 atau 1 atau -1. Di sini, 0
menunjukkan bahwa tepi baris tidak terhubung ke simpul kolom, 1
menunjukkan bahwa tepi baris terhubung sebagai tepi keluar ke simpul
kolom dan -1 menunjukkan bahwa tepi baris terhubung sebagai tepi yang
masuk ke simpul kolom.

8
Gambar 10.15 Contoh Incidence Matrix dalam directed graph

Gambar 10.16 Incidence Matrix dalam directed graph dan berbobot

3. Adjacency List
Dalam representasi ini, setiap simpul dari grafik berisi daftar
simpul yang berdekatan. Misalnya, pertimbangkan representasi grafik
terarah berikut yang diimplementasikan menggunakan linked list.

Gambar 10.17 Contoh Adjacency List menggunakan linked list

E. Minimum Spanning Tree


Minimum Spanning Tree (MST) suatu graf adalah subgraf dari graf
tersebut yang berisi seluruh vertex dalam graf yang tidak membentuk siklus
dan total bobotnya paling kecil. Maksud siklus adalah suatu lintasan yang
berawal dan berakhir pada vertex yang sama. Contoh dapat dilihat pada

9
Gambar 10.18(a). Lintasan ABCA dan juga ABDCA adalah contoh siklus.
Pada Gambar 10.18(b). BCDB merupakan satu-satunya siklus dalam graf
tersebut. Adapaun ACDBA bukan Siklus, sebab tidak ada garis B ke A
(yang ada adalah dari A ke B)

Gambar 10.18 Contoh Siklus


Misalkan terdapat graf seperti terlihat pada Gambar 10.19 (a). MST
ppada graf tersebut ditunjukkan pada Gambar 10.19 (b). Adapun spanning
tree yang lain ditunjukkan pada Gambar 10.20.

Gambar 10.19 Graf dan MST

10
Gambar 10.20 Contoh berbagai spanning tree

F. Contoh Program
Misal kita ingin membuat sebuah graph seperti berikut

Gambar 10.21 Contoh Program Graph

Source Code
#include <iostream>
#include <conio.h>
using namespace std;

int main(){
bool ketemu, nolsemua;
int matrix[10] [10];
int i,j,jumlah_simpul,jumlah_sisi,asal,tujuan;

//isnisialisasi matrix
cout<<"===== Program Graph ====="<<endl<<endl;
cout<<"Masukkan jumlah jumlah simpul : ";
cin>>jumlah_simpul;

cout<<"Masukkan jumlah sisi : ";


cin>>jumlah_sisi;

for (i=1;i<=jumlah_simpul;i++)
{
for (j=1;j<=jumlah_simpul;j++)
{
matrix[i][j]=0;
}

11
}

//isi matrix sesuai input graf


for (i=1;i<=jumlah_sisi;i++) {
cout<<endl;
cout<<"simpul asal:";
cin>>asal;
cout<<"simpul tujuan:";
cin>>tujuan;
matrix[asal][tujuan]=1;
matrix[tujuan][asal]=1;
}

//telusuri graf

i=1;
nolsemua=false;

while (i<=jumlah_simpul && nolsemua == false) {


j=1;
ketemu=false;
while (j<=jumlah_simpul && ketemu == false) {
if (matrix[i][j]==1)
{
ketemu=true;
}

else {
j++;
};
}
if (ketemu == false) {

nolsemua=true;
}
else{
i++;
}
}

if(nolsemua) {
cout<<endl;
cout<<"<<<< Graf tidak terhubung >>>>";
}
else{
cout<<endl;
cout<<"<<<< Graf terhubung >>>>";
}
getch();
}

12
Tampilan :

Gambar 10.22 Tampilan Program

13

Anda mungkin juga menyukai