11
LAPORAN RESMI PRAKTIKUM STRUKTUR DATA MODUL 5 GRAPHDisusun Oleh : TANGGAL PRAKTIKUM NAMA NRP KELAS DOSEN PENGAMPU : 4 Juni 2014 : Ainul Yaqin : 130411100062 : A1 : ACHMAD JAUHARI, S.T., M.Kom. Disetujui : Bangkalan, 4 Juni 2014 (Moh.Abd.Kholiq) 120411100113 LABORATORIUM TEKNOLOGI INFORMASI DAN APLIKASI JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS TRUNOJOYO MADURA T.A. 2014-2015

Prak Strukdat A Modul5 130411100062

Embed Size (px)

Citation preview

LAPORAN RESMI

PRAKTIKUM STRUKTUR DATA

MODUL 5

“GRAPH”

Disusun Oleh :

TANGGAL PRAKTIKUM

NAMA

NRP

KELAS

DOSEN PENGAMPU

: 4 Juni 2014

: Ainul Yaqin

: 130411100062

: A1

: ACHMAD JAUHARI, S.T., M.Kom.

Disetujui : Bangkalan, 4 Juni 2014

(Moh.Abd.Kholiq) 120411100113

LABORATORIUM TEKNOLOGI

INFORMASI DAN APLIKASI

JURUSAN TEKNIK INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS TRUNOJOYO MADURA

T.A. 2014-2015

BAB I

PENDAHULUAN

1.1 Latar Belakang

Dalam paraktikum ini kita di ajarkan penggunaan tipe data baik primitif, abstrak

dan Koleksi dan memahami penggunaan bahasa pemrograman Java secara

sederhana dan Tools yang digunakan.

1.2 Tujuan

Adapun tujuan dari praktikum (modul 5) ini adalah:

1. Mahasiswa dapat memahami implementasi struktur data & algoritma

pemrograman

2. Mahasiswa dapat mengimplementasikan struktur data secara efisien

untuk membangun informasi secara dinamis

3. Mahasiswa dapat mengimplementasikan pemrograman Java dan Tools

pendukungnya

BAB II

DASAR TEORI

Graph, adalah representasi pasangan Vertex(Node) dan Edge(Link) yang

membentuk sebuah jaringan koneksi antar satu Node dengan Node lainnya.

Secara matematis graph direpresentasikan dengan bentuk persamaan G=(V,E),

dimana V mewakili vertex sedangkan E merepresentasikan edge, dikarenakan

E juga memiliki pasangan asal dan tujuan sehingga juga bisa dapat

direpresentasikan dengan bentuk persamaan (V,W) ∈ E, dimana vertex V

memiliki hubungan ketetanggaan dengan vertex W.

Pada sisi arah dari edge, graph diklasifikasikan menjadi dua kategori

yaitu: Directed Graph(graph berarah) dan Undirected Graph (graph tak

berarah). Pada graph berarah (V,W) (WV), sedangkan pada graph tak

berarah (V,W) (W,V). Sedangkan pada sisi bobot dari edge juga

diklasifikasikan menjadi dua kategori yaitu Weighted Graph (graph tak

berbobot) dan Unweighted Graph (graph tak berbobot). Representasi graph

dapat ditunjukkan pada Gambar 1.

Secara dinamis struktur graph dapat dibangun menggunakan Adjency List

seperti pada pembahasan Forest Tree sebelumnya, tetapi pada struktur lainnya

yang lebih sederhana namun statis dapat menggunakan Adjacency Matrix. Contoh

adjacency matriks untuk menggambarkan graph tak berbobot – tak berarah dapat

ditunjukkan sebagaimana pada Gambar 3.

BAB III

TUGAS PENDAHULUAN

3.1. Soal

Tugas pendahuluan ada di asprak

BAB IV

IMPLEMENTASI

4.1. Kegiatan Praktikum

Jika Lakukan modifikasi program implementasi ADT Graph untuk pemilihan

jalur terpendek, sebagaimana pada ilustrasi program yaitu jalur terpendek

antar kota. Contoh: tentukan jalur terpendek antara kota Surabaya-Malang,

tentukan list rutenya dan total beban jarak yang ditempuh....!

Jawaban

1.

