package soal;
import java.util.*;
public class JalurGreedy {
// arah: kanan, bawah, kiri, atas
static final int[] dBaris = {0,1,0,-1};
static final int[] dKolom = {1,0,-1,0};
static int[][] peta = {
{0,1,1,9,1},
{1,2,1,1,1},
{1,9,2,9,1},
{1,1,1,9,1},
{9,1,1,1,0}
};
static class Titik {
int baris, kolom;
Titik(int baris, int kolom){this.baris=baris;this.kolom=kolom;}
public String toString(){return "("+baris+","+kolom+")";}
}
public static void main(String[] args){
Titik awal = new Titik(0,0);
Titik tujuan = new Titik(4,4);
cariJalurGreedy(awal, tujuan);
}
static void cariJalurGreedy(Titik awal, Titik tujuan){
int jumlahBaris = peta.length, jumlahKolom = peta[0].length;
boolean[][] dikunjungi = new boolean[jumlahBaris][jumlahKolom];
int biaya = 0;
List<Titik> jalur = new ArrayList<>();
Titik sekarang = awal;
jalur.add(sekarang);
dikunjungi[sekarang.baris][sekarang.kolom] = true;
while(!(sekarang.baris==tujuan.baris && sekarang.kolom==tujuan.kolom)){
List<Titik> tetangga = new ArrayList<>();
for(int k=0;k<4;k++){
int nb = sekarang.baris + dBaris[k];
int nk = sekarang.kolom + dKolom[k];
if(nb<0 || nb>=jumlahBaris || nk<0 || nk>=jumlahKolom) continue;
if(peta[nb][nk]==9 || dikunjungi[nb][nk]) continue;
tetangga.add(new Titik(nb,nk));
}
if(tetangga.isEmpty()){
System.out.println("Algoritma Greedy gagal: jalan buntu.");
return;
}
// pilih tetangga dengan biaya paling kecil
Titik terbaik = tetangga.get(0);
for(Titik t: tetangga){
if(peta[t.baris][t.kolom] < peta[terbaik.baris][terbaik.kolom]){
terbaik = t;
}
}


0 komentar:
Posting Komentar