BAB 3 ANALISIS DAN PERANCANGAN SISTEM
3.2. Pemodelan sistem
3.2.3. Activity diagram
Activity diagram adalah bentuk pemodelan dari sistem yang menggambarkan alur dari proses yang terjadi pada sebuah use case dan untuk menggambarkan logika dari suatu sistem. Activity diagram dibuat berdasarkan use case yang telah ditentukan sebelumnya pada proses requirement analysis. Activity diagram yang terdapat pada sistem ini adalah sebagai berikut.
Pada proses home (input vertex), aktivitas yang berlangsung dapat dilihat pada Gambar 3.3.
Gambar 3.3. Activity Diagram
3.2.4. Sequence diagram
Sequence Diagram adalah suatu diagram yang menggambarkan interaksi antara aktor dan sistem pada use case skenario diagram ini sangat membantu melihat pesan higt level yang masuk dan keluar dari sistem (Bentley, Whitten, 2007). Sequence Diagram untuk sistem minimum spanning tree algoritma Kruskal dan Prim dapat dilihat pada Gambar 3.4.
Gambar 3.4. Sequence Diagram
3.2.5. Flowchart
Flowchart adalah suatu bagan dengan simbol-simbol tertentu yang menggambarkan urutan proses secara mendetail dan hubungan antara suatu proses (instruksi) dengan proses lainnya dalam suatu program. Flowchart sistem merupakan bagan yang menunjukan alur kerja atau apa yang sedang dikerjakan didalam sistem secara keseluuhan dan menjelaskan urutan dari prosedur-prosedur yang ada didalam sistem.
Dengan kata lain flowchart ini merupakan deskripsi secara grafik dari urutan prosedur-prosedur yang terkombinasi yang memberntuk suatu sistem.
Flowchart sistem terdiri dari data yang mengalir melalui sistem dan proses yang mentransformasikan data tersebut. Data dan proses dalam flowchart sistem dapat digambarkan secara online (dihubungkan langsung dengan komputer) atau offline.
27
1. Flowchart sistem utama
Flowchart sistem secara umum dalam algoritma minimum spanning tree menggunakan algoritma kruskal dan algoritma prim dapat dilihat pada Gambar 3.5.
Gambar 3.5. Flowchart Sistem Input Titik
Kordinat Fakultas
Output (Lintasan Graf,
running time) Tabel jarak dan
Titik
Hitung MST Algoritma Kruskal dan Prim
Start
Finish
2. Flowchart algoritma Kruskal
Flowchart algoritma Kruskal yang akan di gunakan pada sistem ini dapat dilihat dari Gambar 3.6. flowchart ini mengikuti langkah-langkah dari algoritma Kruskal yang di jelaskan pada bab 2.
Gambar 3.6. Flowchart Algoritma Kruskal
Tidak
Tidak
Ya
Ya
End
Start
Isi t dengan semua titik G
tanpa garis
M <
(n-1)
Tentukan e ϵ E dengan bobot minimum
Jika e ϵ E masukan ke T tapi tidak membentuk sirkuit
Masukan e ke T sehingga edge = edge+1
Hapus e dari E Output T =
edge
29
3. Flowchart algoritma Prim
Flowchart algoritma prim yang akan di gunakan pada sistem ini dapat dilihat dari Gambar 3.7 flowchart ini mengikuti langkah-langkah dari algoritma Prim yang di jelaskan pada bab 2.
Gambar 3.7. Flowchart Algoritma Prim
3.3. Perancangan Antarmuka Sistem
Pada perancangan antar muka sistem ini perancangan sistem dibuat dengan Graphic User Interface (GUI) yang akan mempermudakan user dalam menggunakan sistem dari aplikasi ini, terdapat beberapa form yang ada di dalam aplikasi ini yaitu form utama, form data, form about.
1. Form Utama
Pada halaman form utama menampilkan langsung bagian dari program sehingga user bisa langsung memakai aplikasi ini tanpa perlu menekan button untuk masuk ke dalam aplikasi. Pada halaman form ini juga terdapat beberapa keterangan seperti nama aplikasi dan algoritma. Form utama dapat dilihat pada Gambar 3.8.
Gambar 3.8. Tampilan Form Utama
31
Keterangan : 1. Tab File
Pada bagian ini berisi sub menu yaitu keluar yang berguna untuk keluar dari aplikasi atau bisa menggunakan alternatif alt+f4
2. Tab Ubah
Pada bagian ini juga berisi sub menu yaitu undo dan redo yang berfungsi untuk kembali ke keperintah yang sebelumnya dan redo untuk mengulang perintah yang telah dibatalkan sebelumnya dan dapat memakai alternatif yaitu undo ctrl+z , redo ctrl+y.
3. Tab MST
Pada bagian ini terdiri dari beberapa sub menu yaitu : 1. Menampilkan
Terdiri dari beberapa sub tab juga yaitu :
• Kosongkan
Berfungsi untuk mengosokan lembar tampilan yang telah dibuat dan juga dapat memakai alternatif yaitu shift+n.
• Algoritma Prim
Berfungsi untuk menampilkan hasil dari minimum spanning tree dengan algoritma Prim dapat juga memakai alternatif yaitu shift+p.
• Algoritma Kruskal
Berfungsi untuk menampilkan hasil dari minimum spanning tree dengan algoritma Kruskal dapat juga memakai alternatif yaitu shift+k.
2. Hapus
Berfungsi untuk menghapus vertex yang telah diinputkan kedalam lembar kerja.
3. Data
Berikan link ke form data yang berisikan data log dari vertex yang ada berupa koordinat dari vertex.
4. Frame
Berisi map kerja untuk menggunakan algoritma Kruskal dan algoritma Prim disini merupakan bagian utama dari aplikasi.
2. Form data
Form data berisikan keterangan dari hasil input dari user berupa warna vertex dan juga koordinat vertex. Form dat dapat dilihat pada Gambar 3.9.
Gambar 3.9. Tampilan Form Data Keterangan :
1. Label
Berisikan informasi dari program berupa nama program.
2. Frame 1
Menampilkan jenis warna yang telah diinput oleh user berupa vertex berwana 3. Frame 2
Menampilkan posisi koordinat dari vertex yang telah diinput oleh user
BAB 4
IMPLEMENTASI DAN PENGUJIAN SISTEM
Pada bab 4 ini penulis memaparkan bagaimana implementasi dari sistem dan juga hasil pengujian aplikasi yang dilakukan pada algoritma kruskal dan prim yang sudah dibangun menggunakan java.
4.1. Implementasi Sistem
Implementasi sistem adalah prosedur yang dilakukan untuk menyelesaikan desain yang ada dalam dokumen desain sistem yang disetujui dan menguji, menginstal, memulai, serta menggunakan sistem yang baru atau sistem yang diperbaiki.
Implementasi sistem pada penelitian ini menggunakan bahasa pemrograman. Bahasa pemrograman digunakan adalah java versi 1.8.0_111. Perangkat lunak yang digunakan dalam membagun sistem ini adalah Netbeans IDE 8.1 include Java SE Runtime Environtment 1.8.0_111-b14 dan Java Development Kit 1.8.0_73.
Proses implementasi yang diranang dari sistem ini dibagi menjadi 2 form dalam bahasa java, di antaranya yaitu form utama, form data.
4.1.1. Form utama
Form utama merupakan form yang akan muncul pertama kali ketika aplikasi dijalankan. Form ini terdiri dari 3 tab menu, yaitu tab file, tab ubah, dan tab MST.
Form utama pada aplikasi dapat dilihat pada Gambar 4.1.
Gambar 4.1 Form utama
4.1.2. Form data
Form data adalah form yang berisikan data-data dari vertex yang telah diinputkan, dimana di dalam form ini terdapat informasi letak titik vertex dan warna dari vertex tersebut. Form data pada aplikasi dapat dilihat pada Gambar 4.1.
Gambar 4.2 Form Data
35
4.1.3. Tab file
Tab file merupakan tab yang berisikan sub tab yaitu keluar yang berfungsi untuk keluar dari program yang telah dijalankan. Tab file pada aplikasi dapat dilihat pada Gambar 4.1.
Gambar 4.3 Tab File
4.1.4. Tab Ubah
Tab ubah merupakan tab yang berisikan 2 sub tab yaitu undo dan redo yang berfungsi untuk mengembalikan data yang telah diproses dan menampilkan kembali data yang telah dihapus atau di undo. Tab ubah pada aplikasi dapat dilihat pada Gambar 4.1.
Gambar 4.4 Tab Ubah
4.1.5. Tab MST
Tab MST berisikan tampilan, hapus, dan data dimana masing masing mempunyai fungsi masing-masing. Tab MST dan sub menu tampilan pada aplikasi dapat dilihat pada Gambar 4.4 dan Gambar 4.5.
Gambar 4.4 Tab MST
Gambar 4.5 Sub Menu Tampilan
37
4.2. Pengujian Sistem
Pengujian sistem merupakan tahap mengidentifikasi hasil dari implementasi sistem apakah sistem akan berjalan sesuai dengan fungsi-fungsi yang telah ditentukan sebelumnya pada tahap analisis dan perancangan sistem. Pengujian sistem ini dilakukan pada vertex yang berupa titik pada map. Pengujian sistem ini di bagi dalam 2 proses yaitu pengujian proses algoritma Kruskal dan algoritma Prim.
4.2.1. Pengujian algoritma Kruskal
Pengujian sistem algoritma Kruskal ini dilakukan dengan tahap memasukan vertex yang diinginkan secara manual di halaman utama. Langkah-langkah pengujian sistem algoritma Kruskal dapat dilihat sebagai berikut.
1. Input vertex secara manual di tempat yang diinginkan. Vertex yang telah diinput dapat dilihat pada Gambar 4.6.
Gambar 4.6. Vertex yang Telah di Input
2. Pilih tab MST dan pilih sub menu tampilkan.
3. Memilih algoritma sesuai yang diinginkan yaitu agoritma Kruskal atau bisa juga menekan tombol pada keyboard sebagai alternatif yaitu shift+k.
4. Lalu akan muncul jalur minimum spanning tree dari algoritma Kruskal yang telah dipilih. Minimum spanning tree dari algoritma kruskal dapat dilihat pada Gambar 4.7.
Gambar 4.7. Minimum Spanning Tree Algoritma Kruskal
4.2.2. Pengujian algoritma Prim
Pengujian sistem algoritma Prim ini dilakukan dengan tahap sama seperti pengujian sistem pada algoritma Kruskal yaitu memasukan vertex yang diinginkan secara manual di halaman utama. Langkah-langkah pengujian sistem algoritma Kruskal dapat dilihat sebagai berikut.
1. Input vertex secara manual di tempat yang diinginkan. Vertex yang telah diinput dapat dilihat pada Gambar 4.8.
Gambar 4.8. Vertex yang Telah di Input
39
2. Pilih tab MST dan pilih sub menu tampilkan
3. Memilih algoritma sesuai yang diinginkan yaitu agoritma Prim atau bisa juga menekan tombol pada keyboard sebagai alternatif yaitu shift+p.
4. Lalu akan muncul jalur minimum spanning tree dari algoritma Prim yang telah dipilih. Minimum spanning tree dari algoritma Prim dapat dilihat pada Gambar 4.9.
Gambar 4.9. Minimum Spanning Tree Algoritma Prim
4.3. Hasil Pengujian
Berdasarkan penelitian pengujian sistem dari gambar running time dari minimum spanning tree dengan algoritma Kruskal dan algoritma Prim dapat di ketahui dari beberapa vertex yang telah diinputkan dengan 5 kali percobaan. Adapun hasil pengujian dari algoritma Kruskal dan algoritma Prim dapat dilihat pada Tabel 4.1.
Tabel 4.1. Hasil Pengujian Algoritma Kruskal dan Algoritma Prim No Banyak Vertex Running Time (ms)
Algoritma Kruskal
Running Time (ms) Algoritma Prim
1 18 0,015 0,016
2 24 0,016 0,015
3 30 0,031 0,031
4 36 0,063 0,032
5 40 0,031 0,078
Total 0,156 0,172
Rata-rata 0,031 0,034
Setelah mendapatkan hasil pengujian dari Tabel 4.1 maka dapat dibuat grafik perbandingan algoritma Kruskal dan algoritma Prim berdasarkan hasil pengujian.
Grafik dapat dilihat pada Gambar 4.10.
15 16 31
Gambar 4.10. Grafik Running time Algoritma Kruskal dan Algoritma Prim
Berdasarkan gambar 4.2 dapat disimpulkan bahwa algoritma Kruskal memiliki running time yang relative lebih sedikit di bandingkan algoritma Prim namun perbandingan tersebut perbedaannya tidak telalu jauh dengan rata-rata waktu perbedaan 3ms. Rata-rata waktu kedua algoritma dapat dilihat pada Gambar 4.11.
151
Gambar 4.11. Grafik Perbandingan Total dan Rata-rata Running time Algoritma Kruskal dan Algoritma Prim
41
4.4. Kompleksitas Waktu
Kompleksitas waktu yang akan di uji adalah kompleksitas algoritma Kruskal dan algoritma Prim.
4.4.1. Kompleksitas algoritma Prim
Kompleksitas algoritma Prim dapat kita cari melalui algoritma yang ada dan melihat dari koding yang telah dibuat pada aplikasi yang dibuat oleh peneliti. Kompleksitas algoritma Prim dapat dilihat pada tabel 4.2.
Tabel 4.2. Kompleksitas Fungsi Proses Algoritma Prim
Langkah T(V,E) Koding
1 1 ArrayList<Sisi> result = new
ArrayList<Sisi>();
result.add(arraySisi.remove(0));
2 V for (int i = 0; i < source.size() -
2; i++)
a i for (int j = 0; j <arraySisi.size();
j++)
b 1 if (isBeside(result, s)) {
c 1 if (!isCircular(result, s)) { arraySisi.remove(s);
result.add(s);
Sehingga dapat kita lihat kompleksitas algoritma dari algoritma Prim adalah T(V,E) = 1 + V (i+1+1)
= 1 + + 2V = ½ V2 + 2 ½ V + 1
Sehingga kompleksitas algoritma Prim adalah O = (V2) dengan V menyatakan banyaknya vertex.
4.4.2. Kompleksitas algoritma Kruskal
Kompleksitas algoritma Kruskal dapat kita cari melalui algoritma yang ada dan melihat dari koding yang telah dibuat pada aplikasi yang dibuat oleh peneliti.
Kompleksitas algoritma Prim tidak jauh berbeda dengan algoritma Kruskal karena mempunyai banyak perulangan yang sama. Kompleksitas algoritma Kruskal dapat dilihat pada tabel 4.3.
Tabel 4.3. Kompleksitas Fungsi Proses Algoritma Kruskal
Langkah T(V,E) Koding
1 1 ArrayList<Sisi> result = new
ArrayList<Sisi>();
result.add(arraySisi.remove(0));
2 V while (result.size() <
source.size() - 1)
a i for (int j = 0; j <arraySisi.size();
j++)
b 1 if (isBeside(result, s)) {
c 1 if (!isCircular(result, s)) { result.add(arraySisi.remove(j));
Sehingga dapat kita lihat kompleksitas algoritma dari algoritma Kruskal adalah T(V,E) = 1 + V (i+1+1)
= 1 + + 2V = ½ V2 + 2 ½ V + 1
Sehingga kompleksitas algoritma Kruskal adalah O = (V2) dengan V menyatakan banyaknya vertex.
Notasi untuk big O adalah keadaan terburuk (worst case) artinya pencapaian T(n) paling maksimum atau tidak ada yang bisa lebih lambat dari T(n) yang didapat.
Notasi untuk big O bisa dikatakan jika algoritma dengan T(n) = Ɵ(n) artinya memiliki O sama dengan atau lebih besar dari Ɵ(n).
Notasi untuk big Ω adalah keadaan terbaik (best case) artinya pencapaian T(n) paling minimum atau tidak ada yang bisa lebih cepat dari T(n) yang didapat. Notasi
43
untuk big Ω bisa dikatakan jika algoritma dengan T(n) = Ɵ(n) artinya memiliki Ω sama dengan atau lebih kecil dari Ɵ(n). Notasi untuk big Ɵ adalah keadaan rata-rata (average case) artinya pencapaian nilai tengah atau T(n) berada di tengah antara O(n) dan Ω(n).
Notasi untuk big Ɵ bisa dikatakan jika algoritma dengan T(n) = Ɵ(n) artinya jika nilai O(n) dan Ω(n) sama maka dikatakan kompleksitas itu adalah Ɵ. Pada penelitian, algoritma Kruskal memiliki T(n) = Ɵ(n2) sedangkan algoritma Prim memiliki T(n) = Ɵ(n2).
Maka kompleksitas kedua algoritma sama sama memiliki Ɵ(n2) tetapi memiliki perbedaan running time yang tidak terlalu besar dikarenakan variabel yang berbeda algoritma Kruskal memiliki variabel yang lebih sedikit di bandingkan algoritma Prim sehingga algoritma Kruskal lebih cepat beberapa ms dalam melakukan proses minimum spanning tree.
BAB 5
KESIMPULAN DAN SARAN
Pada bab 5 ini akan disimpulkan, aplikasi yang telah dirancang telah dapat melakukan minimum spanning tree. Pada bab ini juga akan disajikan saran-saran yang bermanfaat bagi yang akan mengembangkan aplikasi minimum spanning tree dengan algoritma Kruskal dan algoritma Prim menjadi lebih baik.
5.1. Kesimpulan
Kesimpulan yang dapat di ambil dari penelitian ini adalah :
1. Aplikasi yang telah dirancang oleh peneliti telah dapat melakukan proses minimum spanning tree dengan algoritma Kruskal dan algoritma Prim.
2. Aplikasi yang telah dirancang dalam penelitian ini dapat melakukan proses minimum spanning tree dengan vertex yang dinamis.
3. Hasil pengujian waktu proses antara algoritma Kruskal dan Algoritma Prim adalah 0.31 detik dan 0.34 detik dengan perbedaan waktu rata-rata 0,03 detik.
4. Kompleksitas dari masing-masing algoritma Prim dan algoritma Kruskal adalah sama yaitu O(n2).
5.2. Saran
Saran yang dapat diberikan penulis untuk mengembangkan dan memperbaiki sistem adalah:
1. Waktu proses algoritma yang lebih efesien dan lebih akurat.
2. Aplikasi yang dirancang dapat dipakai pada wilayah yang lebih luas.
3. Aplikasi yang dirancang memiliki fitur yang sangat sederhana, sehingga diharapkan bisa dikembangkan menjadi lebih kompleks lagi.
DAFTAR PUSTAKA
Abdusakir. 2009. Teori Graf Topik Dasar Untuk Tugas Akhir/Skripsi. Malang: UIN Malang
Afrianto, Irawan., Jamilah, Euis Widiani. Oktober 2012, Penyelesaian Masalah Minimum Spanning Tree (MST) Menggunakan Ant Colony System (ACS), Jurnal Ilmiah Komputer dan Informatika, vol.1(2):35-40.
http://komputa.if.unikom.ac.id/jurnal/penyelesaian-masalah-minimum.p.
(diakses 24 Agustus 2016)
Bentley, Whitten. 2009. System Analysis And Design Method. Avenue of the Americas, NewYork.
Efendi. R. 2003. Penerapan Algoritma Semut Untuk Pemecahan Masalah Spanning Tree Pemasangan Jaringan Kabel Telepon. Skripsi. Universitas Islam Indonesia
Graham, R.L., Hell, Pavol. January 1985, On The History of the Minimum Spanning Tree Problem, Annals of the History of Computing, vol.7(1):43-57.
http://ieeexplore.ieee.org/document/4392963/. (diakses 23 Agustus 2016) Hartati, G. Sri. 2008. Pemrograman GUI Swing Java. Yogyakarta: Penerbit Andi Hartono, Tony. 2007.Algoritma dan Pemrograman. Jakarta: Erlangga
Horowitz, Ellis., Sartaj, Sahni, & Saguthevar, Rajashekaran.(1997). Computer Algorithms. New York: W.H Freeman and Company
Khanam, A., Mathew, M. 2012, Minimum Spanning Tree of Undirected Graphs, International Journal of Engineering Research & Technology (IJERT), vol.1(10):1-4. http://www.ijert.org. (diakses 24 Agustus 2016)
Knuth, Donald E. 1973, The Art of Computer Programming Volume 1, AddisonWesley Company, Inc,
Ladjamudin, Al-Bahra bin. 2005. Analisis dan Desain Sistem Informasi. Graha Ilmu:
Yogyakarta
Levitin, A. 2011. Introduction to the Design and Analysis of Algorithm 3rd Edition.
United States of America. Pearson Education,Inc.
Lipschutz, Seymour. 2008. Matematika Diskrit 1. Jakarta: Erlangga Munir, Rinaldi. 2009. Matematika Diskrit. Bandung: Informatika
Purwanto, E. B. 2008. Perancangan & Analisis Algoritma. Graha Ilmu : Yogyakarta.
Ren, ChuanJun., Yang, Chenghui. July 2010, Simulation Research of Communication Networks Based on Prim Algorithm, Information Technology and Aplication (IFITA), vol.3. http://ieeexplore.ieee.org/document/5634734/. (diakses 23 Agustus 2016)
Retanto, Yudi. 2009. Algoritma Djikstra dan Bellmanford dalam Pencarian Jalur Terpendek. Skripsi. Institut Teknologi Bandung
Riska. 2014. Perbandingan Algoritma Kruskal dengan Algoritma Genetika dalam Penyelesaian Maslah MST. Skripsi. Universitas Bengkulu
Sigit W, Aloysius. 2010. Proyek Aplikasi dengan Java. Jakarta: Elex Media Komputindo
Wu, Ying-Fung., Widmayer, Wong, Schlag. March 1987, Rectilinear Shortest Paths and Minimum Spanning Trees in the Presence of Rectilinear Obstacles, IEEE Transactions on Computers, vol.C-36(3): 321-331.
http://ieeexplore.ieee.org/document/1676904/. (diakses 23 Agustus 2016)
Wilson, R. J., dan Watkhins, J. J. (1990). Graph An Introductionary Approach,A First Course in Discrete Mathematics. John Willey and Sons, New York
Zakiah, Nina., Desniarti., Sofyan, Benny. December 2015, Minimum Spanning Tree Determination Program Using Kruskal Algorithm on Visual Basic 6.0, International Journal of Science and Research (IJSR), vol.4(12): 1817-1821.
https://www.ijsr.net. (diakses 23 Agustus 2016)
A-1
public class FormUtama extends javax.swing.JFrame { private static final long serialVersionUID = 1L;
private DialogAbout dialogAbout;
private DialogInfo dialogInfo;
public FormUtama() {
getRootPane().getActionMap().put("UNDO", new AbstractAction() {
getRootPane().getActionMap().put("REDO", new AbstractAction() {
if (JOptionPane.showConfirmDialog(this, "Anda Yakin Akan Keluar Program ?", "Keluar Program", JOptionPane.OK_CANCEL_OPTION,
} else {
panelTree = new minimum.spanning.tree.PanelTree();
menubar = new javax.swing.JMenuBar();
itemNone = new javax.swing.JRadioButtonMenuItem();
itemAllLine = new javax.swing.JRadioButtonMenuItem();
itemPrim = new javax.swing.JRadioButtonMenuItem();
itemKruskal = new javax.swing.JRadioButtonMenuItem();
itemClear = new javax.swing.JMenuItem();
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt)
labelJudul.setText("MINIMUM SPANNING TREE");
getContentPane().add(labelJudul);
labelJudul.setBounds(0, 11, 1370, 29);
panelTree.setBackground(new java.awt.Color(0, 0, 0));
panelTree.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0), 3));
panelTree.setMinimumSize(new java.awt.Dimension(1319, 870));
panelTree.setOpaque(false);
panelTree.setPreferredSize(new java.awt.Dimension(1350, 870));
panelTree.setLayout(null);
jPanel1.add(panelTree);
jScrollPane1.setViewportView(jPanel1);
getContentPane().add(jScrollPane1);
jScrollPane1.setBounds(30, 50, 1310, 660);
menuFile.setMnemonic('F');
A-3
public void actionPerformed(java.awt.event.ActionEvent evt) {
menuUbah.addMenuListener(new javax.swing.event.MenuListener() {
public void menuCanceled(javax.swing.event.MenuEvent evt) {
}
public void menuDeselected(javax.swing.event.MenuEvent evt) {
public void actionPerformed(java.awt.event.ActionEvent evt) {
public void actionPerformed(java.awt.event.ActionEvent evt) {
menuPohon.setMnemonic('P');
menuPohon.setText("MST");
menuTampilkan.setMnemonic('T');
menuTampilkan.setText("Tampilkan");
public void actionPerformed(java.awt.event.ActionEvent evt) {
itemAllLine.setText("Seluruh Kemungkinan");
itemAllLine.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
public void actionPerformed(java.awt.event.ActionEvent evt) {
itemKruskal.setText("Algoritma Kruskal");
itemKruskal.addActionListener(new java.awt.event.ActionListener() {
A-5
public void actionPerformed(java.awt.event.ActionEvent evt) {
public void actionPerformed(java.awt.event.ActionEvent evt) {
public void actionPerformed(java.awt.event.ActionEvent evt) {
if (panelTree.getMinimumSpanningTree().size() < 1) {
java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
A-7
private javax.swing.ButtonGroup groupTampilkan;
private javax.swing.JRadioButtonMenuItem itemAllLine;
private javax.swing.JMenuItem itemClear;
private javax.swing.JMenuItem itemData;
private javax.swing.JMenuItem itemExit;
private javax.swing.JRadioButtonMenuItem itemKruskal;
private javax.swing.JRadioButtonMenuItem itemNone;
private javax.swing.JRadioButtonMenuItem itemPrim;
private javax.swing.JMenuItem itemRedo;
private javax.swing.JMenuItem itemUndo;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel labelJudul;
}
public class PanelTree extends JPanel { public static final int TREE_NONE = 0;
public static final int TREE_KEMUNGKINAN = 1;
public static final int TREE_PRIM = 2;
public static final int TREE_KRUSKAL = 3;
private int treeType;
private ArrayList<Point> minimumSpanningTree;
private ArrayList<Color> minimumSpanningTreeColor;
private ArrayList<Point> minimumSpanningTreeHistory;
private ArrayList<Color> minimumSpanningTreeColorHistory;
private Random random;
private final Image gambarPanel;
public PanelTree() { super();
gambarPanel = new ImageIcon(getClass().getResource ("/minimum/spanning/tree/usu.jpg")).getImage();
setMinimumSpanningTree(new ArrayList<Point>());
setMinimumSpanningTreeHistory(new ArrayList<Point>());
setMinimumSpanningTreeColor(new ArrayList<Color>());
setMinimumSpanningTreeColorHistory(new ArrayList<Color>());
setRandom(new Random());
protected ArrayList<Color> getMinimumSpanningTreeColorHistory() { return minimumSpanningTreeColorHistory;
}
protected void
setMinimumSpanningTreeColorHistory(ArrayList<Color>
minimumSpanningTreeColorHistory) {
this.minimumSpanningTreeColorHistory = minimumSpanningTreeColorHistory;
}
protected ArrayList<Point> getMinimumSpanningTreeHistory() { return minimumSpanningTreeHistory;
}
protected void setMinimumSpanningTreeHistory(ArrayList<Point>
minimumSpanningTreeHistory) {
this.minimumSpanningTreeHistory = minimumSpanningTreeHistory;
}
public boolean canUndo() {
return getMinimumSpanningTree().size() > 0;
}
public boolean canRedo() {
return getMinimumSpanningTreeHistory().size() > 0;
}
public void undo() { Point p =
getMinimumSpanningTree().remove(getMinimumSpanningTree().size() - 1);
getMinimumSpanningTreeHistory().add(p);
repaint();
A-9
protected void doMouseClick(MouseEvent e) { getMinimumSpanningTree().add(e.getPoint());
getMinimumSpanningTreeColor().add(new
Color(getRandom().nextInt(255), getRandom().nextInt(255),
protected void paintComponent(Graphics g) { super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.drawImage(gambarPanel, 0, 0,getWidth(),getHeight(),null);
g2d.dispose();
Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
public static void removeDuplicate(ArrayList<Sisi> array) {
int index = 0;
public ArrayList<Point> getMinimumSpanningTree() { return minimumSpanningTree;
}
public void setMinimumSpanningTree(ArrayList<Point>
minimumSpanningTree) {
this.minimumSpanningTree = minimumSpanningTree;
}
public Random getRandom() { return random;
}
public void setRandom(Random random) { this.random = random;
}
public ArrayList<Color> getMinimumSpanningTreeColor() { return minimumSpanningTreeColor;
}
public void setMinimumSpanningTreeColor(ArrayList<Color>
minimumSpanningTreeColor) {
this.minimumSpanningTreeColor = minimumSpanningTreeColor;
}
public static int getDistance(Point p1, Point p2) { int hasil;
double result = Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));
return (int) result;
}
if (temp.contains(s.getFrom()) && temp.contains(s.getTo())) {
A-11
curcular = true;
}
return curcular;
}
public static boolean isBeside(ArrayList<Sisi> result, Sisi s) { for (int i = 0; i < result.size(); i++) {
if (result.get(i).getFrom() == s.getFrom() ||
result.get(i).getFrom() == s.getTo() || result.get(i).getTo() ==
s.getFrom() || result.get(i).getTo() == s.getTo()) { return true;
} }
return false;
} } }
DAFTAR RIWAYAT HIDUP
Address : Jalan Sei Padang No.138m, Kecamatan Medan Selayang,
Programming: IDE Software
Basic, C, Java Visual Basic, Borland , NetBeans Database:
MySQL
COMPUTER SKILL