• Tidak ada hasil yang ditemukan

BAB IV : IMPLEMENTASI

4.3. Implementasi Kelas Graph

4.3.1. Implementasi Metode Greedy dengan Algoritma Dijkstra

Source code pada gambar 4.1 adalah source code dari yang

digunakan untuk mengimplementasikan algoritma dijkstra ke dalam

aplikasi. Source code menunjukkan bahwa dibutuhkan tiga method

bantuan dalam pengimplementasian algoritma dijkstra ke dalam

aplikasi. Tiga method bantuan yang digunakan, yakni method

getMin(), adjust_sPath(), dan displayPaths(int tujuan, int awal).

Method getMin() digunakan untuk menemukan nilai jarak

terpendek sementara untuk setiap node yang ada dalam graph. Jarak

terpendek ini digunakan sebagai pembanding dalam rangka

menemukan jarak terpendek setiap node yang sebenarnya. Method

adjust_sPath() digunakan untuk memberntuk jalur berdasarkan

jarak terpendeknya. Terakhir adalah method displayPaths(int tujuan,

int awal) yang digunakan untuk menampilkan hasil yang berupa

jarak terpendek bersama dengan jalur terpendek yang harus

ditempuh.

public int getMin() {

double jarakTerpendek = INFINITE; int minIndeks = 0;

for (int i = 1; i < jumlah_vertex; i++) {

bantu = new DecimalFormat("#.###").format(sPath[tujuan].getJarak())+":";

while (tujuan != awal) {

paths = daftarVertex[tujuan].getNama() + "\n" + paths; tujuan = findIndex(daftarVertex[sPath[tujuan].getFrom()] .getNama()); } paths = daftarVertex[awal].getNama() + "\n" + paths;

paths = bantu + paths; }

return paths; }

