Anda di halaman 1dari 16

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA

MODUL KE-5
GRAPH

LABORATORIUM PEMROGRAMAN
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH MALANG
2015

Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

I.

TUJUAN
Mahasiswa mampu :
1. Memahami konsep graph dan implementasinya.
2. Memahami konsep penelusuran graph.

II.

ALAT YANG DIGUNAKAN


Peralatan yang digunakan :
1.
Perangkat PC yang terinstall Java
2.
Editor Java

III. DASAR TEORI


Graph merupakan struktur data yang memiliki relasi many to many, yaitu tiap element
dapat memiliki 0 atau lebih dari 1 cabang. Graph terbentuk dari 2 bagian, yaitu node dan
edge.
Node : digunakan untuk menyimpan data
Edge : cabang, untuk menghubungkan node satu dengan node lain.
Graph dibedakan menjadi beberapa jenis, antara lain :
Undirected Graph
Biasa disingkat : undi-graph yaitu graph yang tidak memiliki arah dan setiap sisi
berlaku dua arah.
contoh: {x,y} Arahnya bisa dari x ke y, atau y ke x.
Secara grafis sisi pada undigraph tidak memiliki mata panah dan secara notasional
menggunakan kurung kurawal.
Directed Graph (Digraph)
Biasa disingkat : Di-graph yaitu graph yang memiliki arah. Setiap edge Digraph
memiliki anak panah yang mengarah ke node tertentu.
Secara notasi sisi digraph ditulis sebagai vektor (u, v).
u = origin (vertex asal)
v = terminus (vertex tujuan)
U ----> V
Weigth Graph
Graph yang mempunyai nilai pada tiap edgenya

IV. PROSEDUR PELAKSANAAN


Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

Prosedur pelaksanaan praktikum adalah sebagai berikut :


1.
Mahasiswa mencoba latihan yang ada pada modul praktikum
2.
Mahasiswa menganalisa hasil dari program pada latihan yang telah dijalankan
3.
Mahasiswa mengerjakan tugas latihan dan praktikum yang diberikan
4.
Mahasiswa mendemonstrasikan program tugas praktikum yang telah dikerjakan
pada dosen/assisten
5.
Mahasiswa membuat laporan dari tugas yang telah dikerjakan
6.
Upload laporan melalui e-labit.umm.ac.id.

Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

V.

LATIHAN
Petunjuk :
Cobalah contoh program yang ada pada latihan di bawah ini di laboratorium.
Mintalah bimbingan kepada asisten/dosen jika ada kesulitan.
Analisa program tersebut untuk dapat mengerjakan tugas praktikum dengan mudah.
Tandai analisa program dengan menjelaskan fungsi tiap baris kode dengan memberi
komentar tiap baris program.
1.

Dengan menggunakan class Graph.java, representasikan graph berikut kemudian


gambarkan graph-nya :
a. V1 = {1,2,3,4}, E1 = {(1,3),(2,3),(3,4)}
b. V1 = {1,2,3,4,5,6}, E2 = {(1,2),(1,3),(1,5) ,(2,4),(3,6) ,(4,5),(4,6) ,(5,6)}
c. V1 = {1,2,3,4}, E3 = {(1,2),(2,1),(1,3) ,(3,1),(2,4) ,(4,2) ,(3,4) ,(4,3)}
d. V1 = {1,2,3,4,5}, E5 = {(1,2),(1,4),(3,2),(4,3),(3,5),(5,2)}

