Anda di halaman 1dari 13

MODUL V GRAPH

MODUL V
GRAPH

5.1 TUJUAN
Tujuan dari praktikum ini adalah:
1. Mahasiswa mampu memahami konsep graph dalam program.
2. Mahasiswa dapat mengimplementasikan metode graph dalam bahasa Java.

5.2 DASAR TEORI


5.2.1 Graph
Graph adalah kumpulan node (simpul) di dalam bidang dua dimensi yang
dihubungkan dengan sekumpulan garis (sisi). Graph dapat digunakan untuk
merepresentasikan objek-objek diskrit dan hubungan antara objek-objek tersebut.
Representasi visual dari graph adalah dengan menyatakan objek sebagai node, bulatan
atau titik (vertex), sedangkan hubungan antara objek dinyatakan dengan garis (edge) [1].
G = (V, E)
Dengan :
G = Graph
V = Simpul atau vertex, atau node, atau titik
E = Busur atau edge

Gambar 5.1 Ilustrasi graph


Terdapat beberapa istilah yang berkaitan dengan graph yaitu:
1. Vertex
Vertex adalah himpunan node atau titik pada sebuah graph.
2. Edge
Edge adalah himpunan garis yang menghubungkan tiap node atau vertex.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-1


MODUL V GRAPH

3. Adjacent
Dua buah simpul disebut adjacent bila ada busur yang menghubungkan kedua
simpul tersebut.
4. Incident
Jika e merupakan busur dengan simpul-simpulnya adalah v dan w yang ditulis e
= (v,w), maka v dan w disebut “terletak” pada e dan e disebut incident dengan v dan w.
5. Degree
Degree adalah jumlah busur yang incident dengan simpul
6. Path
Path adalah serangkaian simpul-simpul yang berbeda, yang adjacent secara
berturut-turut dari simpul satu ke simpul berikutnya
5.2.2 Jenis - Jenis Graph
Berikut ini jenis – jenis graph [2]:
1. Graph tak berarah (undirected graph atau non-directed graph)
Dikatakan graph tak berarah dimana urutan simpul dalam sebuah busur tidak
dipentingkan.

Gambar 5.2 Graph tak berarah

2. Graph berarah (directed graph)


Dikatakan graph berarah dimana urutan simpul dalam sebuah busur memiliki
arti atau dipentingkan.

Gambar 5.3 Graph berarah

5.2.3 Metode Pencarian Vertex


Pencarian vertex adalah proses umum dalam graph. Terdapat 2 metode
pencarian, yakni Depth First Search (DFS) dan Breadth First Search (BFS).

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-2


MODUL V GRAPH

1. Depth First Search (DFS)


Pencarian dengan metode ini dilakukan dari node awal secara mendalam
hingga yang paling akhir (dead-end) atau sampai ditemukan. Dengan kata lain, simpul
cabang atau anak yang terlebih dahulu dikunjungi [2].

Gambar 5.4 Depth first search

Proses pencarian dilakukan dengan mengunjungi cabang terlebih dahulu hingga


tiba di simpul terakhir. Jika tujuan yang diinginkan belum tercapai maka pencarian
dilanjutkan ke cabang sebelumnya, turun ke bawah jika memang masih ada
cabangnya. Begitu seterusnya hingga diperoleh tujuan akhir (goal). Depth first search
memiliki kelebihan diantaranya adalah cepat mencapai kedalaman ruang pencarian [3].
2. Breadth First Search (BFS)
Breadth first search (BFS) merupakan pencarian yang dilakukan dengan
mengunjungi tiap-tiap node secara sistematis pada setiap level hingga keadaan tujuan
(goal state) ditemukan. Atau dengan kata lain, penulusuran yang dilakukan adalah
dengan mengunjungi tiap-tiap node pada level yang sama hingga ditemukan goal state-
nya [3].

Gambar 5.5 Breadth first search

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-3


MODUL V GRAPH

Pengimplementasian BFS dapat ditelusuri dengan menggunakan daftar (list),


open dan closed, untuk menelusuri gerakan pencarian di dalam ruang keadaan.
Keuntungan menggunakan breadth first search ini, diantaranya adalah tidak akan
menemui jalan buntu dan jika ada satu solusi maka breadth first search akan
menemukannya, dan jika ada lebih dari satu solusi maka solusi minimum akan
ditemukan [1].

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-4


MODUL V GRAPH

5.3 PERMASALAHAN
1. Implementasikan penggunaan graph pada perjalanan dari rumah ke Universitas
Mataram, kemudian buatlah program graph yang menghitung jumlah jarak yang
dilalui untuk sampai ke Universitas Mataram.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-5


MODUL V GRAPH

5.4 HASIL DAN PEMBAHASAN


