Upload
independent
View
0
Download
0
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 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();
}
}
}