public String dijkstra(String awal, String tujuan) { int a = findIndex(awal);

int b = findIndex(tujuan);

daftarVertex[a].setInGraph(true); jumGraph = 1;

for (int i = 0; i < jumlah_vertex; i++) { double jarakSementara = edge[a][i];

sPath[i] = new TemporaryJalur_n_Jarak(a, jarakSementara);

}

while (jumGraph < jumlah_vertex) { int minIndeks = getMin();

double minDist = sPath[minIndeks].getJarak(); if (minDist == INFINITE) { break; } else { vertSkrg = minIndeks;

SYSTOOLS DEMO

int finish = findIndex(tujuan); String paths, bantu;

int[][] path = new int[jumlahHalte][jumlahHalte];

for (int i = 0; i < path.length; i++) {

for (int j = 0; j < path.length; j++) { if (jarak[i][j] == INFINITE) { path[i][j] = -1; } else { path[i][j] = i; } } }

for (int i = 0; i < jumlahHalte; i++) { path[i][i] = i;

}

for (int i = 0; i < jarak.length; i++) {

for (int j = 0; j < jarak.length; j++) {

for (int k = 0; k < jarak.length; k++) {

if (jarak[j][i] + jarak[i][k] < jarak[j][k]) { jarak[j][k] = jarak[j][i] + jarak[i][k]; path[j][k] = path[i][k]; } } } } bantu = newDecimalFormat("#.###").format(jarak[start][finish])+":"; paths = daftarVertex[finish].getNama(); while (path[start][finish] != start) {

paths = daftarVertex[path[start][finish]].getNama() + "\n" + paths;

public List<String> perpindahanBus2(StringTokenizer stoken) {

List<String> answer = new ArrayList<String>();

List<String> jalurPilihan = new ArrayList<String>();

while (stoken.hasMoreElements()) {

jalurPilihan.add(stoken.nextToken("\n")); }

List<List> daftarTrayek = new ArrayList<List>(); for (int i = 0; i < jalurPilihan.size(); i++) {

if (i != 0) { int awal = findIndex(jalurPilihan.get(i - 1)); int tujuan = findIndex(jalurPilihan.get(i)); daftarTrayek.add(edgeTrayek[awal][tujuan]); } }

List<String> bantu = daftarTrayek.get(0); String baru = "";

String perpindahanHalte = "";

for (int i = 1; i < daftarTrayek.size(); i++) { baru = "";

for (int j = 0; j < bantu.size(); j++) {

for (int k = 0; k < daftarTrayek.get(i).size(); k++) {

if

(bantu.get(j).equals(daftarTrayek.get(i).get(k))) {

answer.add("Naik bus trayek: " + bantu.get(i)); } } answer.add(perpindahanHalte); return answer; }

Gambar 4.3Gambar Source Code untuk Perpindahan Bus

4.4. Implementasi Penghitungan Running Time Sebuah Algoritma pada Kelas SitesOverlay

Penghitungan running time algoritma dilakukan pada kelas

SitesOverlay dengan memanfaatkan syntax System.nanoTime() yang

diletakkan di awal sebelum pemanggilan algoritma dan di akhir sesudah

pemanggilan algoritma. Hal ini dilakukan untuk memeperoleh waktu mulai

dan waktu selesai jalannya sebuah algoritma. Waktu selesai kemudian harus

dikurangi dengan waktu mulai agar mendapatkan lawa waktu yang diperlukan

bagi sebuah algoritma untuk melakukan penghitungan. Lama waktu yang

didapat kemudian dibagi dengan satu juta untuk mendapatkan waktu dalam

satuan milliseconds. Gambar 4.4 adalah gambar yang berisi source code untuk

penghitungan running time setiap algoritma yang digunakan dalam sistem.

startTime = System.nanoTime();

bantuToken = new StringTokenizer(graph.dijkstra(awal[i], tujuan[j]),":");

finishTime = System.nanoTime();

belakang, sedangkan tiga button digunakan untuk mengakses

halaman peta dan Help. Gambar 4.5 adalah gambar dari hasil

halaman menu yang telah dibuat dan gambar 4.6 adalah source

code yang digunakan untuk membuat halaman menu.

Gambar 4.5Tampilan Halaman Menu

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi d" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:src="@drawable/title" />

SYSTOOLS DEMO

menggunakan MapView dari Google yang telah diisi API Key-

nya. Pada halaman ini juga digunakan AutoCompleteTextView

yang digunakan untuk menginputkan nama halte yang akan

dicari oleh pengguna. File “activity_main.xml” juga

menggunakan file xml lain yang bernama

“mydropdownstyle.xml” yang digunakan untuk merubah warna

text dan latar belakang pada AutoCompleteTextView yang

digunakan. Berikut ini adalah gambar 4.7, 4.8, dan 4.9 yang

merupakan tampilan dari halaman peta dan source code dari

file xml dari “activity_main.xml” dan “mydropdownstyle.xml”.

android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:text="@string/Detail" /> <LinearLayout android:id="@+id/zoomControls1" android:layout_width="wrap_content" android:layout_height="100dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:orientation="vertical" > </LinearLayout> <AutoCompleteTextView android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_toLeftOf="@+id/button1" android:textColor="#000000" android:ems="10" android:text="@string/empty" /> <requestFocus /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="@string/search" /> </RelativeLayout> Gambar 4.8activity_main.xml

SYSTOOLS DEMO

Gambar 4.10Tampilan Halaman Details

AlertDialog.Builder dialog = new AlertDialog.Builder(context); dialog.setTitle("Details by "+ param + " Algorithm"); dialog.setMessage("JARAK: "+ jarak + " km\nTIME ELAPSED: " + new DecimalFormat("#.###").format((finishTime - startTime) / 1000000) + " ms\n---" + "\nJALUR:\n" + paths + "\n---\nSARAN:\n" + sarans); dialog.setPositiveButton("OK", null); dialog.show();

Gambar 4.11Source Code Halaman Details

4.5.4. Implementasi Halaman Help

Tampilan halaman “Help” dibuat dengan membuat

sebuah file xml bernama “help.xml”. Halaman ini

android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/howTo" android:textAppearance="?android:attr/textAppearanceLarg e" /> <ImageView android:id="@+id/imageView4" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="center" android:src="@drawable/title_screen" /> <TextView android:id="@+id/textView17" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/judul" android:textAppearance="?android:attr/textAppearanceMedi um" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView19" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/one" />

SYSTOOLS DEMO

android:layout_height="wrap_content" android:text="@string/menu3" /> </LinearLayout> <TextView android:id="@+id/textView25" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/emptySource" /> <ImageView android:id="@+id/imageView5" android:layout_width="match_parent" android:layout_height="170dp" android:src="@drawable/map" /> <TextView android:id="@+id/textView18" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/halamanMap" android:textAppearance="?android:attr/textAppearanceMedi um" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView12" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/one" /> <TextView android:id="@+id/textView13" android:layout_width="wrap_content"

SYSTOOLS DEMO

android:layout_height="wrap_content" android:paddingLeft="15dp" android:text="@string/cancelSource" /> <TextView android:id="@+id/textView8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/emptySource" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/three" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/howToAddDest" /> </LinearLayout> <ImageView android:id="@+id/imageView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="15dp" android:src="@drawable/end_point" /> <TextView android:id="@+id/textView9" android:layout_width="wrap_content" android:layout_height="wrap_content"

SYSTOOLS DEMO

android:text="@string/pindahHalte" /> </LinearLayout> <ImageView android:id="@+id/imageView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="15dp" android:src="@drawable/halte_change" /> </LinearLayout> </ScrollView> </LinearLayout> Gambar 4.13 help.xml

SYSTOOLS DEMO

2 Membatalka n titik awal.

Halte bus yang telah ditentukan sebagai titk awal sebelumnya.

Muncul pesan apakah titik awal akan dibatalkan atau tidak.

Muncul pesan apakah titik awal akan dibatalkan atau tidak.

3 Menentukan titik tujuan.

Halte bus yang ada pada peta (selain yang telah ditandai sebagai titik awal).

Halte bus yang disentuh akan ditandai dengan ikon baru sebagai titik tujuan.

Muncul garis pada

peta yang menghubungkan

antar halte yang merupakan jalur tempuh dari titik awal ke titik tujuan.

Halte bus yang disentuh akan ditandai dengan ikon baru sebagai titik tujuan. Muncul garis pada peta yang menghubungkan antar halte yang merupakan jalur tempuh dari titik awal ke titik tujuan. 4 Melihat jalur bus yang ditempuh. Tombol “Details” disentuh. Rute jalur terpendek yang harus ditempuh menggunakan bus akan muncul berupa poin-poin. Rute jalur terpendek yang harus ditempuh menggunakan bus akan muncul berupa poin- poin. 5 Melihat nilai jarak yang Tombol “Details” disentuh.

Tampil total nilai jarak terpendek yang harus

Tampil total nilai jarak terpendek yang harus

RINGROAD UTARA (KENTUNGAN) SUGIYONO 2 (MUSEUM PERJUANGAN) User diarahkan ke posisi halte RINGROAD UTARA (KENTUNGAN) User diarahkan ke posisi halte SUGIYONO 2 (MUSEUM PERJUANGAN) ke posisi halte RINGROAD UTARA (KENTUNGAN) User diarahkan ke posisi halte SUGIYONO 2 (MUSEUM PERJUANGAN) 9 Mencari halte. “ ” TINUS SEMBARANG Tampil pesan bahwa halte yang

dicari tidak diketahui.

Tampil pesan bahwa halte yang

dicari tidak diketahui.

Tampil pesan bahwa halte yang

dicari tidak diketahui.

Tampil pesan bahwa halte yang dicari tidak diketahui.

Tampil pesan bahwa halte yang dicari tidak diketahui.

Tampil pesan bahwa halte yang dicari tidak diketahui.

1 Menguji Awal: Jarak: 4,604 km Dijkstra:

KOREM) -SANATA DHARMA -JL. COLOMBO (SAMIRONO) -JL. COLOMBO (PANTI RAPIH) -CIK DI TIRO 1 (MUSEUM KOREM) Saran: Naik 2B. luaran yang diharapkan. Awal: MT HARYONO 2 (SMA 7) Tujuan: TENTARA PELAJAR 1 (SMP 14) Jarak: 4,299 km Jalur: -MT HARYONO 2 (SMA 7) -TEJOKUSUMAN -NGABEAN - COKROAMINOT O (SMA 1) -SMPN 11 -TENTARA PELAJAR 1 (SMP 14) Saran: Naik 3B – pindah ke 2B di Ngabean. Dijkstra: Sama dengan luaran yang diharapkan. Floyd: Sama dengan luaran yang diharapkan.

Tabel 5.1Tabel Hasil Pengujian

public int getMin() {

double jarakTerpendek = INFINITE; O(1)

int minIndeks = 0; O(1)

for (int i = 1; i < jumlah_vertex; i++) { n

if (!daftarVertex[i].isInGraph()&& sPath[i].getJarak() < jarakTerpendek){

jarakTerpendek = sPath[i].getJarak(); O(1)

minIndeks = i; O(1)

} }

return minIndeks; O(1)

}

Gambar 5.1Source Code Method getMin

Berdasarkan gambar 5.1 method getMin memiliki

kompleksitas waktu asimtotik O(n). Hal tersebut diperoleh melalui

perhitungan berikut:

O(1)+O(1)+(n.(O(1)+O(1)))+ O(1)

= O(1)+O(1)+(n.O(1))+O(1)

= O(1)+O(1)+O(n)+O(1)

= O(n)

Gambar 5.2 adalah hasil penghitungan kompleksitas waktu

asimtotik tiap baris source code yang dimiliki oleh method

adjust_sPath.

public void adjust_sPath() {

int kolom = 0; O(1)

bantu = new DecimalFormat("#.###").format(sPath[tujuan].getJarak())+":";O(1)

while (tujuan != awal) { n

paths = daftarVertex[tujuan].getNama() + "\n" + paths; O(1)

tujuan = findIndex(daftarVertex[sPath[tujuan].getFrom()] .getNama());O(1)

}

paths = daftarVertex[awal].getNama() + "\n" + paths; O(1)

paths = bantu + paths; O(1)

}

return paths; O(1)

}

Gambar 5.3Source Code Method displayPaths

Kompleksitas waktu asimtotik dari method displayPaths adalah:

O(1)+O(1)+(O(1)+(n.(O(1)+O(1)))+O(1)+O(1))+O(1)

= O(1)+O(1)+(O(1)+O(n)+O(1)+O(1))+O(1)

= O(1)+O(1)+O(n)+O(1)

= O(n)

public int findIndex(String index) {

int a = 0; O(1) while (a < jumlah_vertex) { n if (index.equals(daftarVertex[a].getNama())) { return a; O(1) } else {

SYSTOOLS DEMO

sPath[i] = new TemporaryJalur_n_Jarak(a,

jarakSementara); O(1)

}

while (jumGraph < jumlah_vertex) { n

int minIndeks = getMin(); O(n)

double minDist = sPath[minIndeks].getJarak(); O(1)

if (minDist == INFINITE) { break;

} else {

vertSkrg = minIndeks; O(1)

mulaiSmpSkrg = sPath[minIndeks].getJarak();O(1) } daftarVertex[vertSkrg].setInGraph(true);O(1) jumGraph++; O(1) adjust_sPath(); O(n) } jumGraph = 0; O(1)

for (int i = 0; i < jumlah_vertex; i++) { n

daftarVertex[i].setInGraph(false); O(1)

}

return displayPaths(b, a); O(n)

}

Gambar 5.5Source Code Method dijkstra

Penghitungan kompleksitas waktu asimtotik algoritma

Dijkstra berdasarkan gambar 5.3 adalah O(n2). Penghitungan yang dilakukan untuk memperoleh hasil tersebut adalah:

O(n)+O(n)+O(1)+O(1)+(n.(O(1)+O(1)))+(n.(O(n)+O(1)+(O(1)

+O(1))+O(1)+O(1)+O(n)))+O(1)+(n.O(1))+O(n)

= O(n)+O(n)+O(1)+O(1)+O(n)+O(n2)+O(1)+O(n)+O(n)

Kompleksitas waktu asimtotik untuk method findIndex

berdasarkan pada gambar 5.6 adalah O(1)+n.O(1)+O(1) = O(n).

Analisis hasil nilai Big Oh untuk setiap baris source code

yang dimiliki oleh method deepCopyIntMatrix tertuang pada

gambar 5.7

public static double[][] deepCopyIntMatrix(double[][] input) { if (input == null)

return null; O(1)

double[][] result = new double[input.length][]; O(1)

for (int r = 0; r < input.length; r++) { n

result[r] = input[r].clone(); O(1)

}

return result; }

Gambar 5.7Source Code Method deepCopyIntMatrix

Kompleksitas waktu asimtotik untuk method deepCopyMatrix

berdasarkan pada gambar 5.7 adalah O(1) + O(1) + n.O(1) = O(n).

Setelah memperoleh nilai Big Oh dari method findIndex

dan deepCopyIntMatrix, penghitungan nilai Big Oh method floyd

dilakukan. Penghitungan nilai Big Oh dari method floyd dilakukan

dengan melihat gambar 5.8.

public String floyd(String awal, String tujuan) {

double[][] jarak = this.deepCopyIntMatrix(edge);O(n)

}

paths = daftarVertex[start].getNama() + "\n" + paths; O(1)

paths = bantu + paths; O(1)

return paths;

O(1)

}

Gambar 5.8Source Code Method Floyd

Dengan menggunakan gambar 5.8, penghitungan kompleksitas

waktu asimtotik dari algoritma Floyd-Warshall adalah:

O(n)+O(n)+O(n)+O(1)+(n.(n.(O(1)+O(1))))+(n.O(1))+(n.O(1))+(n

.(n.(n.((O(1)+O(1))))))+O(1)+O(1)+n.(O(1)+O(1))+O(1)+O(1)+O

(1)

=

O(n)+O(n)+O(n)+O(1)+O(n2)+O(n)+O(n)+O(n3)+O(1)+O(n)+O(1 ))+O(1)+O(1)+O(1)

= O(n3)

5.3. Pengujian dan Analisa Hasil Perbandingan Running Time Algoritma Dijkstra dan Floyd-Warshall

Pengujian running time masing-masing algoritma dilakukan dengan

menggunakan sepuluh kasus. Pengujian direpresentasikan melalui tabel 5.2.

Kolom pertama adalah nomor uji, kolom kedua merupakan titik awal, kolom

kedua merupakan titik tujuan, kolom keempat merupakan running time

algoritma Dijkstra, dan kolom terakhir merupakan running time algoritma

UTARA (INSTIPER 1/INSTIPER 2) (TAMAN PINTAR/TAMAN SENOPATI) 6. TERMINAL CONDONGCATUR GIWANGAN 16 ms 233 ms 7. SUDIRMAN 3 (GONDOLAYU) JL. COLOMBO (KOSUDGAMA) 9 ms 220 ms 8. MT HARYONO 2 (SMA 7) RINGROAD UTARA (INSTIPER 1/INSTIPER 2) 9 ms 222 ms 9. MANGKUBUMI 1 (TUGU) AHMAD YANI (BENTENG VREDEBURG) 8 ms 222 ms 10 MT HARYONO 2 (SMA 7) KATAMSO 2 (IMMACULATA) 9 ms 225 ms

Tabel 5.2Tabel Hasil Pengujian Running Time Kedua Algoritma

Berdasarkan tabel 5.2, dari sepuluh kasus yang diberikan, algoritma

Dijkstra mampu memberikan solusi lebih cepat dari algoritma Floyd-

Warshall untuk semua kasus yang diberikan. Hal tersebut dikarenakan

algoritma Dijkstra mempunyai kompleksitas waktu asimtotik (Big Oh) yang

BAB VI

KESIMPULAN DAN SARAN

Pada bab ini akan dibahas mengenai kesimpulan dan saran dari penelitian

yang telah dibuat.

6.1. Kesimpulan

Kesimpulan dari penelitian yang telah dilakukan adalah:

1. Penggunaan metode greedy dan metode pemrograman dinamis yang

masing-masing diwakili oleh algoritma Dijkstra dan Floyd-Warshall

mampu memberikan solusi yang tepat pada kasus pencarian jalur

terpendek pada Bus Trans Jogja.

2. Algoritma Dijkstra dan algoritma Floyd-Warshall mampu

diimplementasikan dalam sistem pencarian jalur terpendek untuk kasus

Bus Trans Jogja karena mampu memberikan solusi jalur terpendek yang

tepat.

3. Running time dari algoritma Dijkstra lebih cepat daripada running time

dari algoritma Floyd-Warshall dalam memberikan solusi kepada

pengguna. Hal tersebut juga Nampak pada kompleksitas waktu asimtotik

dari algoritma Dijkstra yang lebih sederhana, yakni O(n2) dibandingkan dengan kompleksitas waktu asimtotik dari algoritma Floyd-Warshall

yang adalah O(n3).

128

DAFTAR PUSTAKA

Arifianto, Sofyan. (2012). Sistem Aplikasi Penentuan Rute Terpendek Pada

Jaringan Multi Moda Transportas Umum Menggunakan Algoritma Dijkstra.

Tesis S-2 pada Universitas Diponegoro Semarang: tidak diterbitkan.

Bell, Donalds. (2004). UML Basics: The Class Diagram. Online. Tersedia:

http://www.ibm.com/developerworks/rational/library/content/RationalEdge/se

p04/bell/. 28 Mei 2013.

Bell, Rob. (2009). A Beginner’s Guide to Big O Notation. Online. Tersedia:

http://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/. 5 Juni 2013.

Cooper, Leon dan Mary W. Cooper. (1981). Introduction to Dynammic

Programming. Dallas: Pergamon Press.

Denardo, Eric V. (2003). Dynamic Programming Models and Applications.

New York: Dover Publications, Inc.

Fanani, Lutfi. (2012). Rancang Bangun Aplikasi Web Pencarian Rute

Terpendek Antar Gedung di Kampus Menggunakan Algoritma Floyd- Warshall. Journal Basic Science And Technology. 1(3), 7-11.

130

LAMPIRAN

Lampiran 1: User Manual

1. Sentuh tombol “Algoritma Dijkstra” untuk masuk ke halaman “Map” dan kemudian melakukan pencarian jalur terpendek dengan menggunakan algoritma Dijkstra.

2. Sentuh tombol “Algoritma Floyd-W” untuk masuk ke halaman “Map” dan kemudian melakukan pencarian jalur terpendek dengan menggunakan algoritma Floyd-Warshall.

3. Sentuh tombol “Help” untuk masuk ke halaman “Help” yang berisi cara penggunaan sistem.

132

Lampiran 2: Gambar Peta Jalur dan Halte Bus Trans Jogja

RINGROAD UTARA (MONJALI 2) RINGROAD UTARA (STIKES GUNA BANGSA)

RINGROAD UTARA (UPN) RS AU DR. S. HARDJOLUKITO RS DR YAP RSI HIDAYATULAH RSUP DR. SARDJITO SANATA DHARMA SANTREN

SENOPATI 1 (TAMAN SENOPATI) SENOPATI 2 (TAMAN PINTAR) SMP 5 YOGYAKARTA

SMPN 11

SOROGENEN (NITIKAN) SOROGENEN (WIROSABAN) SUDIRMAN 2 (BUMI PUTERA) SUDIRMAN 3 (GONDOLAYU) SUDRIMAN 1 (BETHESDA) SUGIYONO 1 (SD PUJOKUSUMAN) SUGIYONO 2 (MUSEUM PERJUANGAN) SUSTERAN NOVISIAT TEGAL GENDU 1 TEGAL GENDU 2 TEGALTURI 1 TEGALTURI 2 TEJOKUSUMAN TENTARA PELAJAR 1 (SMP 14) TENTARA PELAJAR 2 (SAMSAT) TERMINAL CONDONGCATUR TERMINAL JOMBOR

UNY

URIP SUMOHARJO (LPP)

SENOPATI 1 (TAMAN SENOPATI) TENTARA PELAJAR 1 (SMP 14) 2.84 1B

RS DR YAP JL. COLOMBO (KOSUDGAMA) 0.905 1B

JL. COLOMBO (UNY) JL. SOLO (DE BRITTO) 1.47 1B

JL. SOLO (DE BRITTO) JL. SOLO (AMBARUKMO) 0.941 1B

JL. SOLO (AMBARUKMO) JANTI FLYOVER 1.16 1B

JANTI FLYOVER JL. SOLO (JANTI) 0.611 1B

RINGROAD UTARA (MONJALI 1) AM. SANGAJI 2 (JETIS) 3.155 2A

AM. SANGAJI 2 (JETIS) MANGKUBUMI 1 (TUGU) 0.999 2A

SENOPATI 2 (TAMAN PINTAR) KATAMSO 1 (PURAWISATA) 0.981 2A KATAMSO 1 (PURAWISATA) SUGIYONO 1 (SD PUJOKUSUMAN) 0.791 2A SUGIYONO 1 (SD PUJOKUSUMAN) RSI HIDAYATULAH 1.984 2A

RSI HIDAYATULAH NGEKSIGONDO (DIKLAT PU) 1.302 2A

NGEKSIGONDO (DIKLAT PU) GEDONG KUNING (DEP.KEHUTANAN) 0.764 2A GEDONG KUNING (DEP.KEHUTANAN) KUSUMANEGARA (GEMBIRALOKA) 2.27 2A KUSUMANEGARA (GEMBIRALOKA) KUSUMANEGARA 4 (SGM) 0.598 2A 1B KUSUMANEGARA 4 (SGM) KENARI 2 (MANDALA KRIDA) 1.676 2A

KENARI 2 (MANDALA KRIDA) SMP 5 YOGYAKARTA 2.601 2A

SMP 5 YOGYAKARTA SUDRIMAN 1 (BETHESDA) 0.981 2A

SUDRIMAN 1 (BETHESDA) RS DR YAP 0.533 2A

RS DR YAP JL. COLOMBO (KOSUDGAMA) 0.905 2A

JL. COLOMBO (KOSUDGAMA) JL. COLOMBO (UNY) 0.916 2A 1B

JL. COLOMBO (UNY) UNY 0.512 2A

UNY SANTREN 0.958 2A

SANTREN TERMINAL CONDONGCATUR 1.249 2A

RINGROAD UTARA (MANGGUNG RINGROAD UTARA (MONJALI 2) 2.198 2A TERMINAL JOMBOR RINGROAD UTARA (MONJALI 1) 0.949 2B 2A

GEDONG KUNING (DEP.KEHUTANAN) GEDONG KUNING (JEC) 2.395 3A

GEDONG KUNING (JEC) JL. SOLO (JANTI) 2.566 3A 1A

JL. SOLO (JANTI) JL. SOLO (ALFA) 0.902 3A 1A 1B

JL. SOLO (ALFA) JL. SOLO (MAGUWO) 0.905 3A 1A 1B

JL. SOLO (MAGUWO) BANDARA ADISUCIPTO 1.071 3A 1A 1B 3B

BANDARA ADISUCIPTO RINGROAD UTARA (DISNAKER) 2.966 3A RINGROAD UTARA (DISNAKER) RINGROAD UTARA (INSTIPER 2) 1.17 3A RINGROAD UTARA (INSTIPER 2) RINGROAD UTARA (UPN) 1.774 3A

RINGROAD UTARA (UPN) TERMINAL CONDONGCATUR 1.612 3A

TERMINAL CONDONGCATUR RINGROAD UTARA (MANGGUNG) 1.381 3A 2A

RINGROAD UTARA (MANGGUNG) FK-UGM 2.467 3A

FK-UGM JL. KALIURANG (KOPMA UGM) 0.991 3A

JL. KALIURANG (KOPMA UGM) CIK DI TIRO 1 (MUSEUM KOREM) 1.128 3A

SMP 5 YOGYAKARTA KOTABARU 0.819 3A

KOTABARU SUDIRMAN 2 (BUMI PUTERA) 0.383 3A

SUDIRMAN 2 (BUMI PUTERA) DIPONEGORO 0.773 3A

DIPONEGORO TENTARA PELAJAR 2 (SAMSAT) 0.678 3A

TENTARA PELAJAR 2 (SAMSAT) JLAGRAN 0.692 3A

JLAGRAN MALIOBORO 1 (GARUDA) 1.138 3A

MALIOBORO 1 (GARUDA) MALIOBORO 2 (KEPATIHAN) 0.492 3A 1A 2A MALIOBORO 2 (KEPATIHAN) AHMAD YANI (BENTENG VREDEBURG) 0.517 3A 1A 2A AHMAD YANI (BENTENG VREDEBURG) KHA DAHLAN 1 (PAPPMI) 0.668 3A

NGABEAN MT HARYONO 1 (JOKTENG) 1.182 3A

MT HARYONO 1 (JOKTENG) SUGIYONO 1 (SD PUJOKUSUMAN) 1.416 3A

SUGIYONO 1 (SD PUJOKUSUMAN) LOWANU 1.132 3A

LOWANU SOROGENEN (WIROSABAN) 0.662 3A

GEDONG KUNING (BANGUNTAPAN) TEGAL GENDU 1 3.201 3B GEDONG KUNING (WONOCATUR) GEDONG KUNING (BANGUNTAPAN) 1.411 3B

TEGAL GENDU 1 GIWANGAN 1.412 3B

JL. SOLO (DE BRITTO) JL. SOLO (DE BRITTO) -7.782995 110.394005 JL. SOLO (GEDUNG WANITA) JL. SOLO (GEDUNG WANITA) -7.783346 110.393972

JL. SOLO (JANTI) JL. SOLO (JANTI) -7.783101 110.411439

JL. SOLO (KALASAN) JL. SOLO (KALASAN) -7.75981 110.477357

JL. SOLO (KR.1) JL. SOLO (KR.1) -7.766571 110.472465

JL. SOLO (KR.2) JL. SOLO (KR.2) -7.775458 110.461006

JL. SOLO (MAGUWO) JL. SOLO (MAGUWO) -7.783176 110.430729

JLAGRAN JLAGRAN -7.789505 110.360195

KARANGJATI KARANGJATI -7.757004 110.369468

KATAMSO 1 (PURAWISATA) KATAMSO 1 (PURAWISATA) -7.809835 110.369318

KATAMSO 2 (IMMACULATA) KATAMSO 2 (IMMACULATA) -7.803011 110.368974

KENARI 1/KENARI 2 (MANDALA KRIDA) KENARI 1 (MANDALA KRIDA);KENARI 2 (MANDALA KRIDA) -7.797541 110.383836 KHA DAHLAN (PAPPMI/NGADIWINATAN) KHA DAHLAN 1 (PAPPMI);KHA DAHLAN 2 (NGADIWINATAN) -7.80119 110.358703

KOTABARU KOTABARU -7.784524 110.371334

KUSUMANEGARA (GEDUNG JUANG 45) KUSUMANEGARA (GEDUNG JUANG 45) -7.802283 110.400589 KUSUMANEGARA (GEMBIRALOKA) KUSUMANEGARA (GEMBIRALOKA) -7.802325 110.398715 KUSUMANEGARA (SGM) KUSUMANEGARA 3 (SGM);KUSUMANEGARA 4 (SGM) -7.802144 110.393551

KUSUMANEGARA 1 (TMP) KUSUMANEGARA 1 (TMP) -7.801865 110.383544

KUSUMANEGARA 2 (STPP) KUSUMANEGARA 2 (STPP) -7.801868 110.381746

LOWANU LOWANU -7.823185 110.378072

MALIOBORO 1 (GARUDA) MALIOBORO 1 (GARUDA) -7.790999 110.366142

MALIOBORO 2 (KEPATIHAN) MALIOBORO 2 (KEPATIHAN) -7.794975 110.365648

RS DR YAP RS DR YAP -7.78105 110.375036

RSI HIDAYATULAH RSI HIDAYATULAH -7.815511 110.387803

RSUP DR. SARDJITO RSUP DR. SARDJITO -7.770118 110.373346

SENOPATI (TAMAN PINTAR/TAMAN SENOPATI) SENOPATI 2 (TAMAN PINTAR);SENOPATI 1 (TAMAN SENOPATI) -7.801523 110.367655

SMP 5 YOGYAKARTA SMP 5 YOGYAKARTA -7.787327 110.375353

SMPN 11 SMPN 11 -7.793417 110.353187

SOROGENEN (NITIKAN) SOROGENEN (NITIKAN) -7.824928 110.379467

SOROGENEN (WIROSABAN) SOROGENEN (WIROSABAN) -7.824673 110.379499

SUDIRMAN 2 (BUMI PUTERA) SUDIRMAN 2 (BUMI PUTERA) -7.783112 110.369425

SUDIRMAN 3 (GONDOLAYU) SUDIRMAN 3 (GONDOLAYU) -7.782708 110.369017

SUDRIMAN 1 (BETHESDA) SUDRIMAN 1 (BETHESDA) -7.783154 110.377847

SUGIYONO 1 (SD PUJOKUSUMAN) SUGIYONO 1 (SD PUJOKUSUMAN) -7.814697 110.369077 SUGIYONO 2 (MUSEUM PERJUANGAN) SUGIYONO 2 (MUSEUM PERJUANGAN) -7.814921 110.370215 SUSTERAN NOVISIAT/SANTREN SUSTERAN NOVISIAT;SANTREN -7.766008 110.392159

TEGAL GENDU 1 TEGAL GENDU 1 -7.825614 110.391296

TEGAL GENDU 2 TEGAL GENDU 2 -7.825513 110.391215

TEGALTURI 1 TEGALTURI 1 -7.825821 110.388458

TEGALTURI 2 TEGALTURI 2 -7.82547 110.388082

TEJOKUSUMAN TEJOKUSUMAN -7.807858 110.355949

TENTARA PELAJAR 1 (SMP 14) TENTARA PELAJAR 1 (SMP 14) -7.786365 110.359812 TENTARA PELAJAR 2 (SAMSAT) TENTARA PELAJAR 2 (SAMSAT) -7.78713 110.359941

TERMINAL CONDONGCATUR TERMINAL CONDONGCATUR -7.757684 110.39556

TERMINAL JOMBOR TERMINAL JOMBOR -7.747478 110.362086

Lampiran 6: Source Code Kelas Graph package com.entity; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer;

public class Graph {

private final int INFINITE = 1000000;

double edge[][];

ArrayList<String> edgeTrayek[][]; Halte daftarVertex[];

int jumlah_vertex, jumlahHalte;

int jumGraph;

int vertSkrg;

double mulaiSmpSkrg;

TemporaryJalur_n_Jarak sPath[];

public Graph(int jumlahHalte) {

this.jumlahHalte = jumlahHalte;

edge = new double[jumlahHalte][jumlahHalte];

edgeTrayek = new

ArrayList[jumlahHalte][jumlahHalte];

daftarVertex = new Halte[jumlahHalte];

jumlah_vertex = 0;

jumGraph = 0;

for (int i = 0; i < jumlahHalte; i++) {

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

edge[i][j] = INFINITE;

edgeTrayek[i][j] = null;

} }

sPath = new TemporaryJalur_n_Jarak[112];

}

public void insertHalte(String vortex) {

Halte a = new Halte(vortex);

daftarVertex[jumlah_vertex] = a;

jumlah_vertex++;

}

public void insertJarak(String a, String b, double

nilai,

ArrayList<String> trayek) { int x = findIndex(a);

int y = findIndex(b); if (x != -1 && y != -1) {

edge[x][y] = nilai;

String paths = ""; String bantu = "";

if (sPath[tujuan].getJarak() != INFINITE) {

//

paths.push(String.valueOf(sPath[tujuan].getJarak()));

bantu = new

DecimalFormat("#.###").format(sPath[tujuan].getJarak())+":";// String.valueOf(sPath[tujuan].getJarak()) + ":";

while (tujuan != awal) {

//

/paths.push(daftarVertex[tujuan].getNama());

paths = daftarVertex[tujuan].getNama()

+ "\n" + paths;

tujuan = findIndex(daftarVertex[sPath[tujuan].getFrom()]

.getNama()); }

paths = daftarVertex[awal].getNama() + "\n"

+ paths;

paths = bantu + paths;

// paths.push(daftarVertex[awal].getNama()); }

return paths;

}

public String dijkstra(String awal, String tujuan) {

int a = findIndex(awal); int b = findIndex(tujuan);

daftarVertex[a].setInGraph(true);

jumGraph = 1;

for (int i = 0; i < jumlah_vertex; i++) {

double jarakSementara = edge[a][i];

sPath[i] = new TemporaryJalur_n_Jarak(a,

jarakSementara); }

while (jumGraph < jumlah_vertex) {

int minIndeks = getMin();

double minDist = sPath[minIndeks].getJarak(); if (minDist == INFINITE) { break; } else { vertSkrg = minIndeks; mulaiSmpSkrg = sPath[minIndeks].getJarak(); }

daftarVertex[vertSkrg].setInGraph(true);

jumGraph++;

adjust_sPath(); }

paths = daftarVertex[start].getNama() + "\n" + paths;

paths = bantu + paths;

return paths;

}

public static double[][] deepCopyIntMatrix(double[][]

input) {

if (input == null) return null;

double[][] result = new double[input.length][];

for (int r = 0; r < input.length; r++) { result[r] = input[r].clone();

}

return result;

}

public List<String> perpindahanBus2(StringTokenizer

stoken) {

List<String> answer = new ArrayList<String>(); List<String> jalurPilihan = new ArrayList<String>();

while (stoken.hasMoreElements()) {

jalurPilihan.add(stoken.nextToken("\n")); }

List<List> daftarTrayek = new ArrayList<List>(); for (int i = 0; i < jalurPilihan.size(); i++) {

if (i != 0) {

int awal =

findIndex(jalurPilihan.get(i - 1));

int tujuan =

findIndex(jalurPilihan.get(i));

daftarTrayek.add(edgeTrayek[awal][tujuan]);

} }

List<String> bantu = daftarTrayek.get(0); String baru = "";

String perpindahanHalte = "";

for (int i = 1; i < daftarTrayek.size(); i++) { baru = "";

for (int j = 0; j < bantu.size(); j++) {

for (int k = 0; k < daftarTrayek.get(i).size(); k++) {

if

(bantu.get(j).equals(daftarTrayek.get(i).get(k))) {

private boolean isInGraph;

public String getNama() {

return nama;

}

public void setNama(String nama) {

this.nama = nama; }

public boolean isInGraph() {

Dokumen terkait