5.4.1 Program Graph
1. Algoritma
a. Insert vertex
1) Mendeklarasikan variabel-variabel pointer yang digunakan untuk
menampung nilai dari simpul dan busur.
2) Lakukan pengecekan kondisi apabila size sama dengan 0 maka first dan
last dari graph di arahkan ke simpul. Jika tidak maka lakukan langkah ke-
3.
3) Sambungkan pointer left simpul terujung dari graph ke simpul baru yang
akan ditambahkan.
4) Busur pada simpul disambungkan pada pointer left dari simpul. Apabila
dalam satu simpul terdapat lebih dari satu busur maka busur berikutnya
diletakkan setelah busur sebelumnya.
5) Hubungkan pointer right ke busur ke simpul baru.
6) Ulangi langkah ke-3 dan ke-5 hingga semua simpul dan busur
ditambahkan.
b. Insert edge
1) Tentukan simpul asal dan simpul tujuan terlebih dahulu.
2) Mendeklarasikan variabel pointer bantu untuk menunjuk simpul asal dan
simpul tujuan.
3) Hubungkan pointer right simpul asal ke busur.
4) Hubungkan pointer left busur simpul asal ke simpul tujuan.
c. View Graph
1) Cari simpul first.
2) Cetak nilai dari simpulnya beserta busur yang keluar dari simpul tersebut.
3) Ulangi langkah ke-2 hingga semua simpul ditampilkan.
2. Source Code
class Node{
Node next, prev;
int data;
String kata;
public Node(int x){
data = x;
}
public Node(String a){

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-6


MODUL V GRAPH

kata = a;
}
}
public class Graph{
Node start, temp;
public void addvertex(String nana){
Node baru = new Node(nana);
if(start==null){
start = baru;
}else{
temp = start;
while(temp.prev!=null){
temp = temp.prev;
}
temp.prev = baru;
}
}
public void addedge(String awal, String akhir, int jarak){
Node isi = new Node(jarak);
Node temp1=cari(awal);
while(temp1.next!=null){
temp1=temp1.next;
}
temp1.next = isi;
isi.prev = cari(akhir);
}
public Node cari(String nama){
Node balik;
if(start.kata==nama){
balik = start;
}else{
temp = start;
while(temp.prev.kata!=nama){
temp = temp.prev;
}
balik = temp.prev;
}
return balik;
}
public void tampil(){
Node muncul = start;
while(muncul.prev!=null){
Node muncul1=muncul;
while(muncul1.next!=null){
muncul1 = muncul1.next;
System.out.print(muncul.kata+" ->
"+muncul1.prev.kata+" : "+muncul1.data);
System.out.println();
}muncul = muncul.prev;
}
}
public static void main(String[] args){
Graph q = new Graph();
q.addvertex("Sayang-Sayang");
q.addvertex("Rembiga");
q.addvertex("Monjok");
q.addvertex("Udayana");
q.addvertex("Catur Warga");
q.addvertex("Gomong");

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-7


MODUL V GRAPH

q.addvertex("Unram");
q.addedge("Sayang-Sayang","Rembiga", 2 );
q.addedge("Sayang-Sayang","Monjok", 2);
q.addedge("Rembiga","Udayana", 1);
q.addedge("Monjok","Catur Warga", 3);
q.addedge("Udayana","Catur Warga", 1);
q.addedge("Catur Warga","Gomong", 1);
q.addedge("Gomong","Unram", 1);
q.tampil();
}
}
3. Output

Gambar 5.6 Hasil output program graph

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-8


MODUL V GRAPH

5.5 ANALISIS DATA


5.5.1 Program Graph
class Node{
Node next, prev;
int data;
String kata;
public Node(int x){
data = x;
}
public Node(String a){
kata = a;
}
}
Script “class Node{” adalah pembuatan kelas bernama “Node” yang menampung
pendeklarasian variabel “Node next,prev; int data; String kata” dan terdapat
dua konstruktor dari kelas “Node” yang di dalamnya terdapat inisialisasi variabel “data
= x;”, dan “kata = a;”.
public class Graph{
Node start, temp;
Script “public class Graph{” merupakan class utama yang digunakan fungsi
main. Script “Node start,temp;” merupakan pendeklarasian variabel.
public void addvertex(String nana){
Node baru = new Node(nana);
if(start==null){
start = baru;
}else{
temp = start;
while(temp.prev!=null){
temp = temp.prev;
}
temp.prev = baru;
}
}
Script “public void addvertex(String nana)” digunakan untuk membuat
sebuah objek untuk menyimpan data yang akan dimasukkan berupa “nana” dengan
tipe data “String” karena data yang akan dimasukkan berupa tulisan. Selanjutnya ada
pendeklarasian sebuah node baru yang bernama “baru” dengan masukkan berupa
“nana”.
Setelah di lakukannya pembuatan method pada method ini akan di pengenalan
objek dengan nama “baru” dan memiliki data yang yang ada pada variabel “ nana”,
setelah itu di lakukan pengencekan jika “start” sama dengan null maka akan
dilakukan isi dari fungsi “if” jika tidak terpenuhi maka akan di lakukan kondisi yang
ada di “else”.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-9


MODUL V GRAPH

public void addedge(String awal, String akhir, int jarak){


Node isi = new Node(jarak);
Node temp1=cari(awal);
while(temp1.next!=null){
temp1=temp1.next;
}
temp1.next = isi;
isi.prev = cari(akhir);
}
Script “public void addvertex(String nana)” diatas digunakan untuk
membuat sebuah objek untuk menyimpan data yang akan dimasukkan berupa “ awal”,
“akhir” dengan tipe data “String” karena data yang akan dimasukkan berupa tulisan,
dan juga akan ada menyimpan data “jarak” dengan tipe “int” Selanjutnya ada
pendeklarasian sebuah node baru yang bernama “isi” dengan masukkan berupa
“jarak” dan juga ada pendeklarasian sebuah node baru yang bernama “ temp1” dengan
masukkan berupa “awal”, setelah itu akan di lakukan pengencekan data dengan
pengulangan “while” dengan kondisi “temp1.next!=null” jika terpenuhi akan
melakukan perintah yang ada di dalam perulangan tersebut sampai code itu selesai di
lakukan.
public Node cari(String nama){
Node balik;
if(start.kata==nama){
balik = start;
}else{
temp = start;
while(temp.prev.kata!=nama){
temp = temp.prev;
}
balik = temp.prev;
}
return balik;
}
Script “public Node cari(String nama)” di atas digunakan untuk membuat
sebuah kelas baru yang bernama “cari”. Pada class pertama di lakukan pengecekan
kondisis “if” jika “start.kata==nama” maka nilai “start” akan di masukkan ke
dalam nilai “balik”. Jika tidak terpenuhi maka akan di lakukan perintah yang ada di
dalam kondisi “else” di dalam “else” terdapat pengecekan “while” yang diman
fungsi “while” di sini berfungsi untuk jika nilai dari “temp.prev.kata” tidak sama
dengan “nama” maka akan di lakukan perintah yang ada di dalam “while”, setelah nilai
dari “balik” akan dibalikkan.
public void tampil(){
Node muncul = start;
while(muncul.prev!=null){

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-10


MODUL V GRAPH

Node muncul1=muncul;
while(muncul1.next!=null){
muncul1 = muncul1.next;
System.out.print(muncul.kata+" ->
"+muncul1.prev.kata+" : "+muncul1.data);
System.out.println();
}muncul = muncul.prev;
}
}
Script “public void tampil(){” di atas merupakan sebuah method yang
digunakan untuk menampilkan data yang sudah di masukkan di mana di dalamnya di
deklarsikan variabel muncul yang memiliki nilai “start”. Kemudian di lakukan
perulangan untuk menampilkan data secara berulang.
public static void main(String[] args){
Graph q = new Graph();
Script “public static void main(String[] args){” merupakan main yang
merupakan tempat eksekusi awal dari program. Script “Graph q = new Graph();”
merupakan perintah untuk membuat objek dengan nama “q” dari class “Graph”.
q.addvertex("Sayang-Sayang");
q.addvertex("Rembiga");
q.addvertex("Monjok");
q.addvertex("Udayana");
q.addvertex("Catur Warga");
q.addvertex("Gomong");
q.addvertex("Unram");
Script “q.addvertex” merupakan perintah untuk memasukkan nilai pada vertex
dengan memanggil method “addvertex” dengan contoh parameter seperti “"Sayang-
Sayang"”.
q.addedge("Sayang-Sayang","Rembiga", 2 );
q.addedge("Sayang-Sayang","Monjok", 2);
q.addedge("Rembiga","Udayana", 1);
q.addedge("Monjok","Catur Warga", 3);
q.addedge("Udayana","Catur Warga", 1);
q.addedge("Catur Warga","Gomong", 1);
q.addedge("Gomong","Unram", 1);
Script “q.addedge” merupakan perintah untuk memasukkan nilai pada edge
dengan memanggil method “addedge” dengan contoh parameter seperti “"Sayang-
Sayang","Rembiga", 2”.

q.tampil();}}
Script “q.tampil();” digunakan untuk menampilkan data.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-11


MODUL V GRAPH

5.6 KESIMPULAN
Berdasarkan praktikum modul 5 yang telah dilakukan, dapat disimpulkan bahwa:
1. Konsep graph dapat diimplementasikan pada kehidupan sehari-hari, graph ini
merupakan pendekatan untuk mencari jarak terdekat untuk sampai ke tujuan,
dimana setiap node atau titik dihubungkan dengan titik lainnya melalui sebuah jalur
atau bisa juga disebut edge dan kemudian akan dilakukan pencarian untuk
menentukan jarak terpanjang dan terpendek dari hubungan tersebut.
2. Graph dapat direpresentasikan dan diimplementasikan ke dalam program dalam
bentuk array dua dimensi (matriks) maupun ke dalam bentuk linked list. Dan pada
praktikum kali ini yaitu pengimplementasian graph dalam menentukan jumlah
jarak yang dilalui dari rumah ke Universitas Mataram dibuat dengan menggunakan
linked list yakni dengan double linked list.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-12


MODUL V GRAPH

DAFTAR PUSTAKA

[1] A. S, Rosa. 2010. Modul Pembelajaran Struktur Data. Bandung: Modula.


[2] Marcus Zakaria, Tedy. 2006. Struktur Data. Bandung: Informatika.
[3] Slamet I.S, Sumantri. 1990. Pengantar Struktur Data. Jakarta: Elex Media
Komputindo.

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA V-13

Anda mungkin juga menyukai