Académique Documents
Professionnel Documents
Culture Documents
MODUL KE-5
GRAPH
LABORATORIUM PEMROGRAMAN
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH MALANG
2015
I.
TUJUAN
Mahasiswa mampu :
1. Memahami konsep graph dan implementasinya.
2. Memahami konsep penelusuran graph.
II.
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.
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;
}
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();
}
}
}
2.
telusuri
dengan
{
public char label;
public boolean wasVisited;
public Vertex(char lab)
{
label = lab;
wasVisited = false;
}
}
public class soal2a {
private
private
private
private
private
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
}
}
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
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
}
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
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);
}
}
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.
2.
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)
.....
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;
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,