ASD Modul 5 (Graph)

16
Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM PRAKTIKUM ALGORITMA DAN STRUKTUR DATA MODUL KE-5 GRAPH LABORATORIUM PEMROGRAMAN PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS MUHAMMADIYAH MALANG 2015

description

Modul Praktikum Algoritma dan Struktur Data

Transcript of ASD Modul 5 (Graph)

Page 1: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA

MODUL KE-5

GRAPH

LABORATORIUM PEMROGRAMAN

PROGRAM STUDI TEKNIK INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS MUHAMMADIYAH MALANG

2015

Page 2: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

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

Page 3: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

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.

Page 4: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

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;

}

Page 5: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

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);

Page 6: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

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();

}

}

}

Page 7: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

2. Dengan memanfaatkan class yang ada pada latihan, telusuri dengan

menggunakan metode DFS untuk gambar graph berikut :

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

Page 8: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

{

public char label;

public boolean wasVisited;

public Vertex(char lab)

{

label = lab;

wasVisited = false;

}

}

public class soal2a {

private final int MAX_VERTS = 20;

private Vertex vertexList[];

private int adjMat[][];

private int nVerts;

private 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);

Page 9: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

}

}

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 final int SIZE = 10;

private int[] queArray;

private int front;

private int rear;

Page 10: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

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);

Page 11: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

}

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): ");

Page 12: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

theGraph.bfs();

System.out.println();

System.out.println("Weight Edge : ");

theGraph.displayEdge(0, 1, 1);

System.out.println("");

theGraph.displayEdge(0, 2, 9);

System.out.println("");

theGraph.displayEdge(0, 3, 6);

System.out.println("");

theGraph.displayEdge(1, 3, 3);

System.out.println("");

theGraph.displayEdge(2, 0, 1);

System.out.println("");

theGraph.displayEdge(2, 1, 2);

System.out.println("");

theGraph.displayEdge(3, 1, 3);

System.out.println("");

theGraph.displayEdge(3, 2, 4);

System.out.println("");

}

}

Page 13: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

VI. TUGAS PRAKTIKUM

Ada 3 pilihan untuk tugas praktikum graph, sebagai berikut :

1. Perhatikan graph berikut : (bobot maksimal nilai 75)

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.

A

E

B

C

F

G

D

Page 14: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

2. Perhatikan graph berikut : (bobot maksimal nilai 85)

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) .....

A

E

B

C

F

G

D

8

6

8

5

10

3

4

9

1 8

8

1

Page 15: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

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

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;

A

E

B

C

F

G

D

8

6

8

5 3

1

1

1 2

8

1

Page 16: ASD Modul 5 (Graph)

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Modul Praktikum Algoritma dan Struktur Data By. Team Informatika UMM

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,