Deskripsi Kasus Perbandingan penggunaan algoritma dijkstra dan algoritma floyd warshall untuk pencarian jalur terpendek pada bus trans jogja

bantu = new DecimalFormat..formatsPath[tujuan].getJarak+:; while tujuan = awal { paths = daftarVertex[tujuan].getNama + \n + paths; tujuan = findIndexdaftarVertex[sPath[tujuan].getFrom] .getNama; } paths = daftarVertex[awal].getNama + \n + paths; paths = bantu + paths; } return paths; } public String dijkstraString awal, String tujuan { int a = findIndexawal; int b = findIndextujuan; daftarVertex[a].setInGraphtrue; jumGraph = 1; for int i = 0; i jumlah_vertex; i++ { double jarakSementara = edge[a][i]; sPath[i] = new TemporaryJalur_n_Jaraka, jarakSementara; } while jumGraph jumlah_vertex { int minIndeks = getMin; double minDist = sPath[minIndeks].getJarak; if minDist == INFINITE { break; } else { vertSkrg = minIndeks; SYSTOOLS DEMO int finish = findIndextujuan; 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..formatjarak[start][finish]+:; paths = daftarVertex[finish].getNama; while path[start][finish] = start { paths = daftarVertex[path[start][finish]].getNama + \n + paths; SYSTOOLS DEMO public ListString perpindahanBus2StringTokenizer stoken { ListString answer = new ArrayListString; ListString jalurPilihan = new ArrayListString; while stoken.hasMoreElements { jalurPilihan.addstoken.nextToken\n; } ListList daftarTrayek = new ArrayListList; for int i = 0; i jalurPilihan.size; i++ { if i = 0 { int awal = findIndexjalurPilihan.geti - 1; int tujuan = findIndexjalurPilihan.geti; daftarTrayek.addedgeTrayek[awal][tujuan]; } } ListString bantu = daftarTrayek.get0; 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.geti.size; k++ { if bantu.getj.equalsdaftarTrayek.geti.getk { SYSTOOLS DEMO answer.addNaik bus trayek: + bantu.geti; } } answer.addperpindahanHalte; return answer; } Gambar 4.3 Gambar 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 StringTokenizergraph.dijkstraawal[i], tujuan[j],:; finishTime = System.nanoTime; SYSTOOLS DEMO 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.5 Tampilan Halaman Menu ?xml version=1.0 encoding=utf-8? RelativeLayout xmlns:android=http:schemas.android.comapkresandroi d android:layout_width=match_parent android:layout_height=match_parent ImageView android:id=+idimageView1 android:layout_width=wrap_content android:layout_height=wrap_content android:layout_alignParentTop=true android:src=drawabletitle 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”. SYSTOOLS DEMO android:layout_height=wrap_content android:layout_alignParentBottom=true android:layout_centerHorizontal=true android:text=stringDetail LinearLayout android:id=+idzoomControls1 android:layout_width=wrap_content android:layout_height=100dp android:layout_alignParentBottom=true android:layout_centerHorizontal=true android:orientation=vertical LinearLayout AutoCompleteTextView android:id=+ideditText1 android:layout_width=wrap_content android:layout_height=wrap_content android:layout_alignParentLeft=true android:layout_alignParentTop=true android:layout_toLeftOf=+idbutton1 android:textColor=000000 android:ems=10 android:text=stringempty requestFocus Button android:id=+idbutton1 android:layout_width=wrap_content android:layout_height=wrap_content android:layout_alignParentRight=true android:layout_alignParentTop=true android:text=stringsearch RelativeLayout Gambar 4.8 activity_main.xml SYSTOOLS DEMO Gambar 4.10 Tampilan Halaman Details AlertDialog.Builder dialog = new AlertDialog.Buildercontext; dialog.setTitleDetails by + param + Algorithm; dialog.setMessageJARAK: + jarak + km\nTIME ELAPSED: + new DecimalFormat..formatfinishTime - startTime 1000000 + ms\n------- + \nJALUR:\n + paths + \n-------\nSARAN:\n + sarans; dialog.setPositiveButtonOK, null; dialog.show; Gambar 4.11 Source Code Halaman Details

4.5.4. Implementasi Halaman Help

Tampilan halaman “Help” dibuat dengan membuat sebuah file xml bernama “help.xml”. Halaman ini SYSTOOLS DEMO android:layout_width=match_parent android:layout_height=match_parent android:orientation=vertical TextView android:id=+idtextView1 android:layout_width=wrap_content android:layout_height=wrap_content android:text=stringhowTo android:textAppearance=?android:attrtextAppearanceLarg e ImageView android:id=+idimageView4 android:layout_width=match_parent android:layout_height=wrap_content android:scaleType=center android:src=drawabletitle_screen TextView android:id=+idtextView17 android:layout_width=wrap_content android:layout_height=wrap_content android:text=stringjudul android:textAppearance=?android:attrtextAppearanceMedi um LinearLayout android:layout_width=match_parent android:layout_height=wrap_content TextView android:id=+idtextView19 android:layout_width=wrap_content android:layout_height=wrap_content android:text=stringone SYSTOOLS DEMO android:layout_height=wrap_content android:text=stringmenu3 LinearLayout TextView android:id=+idtextView25 android:layout_width=wrap_content android:layout_height=wrap_content android:text=stringemptySource ImageView android:id=+idimageView5 android:layout_width=match_parent android:layout_height=170dp android:src=drawablemap TextView android:id=+idtextView18 android:layout_width=wrap_content android:layout_height=wrap_content android:text=stringhalamanMap android:textAppearance=?android:attrtextAppearanceMedi um LinearLayout android:layout_width=match_parent android:layout_height=wrap_content TextView android:id=+idtextView12 android:layout_width=wrap_content android:layout_height=wrap_content android:text=stringone TextView android:id=+idtextView13 android:layout_width=wrap_content SYSTOOLS DEMO android:layout_height=wrap_content android:paddingLeft=15dp android:text=stringcancelSource TextView android:id=+idtextView8 android:layout_width=wrap_content android:layout_height=wrap_content android:text=stringemptySource LinearLayout android:layout_width=match_parent android:layout_height=wrap_content TextView android:id=+idtextView7 android:layout_width=wrap_content android:layout_height=wrap_content android:text=stringthree TextView android:id=+idtextView3 android:layout_width=wrap_content android:layout_height=wrap_content android:text=stringhowToAddDest LinearLayout ImageView android:id=+idimageView2 android:layout_width=wrap_content android:layout_height=wrap_content android:paddingLeft=15dp android:src=drawableend_point TextView android:id=+idtextView9 android:layout_width=wrap_content android:layout_height=wrap_content SYSTOOLS DEMO android:text=stringpindahHalte LinearLayout ImageView android:id=+idimageView3 android:layout_width=wrap_content android:layout_height=wrap_content android:paddingLeft=15dp android:src=drawablehalte_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 SYSTOOLS DEMO 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: SYSTOOLS DEMO 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.1 Tabel Hasil Pengujian SYSTOOLS DEMO public int getMin { double jarakTerpendek = INFINITE; O1 int minIndeks = 0; O1 for int i = 1; i jumlah_vertex; i++ { n if daftarVertex[i].isInGraph sPath[i].getJarak jarakTerpendek{ jarakTerpendek = sPath[i].getJarak; O1 minIndeks = i; O1 } } return minIndeks; O1 } Gambar 5.1 Source Code Method getMin Berdasarkan gambar 5.1 method getMin memiliki kompleksitas waktu asimtotik On. Hal tersebut diperoleh melalui perhitungan berikut: O1+O1+n.O1+O1+ O1 = O1+O1+n.O1+O1 = O1+O1+On+O1 = On 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; O1 SYSTOOLS DEMO bantu = new DecimalFormat..formatsPath[tujuan].getJarak+:; O1 while tujuan = awal { n paths = daftarVertex[tujuan].getNama + \n + paths; O1 tujuan = findIndexdaftarVertex[sPath[tujuan].getFrom] .getNama; O1 } paths = daftarVertex[awal].getNama + \n + paths; O1 paths = bantu + paths; O1 } return paths; O1 } Gambar 5.3 Source Code Method displayPaths Kompleksitas waktu asimtotik dari method displayPaths adalah: O1+O1+O1+n.O1+O1+O1+O1+O1 = O1+O1+O1+On+O1+O1+O1 = O1+O1+On+O1 = On public int findIndexString index { int a = 0; O1 while a jumlah_vertex { n if index.equalsdaftarVertex[a].getNama { return a; O1 } else { SYSTOOLS DEMO sPath[i] = new TemporaryJalur_n_Jaraka, jarakSementara; O1 } while jumGraph jumlah_vertex { n int minIndeks = getMin; On double minDist = sPath[minIndeks].getJarak; O1 if minDist == INFINITE { break; } else { vertSkrg = minIndeks; O1 mulaiSmpSkrg = sPath[minIndeks].getJarak; O1 } daftarVertex[vertSkrg].setInGraphtrue; O1 jumGraph++; O1 adjust_sPath; On } jumGraph = 0; O1 for int i = 0; i jumlah_vertex; i++ { n daftarVertex[i].setInGraphfalse; O1 } return displayPathsb, a; On } Gambar 5.5 Source Code Method dijkstra Penghitungan kompleksitas waktu asimtotik algoritma Dijkstra berdasarkan gambar 5.3 adalah On 2 . Penghitungan yang dilakukan untuk memperoleh hasil tersebut adalah: On+On+O1+O1+n.O1+O1+n.On+O1+O1 +O1+O1+O1+On+O1+n.O1+On = On+On+O1+O1+On+On 2 +O1+On+On SYSTOOLS DEMO Kompleksitas waktu asimtotik untuk method findIndex berdasarkan pada gambar 5.6 adalah O1+n.O1+O1 = On. Analisis hasil nilai Big Oh untuk setiap baris source code yang dimiliki oleh method deepCopyIntMatrix tertuang pada gambar 5.7 public static double[][] deepCopyIntMatrixdouble[][] input { if input == null return null; O1 double[][] result = new double[input.length][]; O1 for int r = 0; r input.length; r++ { n result[r] = input[r].clone; O1 } return result; } Gambar 5.7 Source Code Method deepCopyIntMatrix Kompleksitas waktu asimtotik untuk method deepCopyMatrix berdasarkan pada gambar 5.7 adalah O1 + O1 + n.O1 = On. 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 floydString awal, String tujuan { double[][] jarak = this.deepCopyIntMatrixedge; On SYSTOOLS DEMO } paths = daftarVertex[start].getNama + \n + paths; O1 paths = bantu + paths; O1 return paths; O1 } Gambar 5.8 Source Code Method Floyd Dengan menggunakan gambar 5.8, penghitungan kompleksitas waktu asimtotik dari algoritma Floyd-Warshall adalah: On+On+On+O1+n.n.O1+O1+n.O1+n.O1+n .n.n.O1+O1+O1+O1+n.O1+O1+O1+O1+O 1 = On+On+On+O1+On 2 +On+On+On 3 +O1+On+O1 +O1+O1+O1 = On 3

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 SYSTOOLS DEMO UTARA INSTIPER 1INSTIPER 2 TAMAN PINTARTAMAN 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 1INSTIPER 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.2 Tabel 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 SYSTOOLS DEMO

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 On 2 dibandingkan dengan kompleksitas waktu asimtotik dari algoritma Floyd-Warshall yang adalah On 3 . 128 SYSTOOLS DEMO 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.comdeveloperworksrationallibrarycontentRationalEdgese p04bell . 28 Mei 2013. Bell, Rob. 2009. A Beginner’s Guide to Big O Notation. Online. Tersedia: http:rob-bell.net200906a-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. 13, 7-11. 130 SYSTOOLS DEMO 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 SYSTOOLS DEMO Lampiran 2: Gambar Peta Jalur dan Halte Bus Trans Jogja SYSTOOLS DEMO 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 SYSTOOLS DEMO 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 SYSTOOLS DEMO