public class Graph {

int index=0;

int max=100;

double[][] edge = new double[max][max];

HashMap<String, Integer> vertex = new HashMap<>();

HashMap<Integer,String> rvertex = new HashMap<>();

public void addVertex(String data){

vertex.put(data, index);

rvertex.put(index,data);

index++;

}

public double weight(String v, String w){ //label of vertex

int vi = vertex.get(v);

int wi = vertex.get(w);

return getWeight(vi, wi);

}

public double getWeight(int v, int w){ // indeks adjacency matriks

if(edge[v][w]!=0){

return edge[v][w];

}

else if(edge[w][v]!=0){

return edge[w][v];

}

else{

return 0;

}

}

public void traverse(String source, String destination){

getPath(vertex.get(source), vertex.get(destination));

}

List<Object>path = new ArrayList<>();

public void getPath(int source, int dest){

LinkedList<Integer> stack = new LinkedList<>();

HashMap<Integer,Integer> level = new HashMap<>();

HashMap<Integer,Integer> previous = new HashMap<>();

int l =1;

int s = source;

int reset;

stack.add(source);

level.put(source, 0);

previous.put(s, s);

try{

while(stack!=null){

reset=stack.size();

for(int j=0; j<max; j++){

if(edge[s][j]!=0)

if(level.get(j)==null||level.get(j)>level.get(s))

if(cekList(stack, j)==false){

stack.addFirst(j);

level.put(j, l);

previous.put(j, s);

// if(j==dest){ // if use destination

path.addAll(backtrack(previous, source, j));

path.add("*"); //just as a splitter

// }

}

}

if(stack.getFirst()!=source){

if(reset==stack.size())

l=backtrack(previous, source, stack.getFirst()).size();

s=stack.getFirst();

stack.removeFirst();

l++;

}

else

stack.clear();

}//end while

}

catch(Exception e){

System.out.println("error "+ s);

}

}

public boolean cekList(List<Integer> l, int key){

boolean found = false;

int index = 0;

while(found==false&&index<l.size()){

if(l.get(index).intValue()==key){

found=true;

}

else{

index++;

}

}

return found;

}

public LinkedList<Integer> backtrack(HashMap<Integer, Integer> m, int source,

int dest){

LinkedList<Integer> result= new LinkedList<>();

result.add(dest);

int previous = dest;

while(previous!=source){

int p = m.get(previous);

result.addFirst(p);

previous=p;

}

return result;

}

public static void main(String[] args){

Graph g = new Graph();

g.addVertex("Surabaya");

g.addVertex("Sidoarjo");

g.addVertex("Gresik");

g.addVertex("Bangkalan");

g.addVertex("Sampang");

g.addVertex("Lamongan");

g.addVertex("Tuban");

g.addVertex("Mojokerto");

g.addVertex("Pasuruan");

g.addVertex("Malang");

g.addVertex("Lumajang");

g.addVertex("Jember");

g.addVertex("Pamekasan");

g.addVertex("Jombang");

g.addVertex("Situbondo");

g.addVertex("Banyuwangi");

g.addVertex("Pamekasan");

g.addVertex("Jombang");

// Graph add edge for city distance

g.addEdge("Surabaya", "Bangkalan", 30, false);

g.addEdge("Surabaya", "Gresik", 20, false);

g.addEdge("Gresik", "Lamongan", 25, false);

g.addEdge("Lamongan", "Tuban", 25, false);

g.addEdge("Surabaya", "Sidoarjo", 25, false);

g.addEdge("Gresik", "Mojokerto", 12, false);

g.addEdge("Sidoarjo", "Mojokerto", 15, false);

g.addEdge("Sidoarjo", "Pasuruan", 25, false);

g.addEdge("Pasuruan", "Malang", 40, false);

g.addEdge("Mojokerto", "Malang", 45, false);

g.addEdge("Mojokerto", "Jombang", 25, false);

g.addEdge("Malang", "Lumajang", 30, false);

g.addEdge("Lumajang", "Jember", 30, false);

g.addEdge("Bangkalan", "Sampang", 30, false);

g.addEdge("Sampang", "Pamekasan", 40, false);

g.addEdge("Pasuruan", "Situbondo", 50, false);

g.addEdge("Situbondo", "Banyuwangi", 50, false);

g.addEdge("Jember", "Banyuwangi", 50, false);

System.out.println(g.weight("Surabaya", "Bangkalan"));

System.out.println(g.weight("Surabaya", "Sidoarjo"));

System.out.println(g.weight("Bangkalan", "Banyuwangi"));

// traverse graph

g.traverse("Surabaya","Malang");

System.out.println(g.path);

for(Object p : g.path){

if(g.rvertex.get(p)!=null)

System.out.print(g.rvertex.get(p)+"-");

else

System.out.println();

}

}

}

BAB V

PENUTUP

5.1. Kesimpulan

Graph, adalah representasi pasangan Vertex(Node) dan Edge(Link) yang

membentuk sebuah jaringan koneksi antar satu Node dengan Node lainnya.

5.2. Saran

Sebaiknya Praktikumnya di perjelas lagi.