From: Doni Pracner Date: Tue, 5 Dec 2017 14:51:08 +0000 (+0100) Subject: Laviritn, Objedinjeno resenje, doterivanja X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-materijali.git;a=commitdiff_plain;h=1b832014e4d2d31b2502f4688623140d722005b1 Laviritn, Objedinjeno resenje, doterivanja Klasa Resenje je preimenovana u Put, posto je tako logicnije. U skladu sa tim su menjani i neki komentari i neka imena promenljivih i slicno. --- diff --git a/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Lavirint.java b/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Lavirint.java index 77069ae..5b84e5a 100644 --- a/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Lavirint.java +++ b/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Lavirint.java @@ -12,7 +12,7 @@ public class Lavirint { private Mapa m; // Polje optResenje sluzi za pamcenje optimalnog resenja - private Resenje optResenje; + private Put optResenje; // Ucitava mapu iz datog fajla i stampa je na ekran Lavirint(String imeFajla) { @@ -91,8 +91,8 @@ public class Lavirint { // Kreira optimalno resenje za put, pri cemu se za optimalnost resenja // koristi komparator po duzini resenja, tj. trazi se najkrace resenje // Samo resenje kreira se u metodi optPut - public Resenje najkraciPut(int x, int y) { - Resenje r = new Resenje(); + public Put najkraciPut(int x, int y) { + Put r = new Put(); optPut(x, y, r, new KomparatorPoDuzini()); return optResenje; } @@ -100,17 +100,17 @@ public class Lavirint { // Kreira optimalno resenje za put, pri cemu se za optimalnost resenja // koristi komparator po duzini resenja, tj. trazi se najvrednije resenje // Samo resenje kreira se u metodi optPut - public Resenje najvrednijiPut(int x, int y) { - Resenje r = new Resenje(); - optPut(x, y, r, new KomparatorPoVredosti()); + public Put najvrednijiPut(int x, int y) { + Put trenutni = new Put(); + optPut(x, y, trenutni, new KomparatorPoVredosti()); return optResenje; } // Proverava da li postoji put korsiteci pretrazivanje sa vracanjem // Ukoliko se pronadje na prvi ili optimalniji put, taj put se pamti u // optResenje - // Optimalnost resenja se proverava komparatorom - private void optPut(int x, int y, Resenje r, Comparator c) { + // Optimalnost puta se proverava komparatorom + private void optPut(int x, int y, Put trenutni, Comparator c) { if (x < 0 || x >= m.getSirina() || y < 0 || y >= m.getVisina()) { return; } @@ -121,36 +121,36 @@ public class Lavirint { return; } if (m.getMat(x, y) == Mapa.IZLAZ) { - r.dodaj(x, y, 0); - if (optResenje == null || c.compare(r, optResenje) < 0) { - optResenje = new Resenje(r); + trenutni.dodaj(x, y, 0); + if (optResenje == null || c.compare(trenutni, optResenje) < 0) { + optResenje = new Put(trenutni); } - r.izbaciKraj(); + trenutni.izbaciKraj(); return; } // pokusavamo da trazimo dalje put m.setPos(x, y, true); - r.dodaj(x, y, m.getMat(x, y)); - optPut(x + 1, y, r, c); - optPut(x, y + 1, r, c); - optPut(x, y - 1, r, c); - optPut(x - 1, y, r, c); + trenutni.dodaj(x, y, m.getMat(x, y)); + optPut(x + 1, y, trenutni, c); + optPut(x, y + 1, trenutni, c); + optPut(x, y - 1, trenutni, c); + optPut(x - 1, y, trenutni, c); m.setPos(x, y, false); - r.izbaciKraj(); + trenutni.izbaciKraj(); } } -// Komparator za resenja po duzini resenja -class KomparatorPoDuzini implements Comparator { - public int compare(Resenje r1, Resenje r2) { +// Komparator za puteve po duzini resenja +class KomparatorPoDuzini implements Comparator { + public int compare(Put r1, Put r2) { return r1.getLength() - r2.getLength(); } } -// Komparator za resenja po vrednosti resenja -class KomparatorPoVredosti implements Comparator { - public int compare(Resenje r1, Resenje r2) { +// Komparator za puteve po vrednosti resenja +class KomparatorPoVredosti implements Comparator { + public int compare(Put r1, Put r2) { return r2.getVrednost() - r1.getVrednost(); } } diff --git a/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/LavirintProgram.java b/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/LavirintProgram.java index 6566938..01adf52 100644 --- a/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/LavirintProgram.java +++ b/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/LavirintProgram.java @@ -25,7 +25,7 @@ public class LavirintProgram { } Lavirint l = new Lavirint(fajl); - Resenje r; + Put r; if (l != null) { System.out.println("1 - da li postoji put"); diff --git a/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Put.java b/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Put.java new file mode 100644 index 0000000..e942883 --- /dev/null +++ b/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Put.java @@ -0,0 +1,98 @@ +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javafx.scene.paint.Color; + +/** + * Klasa Put koristi se za pamcenje puta kroz mapu. + */ +public class Put { + + // Pamtimo sva polja na putu + private ArrayList polja; + + // Dodato da se omoguci pristup poljima puta "od spolja" (za proveru kvaliteta puta na primer), + // ali tako da ne moze da se utice na sam sadrzaj te liste + private List nepromenljivaListaPolja; + + // Potrebno za graficki prikaz + private String naziv; + + // Potrebno za graficki prikaz + private Put(String naziv, Color boja) { + polja = new ArrayList(); + nepromenljivaListaPolja = Collections.unmodifiableList(polja); + this.naziv = naziv; + Prikaz.put(naziv, polja, Polje::getX, Polje::getY, this::toString, boja); + } + + // Kreira novo prazno resenje + public Put() { + this("Trenutni", Prikaz.TIRKIZNA); + } + + // Kreira novo resenje sa istim sadrzajem kao original + public Put(Put original) { + this("Optimalan", Prikaz.LJUBICASTA); + polja.addAll(original.polja); + } + + // Dodaje polje u resenje + public void dodaj(int x, int y, int v) { + polja.add(new Polje(x, y, v)); + Prikaz.osveziPut(naziv); + } + + // Izbacuje poslednje polje iz puta + public void izbaciKraj() { + if (getLength() > 0) { + polja.remove(getLength() - 1); + Prikaz.osveziPut(naziv); + } else { + throw new IllegalStateException("Resenje je vec prazno"); + } + } + + // Stampa put + public void stampaj() { + System.out.println(getLength()); + for (int i = 0; i < getLength(); i++) { + System.out.println(polja.get(i)); + } + Prikaz.put("Trenutni", null, null, null); + Prikaz.put("Optimalan", null, null, null); + Prikaz.put("Najbolji", polja, Polje::getX, Polje::getY, this::toString, Prikaz.LJUBICASTA); + } + + public String toString() { + return getVrednost() + "\u20ac " + getLength() + "m"; + } + + // Vraca duzinu puta + public int getLength() { + return polja.size(); + } + + // Vraca i-to polje na putu + // Ne koristi se u ovoj verziji zadatka. Moze se koristiti za proveru kvaliteta resenja + public Polje getPolje(int i) { + return polja.get(i); + } + + // Vraca sva polja na putu + // Ne koristi se u ovoj verziji zadatka. Moze se koristiti za proveru kvaliteta resenja + public List getPolja() { + return nepromenljivaListaPolja; + } + + // Vraca vrednost puta + // Vrednost se definise kao zbir svih vrednosti polja na putu + public int getVrednost() { + int rez = 0; + for (Polje p : polja) { + rez = rez + p.getV(); + } + return rez; + } +} diff --git a/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Resenje.java b/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Resenje.java deleted file mode 100644 index dbabd6d..0000000 --- a/PretrazivanjeSaVracanjem/Lavirint/ObjedinjenoResenje/Resenje.java +++ /dev/null @@ -1,98 +0,0 @@ -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javafx.scene.paint.Color; - -/** - * Klasa Resenje koristi se za pamcenje puta kroz mapu. - */ -public class Resenje { - - // Pamtimo sva polja na putu - private ArrayList polja; - - // Dodato da se omoguci pristup poljima resenja "od spolja" (za proveru kvaliteta puta na primer), - // ali tako da ne moze da se utice na sam sadrzaj te liste - private List nepromenljivaListaPolja; - - // Potrebno za graficki prikaz - private String naziv; - - // Potrebno za graficki prikaz - private Resenje(String naziv, Color boja) { - polja = new ArrayList(); - nepromenljivaListaPolja = Collections.unmodifiableList(polja); - this.naziv = naziv; - Prikaz.put(naziv, polja, Polje::getX, Polje::getY, this::toString, boja); - } - - // Kreira novo prazno resenje - public Resenje() { - this("Trenutni", Prikaz.TIRKIZNA); - } - - // Kreira novo resenje sa istim sadrzajem kao original - public Resenje(Resenje original) { - this("Optimalan", Prikaz.LJUBICASTA); - polja.addAll(original.polja); - } - - // Dodaje polje u resenje - public void dodaj(int x, int y, int v) { - polja.add(new Polje(x, y, v)); - Prikaz.osveziPut(naziv); - } - - // Izbacuje poslednje polje iz resenja - public void izbaciKraj() { - if (getLength() > 0) { - polja.remove(getLength() - 1); - Prikaz.osveziPut(naziv); - } else { - throw new IllegalStateException("Resenje je vec prazno"); - } - } - - // Stampa resenje - public void stampaj() { - System.out.println(getLength()); - for (int i = 0; i < getLength(); i++) { - System.out.println(polja.get(i)); - } - Prikaz.put("Trenutni", null, null, null); - Prikaz.put("Optimalan", null, null, null); - Prikaz.put("Najbolji", polja, Polje::getX, Polje::getY, this::toString, Prikaz.LJUBICASTA); - } - - public String toString() { - return getVrednost() + "\u20ac " + getLength() + "m"; - } - - // Vraca duzinu resenja - public int getLength() { - return polja.size(); - } - - // Vraca i-to polje na putu - // Ne koristi se u ovoj verziji zadatka. Moze se koristiti za proveru kvaliteta resenja - public Polje getPolje(int i) { - return polja.get(i); - } - - // Vraca sva polja na putu - // Ne koristi se u ovoj verziji zadatka. Moze se koristiti za proveru kvaliteta resenja - public List getPolja() { - return nepromenljivaListaPolja; - } - - // Vraca vrednost puta - // Vrednost se definise kao zbir svih vrednosti polja na putu - public int getVrednost() { - int rez = 0; - for (Polje p : polja) { - rez = rez + p.getV(); - } - return rez; - } -}