Академический Документы
Профессиональный Документы
Культура Документы
A. DEFINISI MASALAH
Buatlah program (“untuk soal latihan praktikum nomor 3 b” atau “ untuk con-
toh masalah maze/labirin diatas dengan menggunakan algoritma A* dengan
nilai f(n) = g(n)+h(n), misal g(n) adalah tingkat kedalaman penelusuran, dan
h(n) adalah jarak Manhattan atau Euclidian”) dengan memodifikasi program
pada contoh program di-atas.
B. JAWAB
Graph.java
1 package kb4;
2 public class Graph {
3
4 private int [][] dt1;
5 private int current = 0;
6
7 private class Node {
8
9 private int data, jarak;
10 private Node next;
11
12 public Node (int dt, Node n, int jrk) {
13 data = dt;
14 next = n;
15 jarak = jrk;
16 }
17
18 public int getDt() {
19 return data;
20 }
21
22 public Node getNext() {
23 return next;
24 }
25
26 public int getJarak() {
27 return jarak;
28 }
29 }
30
31 private Node[] node;
32 private int jNode;
33
34 public Graph(int n) {
35 jNode = n;
36 node = new Node[jNode];
37 for (int i = 0; i < jNode; i++) {
38 node[i] = null;
39 }
40 dt1 = new int[n][n];
41 }
42
43 public void addAdj (int head, int adj, int jarak) {
44 Node n = new Node(adj, node[head], jarak);
45 node [head] = n;
46 current++;
47 dt1[head][adj]++;
48 }
49
50 public int[] arraylong(int [] d, int z){
51 int[] total = new int [d.length + 1];
52 for (int i = 0; i < d.length; i++) {
53 total[1] = d[i];
54 }
55 total[d.length] = z;
56 return total;
57 }
58
59 public char ubah (int a){
60 switch (a){
61 case 0:
62 return 'A';
63 case 1:
64 return 'B';
65 case 2:
66 return 'C';
67 case 3:
68 return 'D';
69 case 4:
70 return 'E';
71 case 5:
72 return 'F';
73 case 6:
74 return 'G';
75 default:
76 return 'S';
77 }
78 }
79
80 public int[] getNode(int asal){
81 int[] jwb = new int[0];
82 Node n = node [asal];
83 while (n != null){
84 System.out.println("->" + ubah(n.getDt()) + "
85 " + n.getJarak());
86 jwb = arraylong(jwb, n.getDt());
87 jwb = arraylong(jwb, n.getJarak());
88 n = n.getNext();
89 }
90 return jwb;
91 }
92 }
Astar.java
1 package kb4;
2 public class Astar {
3
4 Graph as;
5 int[] ds = {180, 90, 89, 0, 110, 79, 100};
6
7 public Astar() {
8 as = new Graph(7);
9 as.addAdj(0, 1, 79);
10 as.addAdj(0, 5, 81);
11 as.addAdj(0, 6, 63);
12 as.addAdj(1, 2, 131);
13 as.addAdj(1, 3, 109);
14 as.addAdj(1, 6, 55);
15 as.addAdj(2, 3, 88);
16 as.addAdj(3, 4, 92);
17 as.addAdj(3, 5, 126);
18 as.addAdj(4, 5, 148);
19 as.addAdj(5, 6, 60);
20
21 as.addAdj(1, 0, 79);
22 as.addAdj(5, 0, 81);
23 as.addAdj(6, 0, 63);
24 as.addAdj(2, 1, 131);
25 as.addAdj(3, 1, 109);
26 as.addAdj(6, 1, 55);
27 as.addAdj(3, 2, 88);
28 as.addAdj(4, 3, 92);
29 as.addAdj(5, 3, 126);
30 as.addAdj(5, 4, 148);
31 as.addAdj(6, 5, 60);
32 }
33
34 public char ubah(int a){
35 switch (a){
36 case 0:
37 return 'A';
38 case 1:
39 return 'B';
40 case 2:
41 return 'C';
42 case 3:
43 return 'D';
44 case 4:
45 return 'E';
46 case 5:
47 return 'F';
48 case 6:
49 return 'G';
50 default:
51 return 'S';
52 }
53 }
54
55 public boolean ceklist(int[] ko, int f){
56 boolean s = true;
57 for (int i : ko){
58 if (i == f){
59 s = s && false;
60 }
61 }
62 return s;
63 }
64
65 public void bintang(int n){
66 int now = n;
67 int terkecil;
68 int jalur[];
69 int kode[] = new int[0];
70 int f[];
71 while (now != 3){
72 System.out.println("Node saat ini : " +
ubah(now));
73 System.out.println("perhitungan :");
74 terkecil = 1000;
75 jalur = as.getNode(now);
76 f = new int[(int) Math.floor(jalur.length /
2)];
77 for (int i = 0; i < f.length; i++){
78 f[i] = jalur[(i*2)+1] + ds[jalur[i*2]];
79 System.out.println(f[i] + " ");
80 if((terkecil > f[i]) && ceklist(kode,
jalur[i*2])){
81 terkecil = f[i];
82 }
83 }
84 System.out.println("");
85 kode = as.arraylong(kode, now);
86 for (int i = 0; i < f.length; i++) {
87 if (terkecil == f[i]){
88 now = jalur[i*2];
89 }
90 }
91 System.out.println("Berpindah ke node : " +
ubah(now));
92 if (now == 3){
93 kode = as.arraylong(kode, now);
94 }
95 }
96 System.out.println("Tujuan ditemukan");
97 for (int i = 0; i < kode.length; i++) {
98 System.out.println(ubah(kode[i]) + "->");
99 }
100 System.out.println("finish");
101 }
102
103
104 }
Main.java
1 package kb4;
2 public class Main {
3
4 public static void main(String[] args) {
5 Astar n = new Astar ();
6 n.bintang(0);
7 }
8 }
Penjelasan
Class Graph:
Baris 12-16 : Konstruktor kelas Node dengan parameter int dt, Node n, dan int jarak.
Baris 18-20: Method getDt dengan nilai kembalian value dari data.
Baris 22-24: Method getNext dengan nilai kembalian value dari next.
Baris 26-28: Method getJarak dengan nilai kembalian value dari jark.
Baris 33-40: Konstraktor kelas Graph dengan parameter n
Baris 42-47: Method addAdj dengan parameter int head, int adj, dan int jarak. Method
ini berguna untuk menambah isi array.
Baris 49-56: Method arraylong dengan parameter int array d, dan int z. Method ini
berguna untuk menghubungkan node.
Baris 58-77: Method ubah dengan parameter int a. Method ini berguna untuk
mengubah value parameter a.
Baris 79-89: Methood getNode dengan parameter int asal. Method ini berfungsi untuk
memindahkan node saaat ini ke node yang terhubung dengan node awal dan
mengembalikan jaraknya.
Class Astar:
Baris 7-32: Konstruktor kelas Astar untuk menambahkan nilai ke atribut as.
Baris 34-53:Method ubah dengan parameter int a untuk mengubah value dari
parameter a.
Baris 55-63: Method ceklist dengan parameter int array ko, dan int f. Method ini
berguna untuk mengecek apa jalur tersebut telah di lewati.
Baris 65-101: Method bintang dengan parameter int n. Method ini merupakan method
yang menjalankan algoritma A*.
Class Main:
Baris 4-7 : Method untuk menjalankan program.
Screenshot
C. Kesimpulan
1. Definisikan konsep dasar metode informed search menurut pemahaman anda!
Jawab:
Metode informed search merupakan metode yang memfokuskan pencarian pada
suatu informasi agar proses pencarian lebih efisien.