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 Manual1. 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() {