import java.util.Scanner;
public class soal1 {
public final int MAX_VERTS = 20;
private Vertex vertexList[];
public int adjMat[][];
public int nVerts;
public soal1()
{
vertexList = new Vertex[MAX_VERTS];
adjMat = new int[MAX_VERTS][MAX_VERTS];
nVerts = 0;
for (int j = 0; j < MAX_VERTS; j++)
{
for (int k = 0; k < MAX_VERTS; k++)
{
adjMat[j][k] = 0;
}
}
}
public void addVertex(char lab)
{
vertexList[nVerts++] = new Vertex(lab);
}
public void addEdge(int start, int end) {
adjMat[start][end] = 1;
adjMat[end][start] = 1;
}

Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

public void displayVertex(int v) {


System.out.print(vertexList[v].label);
}
class Vertex {
public char label;
public boolean wasVisited;
public Vertex(char lab)
{
label = lab;
wasVisited = false;
}
}
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.println("Pilih Graph");
System.out.println("1. graph a");
System.out.println("2. graph b");
System.out.println("3. graph c");
System.out.println("4. graph d");
System.out.print("pilih nomor : ");
int a = input.nextInt();
soal1 theGraph = new soal1();
if (a == 1) {
theGraph.addVertex('1');
theGraph.addVertex('2');
theGraph.addVertex('3');
theGraph.addVertex('4');
theGraph.addEdge(0, 2);
theGraph.addEdge(1, 2);
theGraph.addEdge(2, 3);
System.out.print("Visits: ");
theGraph.displayVertex(0);
theGraph.displayVertex(1);
theGraph.displayVertex(2);
theGraph.displayVertex(3);
System.out.println();
}
if (a == 2) {
theGraph.addVertex('1');
theGraph.addVertex('2');
theGraph.addVertex('3');
theGraph.addVertex('4');
theGraph.addVertex('5');
theGraph.addVertex('6');
theGraph.addEdge(0, 1);
theGraph.addEdge(0, 2);
theGraph.addEdge(0, 4);
theGraph.addEdge(1, 3);
theGraph.addEdge(2, 5);
theGraph.addEdge(3, 4);
theGraph.addEdge(3, 5);
theGraph.addEdge(4, 5);
System.out.print("Visits: ");
theGraph.displayVertex(0);
Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

theGraph.displayVertex(1);
theGraph.displayVertex(2);
theGraph.displayVertex(3);
theGraph.displayVertex(4);
theGraph.displayVertex(5);
System.out.println();
}
if (a == 3) {
theGraph.addVertex('1');
theGraph.addVertex('2');
theGraph.addVertex('3');
theGraph.addVertex('4');
theGraph.addEdge(0, 1);
theGraph.addEdge(1, 0);
theGraph.addEdge(0, 2);
theGraph.addEdge(2, 0);
theGraph.addEdge(1, 3);
theGraph.addEdge(3, 1);
theGraph.addEdge(2, 3);
theGraph.addEdge(3, 2);
System.out.print("Visits: ");
theGraph.displayVertex(0);
theGraph.displayVertex(1);
theGraph.displayVertex(2);
theGraph.displayVertex(3);
System.out.println();
}
if (a == 4) {
theGraph.addVertex('1');
theGraph.addVertex('2');
theGraph.addVertex('3');
theGraph.addVertex('4');
theGraph.addVertex('5');
theGraph.addEdge(0, 1);
theGraph.addEdge(0, 3);
theGraph.addEdge(2, 1);
theGraph.addEdge(3, 2);
theGraph.addEdge(2, 4);
theGraph.addEdge(4, 1);
System.out.print("Visits: ");
theGraph.displayVertex(0);
theGraph.displayVertex(1);
theGraph.displayVertex(2);
theGraph.displayVertex(3);
theGraph.displayVertex(4);
System.out.println();
}
}
}

Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

2.

Dengan memanfaatkan class yang ada pada latihan,


menggunakan metode DFS untuk gambar graph berikut :

telusuri

public class soal2 {


private final int SIZE = 20;
private int[] st;
private int top;
public soal2()
{
st = new int[SIZE];
top = -1;
}
public void push(int j)
{ st[++top] = j; }
public int pop()
{ return st[top--]; }
public int peek()
{ return st[top]; }
public boolean isEmpty()
{ return (top == -1); }
}
class Vertex
Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

dengan

{
public char label;
public boolean wasVisited;
public Vertex(char lab)
{
label = lab;
wasVisited = false;
}
}
public class soal2a {
private
private
private
private
private

final int MAX_VERTS = 20;


Vertex vertexList[];
int adjMat[][];
int nVerts;
no3 theStack;

public soal2a() {
vertexList = new Vertex[MAX_VERTS];
adjMat = new int[MAX_VERTS][MAX_VERTS];
nVerts = 0;
for (int j = 0; j < MAX_VERTS; j++)
{
for (int k = 0; k < MAX_VERTS; k++)
{
adjMat[j][k] = 0;
}
}
theStack = new no3();
}
public void addVertex(char lab) {
vertexList[nVerts++] = new Vertex(lab);
}
public void addEdge(int start, int end) {
adjMat[start][end] = 1;
adjMat[end][start] = 1;
}
public void displayVertex(int v) {
System.out.print(vertexList[v].label);
}
public void dfs()
{
vertexList[0].wasVisited = true;
displayVertex(0);
theStack.push(0);
while (!theStack.isEmpty())
{
int v = getAdjUnvisitedVertex(theStack.peek());
if (v == -1)
{
theStack.pop();
} else
{
vertexList[v].wasVisited = true;
displayVertex(v);
theStack.push(v);
Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

}
}
for (int j = 0; j < nVerts; j++)
{
vertexList[j].wasVisited = false;
}
}
public int getAdjUnvisitedVertex(int v) {
for (int j = 0; j < nVerts; j++) {
if (adjMat[v][j] == 1 && vertexList[j].wasVisited == false) {
return j;
}
}
return -1;
}
public static void main(String[] args) {
no33 theGraph = new no33();
theGraph.addVertex('A');
theGraph.addVertex('B');
theGraph.addVertex('C');
theGraph.addVertex('D');
theGraph.addVertex('E');
theGraph.addVertex('F');
theGraph.addEdge(0, 1);
theGraph.addEdge(0, 3);
theGraph.addEdge(1, 2);
theGraph.addEdge(1, 3);
theGraph.addEdge(2, 5);
theGraph.addEdge(3, 5);
theGraph.addEdge(5, 4);
System.out.print("Visits: ");
theGraph.dfs();
System.out.println();
}
}

