X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-materijali.git;a=blobdiff_plain;f=PretrazivanjeSaVracanjem%2FLavirint%2FNajboljiPut%2FResenje.java;h=ffb2622692d8a7ebe91b7eac5661e8accc9ebaeb;hp=e29f569c69956191cd1e910723b0264313abeadc;hb=5d2538154a96eacb64e24e362003bbe8c61711d7;hpb=d75e70fd4e3deb018ee29b445e9a8ff5e2b19487 diff --git a/PretrazivanjeSaVracanjem/Lavirint/NajboljiPut/Resenje.java b/PretrazivanjeSaVracanjem/Lavirint/NajboljiPut/Resenje.java index e29f569..ffb2622 100644 --- a/PretrazivanjeSaVracanjem/Lavirint/NajboljiPut/Resenje.java +++ b/PretrazivanjeSaVracanjem/Lavirint/NajboljiPut/Resenje.java @@ -11,62 +11,95 @@ import java.util.ArrayList; import java.util.List; import java.util.Collections; -public class Resenje implements Cloneable { - private ArrayList polja; +public class Resenje { + private ArrayList polja; + private List nepromenljivaListaPolja; - Resenje() { - polja = new ArrayList(); - } + public Resenje() { + polja = new ArrayList(); + nepromenljivaListaPolja = Collections.unmodifiableList(polja); + } + + /** + Pravi novo resenje sa istim sadrzajem kao original + */ + public Resenje(Resenje original) { + // pozovemo "podrazumevani" konstruktor + this(); + // iskopiramo sva polja iz originala + for (Polje p : original.getPolja()) { + dodaj(p.getX(), p.getY(), p.getV()); + } + } - // Dodaje pulje u resenje - public void dodaj(int x, int y, int v) { - polja.add(new Polje(x, y, v)); - } + // Dodaje pulje u resenje + public void dodaj(int x, int y, int v) { + polja.add(new Polje(x, y, v)); + } - // Izbacuje polje iz resenja - public void izbaciKraj() { - if (getLength() > 0) { - polja.remove(getLength() - 1); - } else { - System.err.println("greska: resenje je vec prazno"); - } - } + // Izbacuje polje iz resenja + public void izbaciKraj() { + if (getLength() > 0) { + polja.remove(getLength() - 1); + } else { + System.err.println("greska: 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)); - } + // Stampa resenje + public void stampaj() { + System.out.println(getLength()); + for (int i = 0; i < getLength(); i++) + System.out.println(polja.get(i)); + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Resenje: [ "); + if (getLength()>0) { + sb.append(polja.get(0)); + for (int i = 1; i < getLength(); i++) { + sb.append(", " + polja.get(i)); + } + } + sb.append(" ]"); + + return sb.toString(); + } - // Vraca duzinu resenja - public int getLength() { - return polja.size(); - } + // 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 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); + } - // Kreira klon od resenja - @Override - public Resenje clone() { - Resenje rez = new Resenje(); - for (Polje p : polja) { - rez.dodaj(p.getX(), p.getY(), p.getV()); - } - return rez; - } + // 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; - } + // Kreira nezavisnu kopiju ovog resenja + public Resenje kopija() { + Resenje rez = new Resenje(); + for (Polje p : polja) { + rez.dodaj(p.getX(), p.getY(), p.getV()); + } + return rez; + } + + // 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; + } }