3.

Terdapat Weight-graph yang disimpan dalam memory dengan matrix sebagai berikut :

Tugas : Dengan memanfaatkan class yang ada pada latihan, telusuri dengan
menggunakan metode BFS dan gambarkan Graph-nya.
public class soal3 {
private
private
private
private

final int SIZE = 10;


int[] queArray;
int front;
int rear;

Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

public soal3() {
queArray = new int[SIZE];
front = 0;
rear = -1;
}
public void insert(int j) {
if (rear == SIZE - 1) {
rear = -1;
}
queArray[++rear] = j;
}
public int remove() {
int temp = queArray[front++];
if (front == SIZE) {
front = 0;
}
return temp;
}
public boolean isEmpty() {
return (rear + 1 == front || (front + SIZE - 1 == rear));
}
}
public class soal3a {
public char label;
public boolean wasVisited;
public soal3a(char lab) {
label = lab;
wasVisited = false;}
}
public class soal3b {
private final int MAX_VERTS = 10;
private Vertex vertexList[];
private int adjMat[][];
private int nVerts;
private no4 theQueue;
public soal3b() {
vertexList = new Vertex[MAX_VERTS];
adjMat = new int[MAX_VERTS][MAX_VERTS];
nVerts = 0;
for (int j = 0; j < MAX_VERTS; j++) {
for (int k = 0; k < MAX_VERTS; k++) {
adjMat[j][k] = 0;
}
}
theQueue = new no4();
}
public void addVertex(char lab) {
vertexList[nVerts++] = new Vertex(lab);
Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

}
public void addEdge(int start, int end) {
adjMat[start][end] = 1;
}
public void displayVertex(int v) {
System.out.print(vertexList[v].label);
}
public void displayEdge(int start, int end, int weight) {
System.out.print(vertexList[start].label + "" +
vertexList[end].label +
"=" + weight);
}
public void bfs() {
vertexList[0].wasVisited = true;
displayVertex(0);
theQueue.insert(0);
int v2;
while (!theQueue.isEmpty()) {
int v1 = theQueue.remove();
while ((v2 = getAdjUnvisitedVertex(v1)) != -1) {
vertexList[v2].wasVisited = true;
displayVertex(v2);
theQueue.insert(v2);
}
}
for (int j = 0; j < nVerts; j++) {
vertexList[j].wasVisited = false;
}
}
public int getAdjUnvisitedVertex(int v) {
for (int j = 0; j < nVerts; j++) {
if (adjMat[v][j] == 1 && vertexList[j].wasVisited == false) {
return j;
}
}
return -1;
}
public static void main(String[] args) {
no444 theGraph = new no444();
theGraph.addVertex('X');
theGraph.addVertex('Y');
theGraph.addVertex('S');
theGraph.addVertex('T');
theGraph.addEdge(0, 1);
theGraph.addEdge(0, 2);
theGraph.addEdge(0, 3);
theGraph.addEdge(1, 3);
theGraph.addEdge(2, 0);
theGraph.addEdge(2, 1);
theGraph.addEdge(3, 1);
theGraph.addEdge(3, 2);
System.out.print("Visits (BFS): ");
Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

theGraph.bfs();
System.out.println();
System.out.println("Weight
theGraph.displayEdge(0, 1,
System.out.println("");
theGraph.displayEdge(0, 2,
System.out.println("");
theGraph.displayEdge(0, 3,
System.out.println("");
theGraph.displayEdge(1, 3,
System.out.println("");
theGraph.displayEdge(2, 0,
System.out.println("");
theGraph.displayEdge(2, 1,
System.out.println("");
theGraph.displayEdge(3, 1,
System.out.println("");
theGraph.displayEdge(3, 2,
System.out.println("");

Edge : ");
1);
9);
6);
3);
1);
2);
3);
4);

}
}

Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

VI. TUGAS PRAKTIKUM


Ada 3 pilihan untuk tugas praktikum graph, sebagai berikut :
1.
Perhatikan graph berikut : (bobot maksimal nilai 75)
B
A

D
G
E
F
Buatlah aplikasi graph sederhana (menggunakan node) dimana setiap edge pada
graph berhubungan dengan edge yang lain. Dengan ketentuan berikut.
1. Head dimulai berdasarkan angka nim belakang dengan rumus [nim modulo 7] .
(A:0, B:1, C:2, D:3, E:4, F:5, G:6). Misalkan 8 (258) maka 8 mod 7=1, jadi head=B.
(A:0, B:1, C:2, D:3, E:4, F:5, G:6).
Head (start) adalah edge awal yang menghubungkan dengan node yg lain.
2. Kemudian head akan diikuti dengan edge berikutnya berdasarkan arah anak
panah. Misalkan :
Edge A :
Pilihan Edge Berikutnya adalah :
1. Edge B
2. Edge E
1
Edge B :
Pilihan Edge Berikutnya adalah :
1. Edge G
1
.....

3. Ada kemungkinan Edge terpilih kembali ke Edge awal (head) yang sudah dilalui.

Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

2.

Perhatikan graph berikut : (bobot maksimal nilai 85)


B

8
C

9
6
D

5
8

4
E

10
1

Buatlah aplikasi graph dengan bobot (menggunakan node) dimana setiap edge pada
graph berhubungan dengan edge yang lain. Dengan ketentuan berikut.
1. Sama dengan ketentuan sebelumnya tentang edge awal (start), yaitu dibedakan
berdasarkan nim.
2. Setiap edge yang terhubung mempunyai bobot jarak.
3. Kemudian tiap edge awal juga diikuti dengan edge berikutnya berdasarkan anak
panah. Hanya saja yang ini harus bisa menghitung total jarak yang sudah
ditempuh misal :
Edge A : (jarak yang sudah ditempuh : 0)
Pilihan Edge Berikutnya adalah :
1. Edge E
1
Edge B : (jarak yang sudah ditempuh : 5)
Pilihan Edge Berikutnya adalah :
1. Edge B
1. Edge F
2
Edge G : (jarak yang sudah ditempuh : 13)
.....

Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

3. Perhatikan graph berikut : (bobot maksimal nilai 100)


B

8
C

1
6
1

8
1
E

G
1

Buatlah aplikasi graph sederhana (menggunakan node) dimana setiap edge pada
graph berhubungan dengan edge yang lain. Dengan ketentuan berikut.
1. Berbeda dengan permasalahn sebelumnya (no. 1 & 2) tentang edge awal (start),
start ditentukan berdasarkan inputan user.
2. Ada input edge akhir untuk menghitung rute terdekat.
3. Setiap edge yang terhubung mempunyai bobot jarak.
4. Bisa mencari rute dengan jarak terdekat untuk menuju edge akhir dari edge
awal. Contohnya.
Input Edge awal :
A
Input Edge Tujuan :
B
Rute terdekat :
A-E-F-D-B
Dengan total jarak 9

*note : kerjakan sebisanya, orisinilitas lebih dihargai. Nyontek atau sama dengan yang
lain, nilai =0;

Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data

Keterangan :
1. Tugas praktikum dikerjakan sendiri, jika ketahuan mengcopas, mencontoh, mereplika,
menjiplak dll akan dikenakan sanksi nilai x .
2. Tidak ada demo susulan, sesuai dengan jadwal yang telah ditentukan, kecuali ada alasan
yang logis dan dapat di maklumi.
3. Kriteria penilaian praktikum:
a. 25% Absensi.
b. 50% demo tugas.
c. 25% laporan praktikum.
d. Tambahan nilai (sesuai kebijakan aslab masing-masing), misal keaktifan dll.
4. Kriteria penilaian laporan:
a. Menggunakan template yang sudah disediakan.
b. Melampirkan hasil praktikum (latihan dan tugas modul) dan screenshot hasil
programdan penjelasannya.
c. Dikerjakan sendiri, jika ketahuan mengcopas, mencontoh, mereplika, menjiplak dll
akan dikenakan sanksi pengosongan nilai laporan.
Penting!
Tetap semangat, jangan menyerah dan pasti bisa jika mau berusaha, jangan lupa juga untuk
terus berdoa agar dapat mencapai hasil yang maksimal, jangan pernah takut untuk bertanya
jika masih ada kebingungan yang melanda, diselingi terus berolah raga, makan yang banyak
dan sehat sesuai 4 sehat 5 sempurna serta minum multivitamin agar tetap bugar :D,

Dokumen Laboratorium Teknik Informatika UMM @ 2015 Modul Praktikum Algoritma

By. Team Informatika UMM

dan Struktur Data