gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control system
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 950dc9f)
raw | patch | inline | side by side (parent: 950dc9f)
author | Ivan Pribela <ivanpribela@gmail.com> | |
Fri, 8 Dec 2017 20:06:43 +0000 (21:06 +0100) | ||
committer | Ivan Pribela <ivanpribela@gmail.com> | |
Fri, 8 Dec 2017 20:06:43 +0000 (21:06 +0100) |
diff --git a/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/Lavirint.java b/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/Lavirint.java
index 7f18f3f4eebcc6d52fde1b61cffcb50c51ed54ed..3947b39a7a88eae9c9436f591b1ef6d49e79b430 100644 (file)
*/\r
public class Lavirint {\r
\r
- // Polje m sadrzi kompletnu mapu\r
- private Mapa m;\r
+ // Polje m sadrzi kompletnu mapu\r
+ private Mapa m;\r
\r
- // Polje optResenje sluzi za pamcenje optimalnog resenja\r
- private Put optResenje;\r
+ // Polje optResenje sluzi za pamcenje optimalnog resenja\r
+ private Put optResenje;\r
\r
- // Ucitava mapu iz datog fajla i stampa je na ekran\r
- public Lavirint(String imeFajla) {\r
- m = new Mapa(imeFajla);\r
- m.stampaj();\r
- }\r
+ // Ucitava mapu iz datog fajla i stampa je na ekran\r
+ public Lavirint(String imeFajla) {\r
+ m = new Mapa(imeFajla);\r
+ m.stampaj();\r
+ }\r
\r
- // Provarava da li postoji put do izlaza i vraca vrednost true\r
- // ako postoji put ili vrednost false ako ne postoji\r
- public boolean postojiPut(int x, int y) {\r
- if (x < 0 || x >= m.getSirina() || y < 0 || y >= m.getVisina()) {\r
- return false;\r
- }\r
- if (m.getPos(x, y) == true) {\r
- return false;\r
- }\r
- if (m.getMat(x, y) == Mapa.ZID) {\r
- return false;\r
- }\r
- if (m.getMat(x, y) == Mapa.IZLAZ) {\r
- return true;\r
- }\r
- m.setPos(x, y, true);\r
- if (postojiPut(x + 1, y)) {\r
- return true;\r
- }\r
- if (postojiPut(x - 1, y)) {\r
- return true;\r
- }\r
- if (postojiPut(x, y + 1)) {\r
- return true;\r
- }\r
- if (postojiPut(x, y - 1)) {\r
- return true;\r
- }\r
- m.setPos(x, y, false);\r
- return false;\r
- }\r
+ // Provarava da li postoji put do izlaza i vraca vrednost true\r
+ // ako postoji put ili vrednost false ako ne postoji\r
+ public boolean postojiPut(int x, int y) {\r
+ if (x < 0 || x >= m.getSirina() || y < 0 || y >= m.getVisina()) {\r
+ return false;\r
+ }\r
+ if (m.getPos(x, y) == true) {\r
+ return false;\r
+ }\r
+ if (m.getMat(x, y) == Mapa.ZID) {\r
+ return false;\r
+ }\r
+ if (m.getMat(x, y) == Mapa.IZLAZ) {\r
+ return true;\r
+ }\r
+ m.setPos(x, y, true);\r
+ if (postojiPut(x + 1, y)) {\r
+ return true;\r
+ }\r
+ if (postojiPut(x - 1, y)) {\r
+ return true;\r
+ }\r
+ if (postojiPut(x, y + 1)) {\r
+ return true;\r
+ }\r
+ if (postojiPut(x, y - 1)) {\r
+ return true;\r
+ }\r
+ m.setPos(x, y, false);\r
+ return false;\r
+ }\r
\r
- // Poziva metodu rput da pronadje i ispise put, ako postoji\r
- // Ukoliko put ne postoji, ispisuje poruku o gresci\r
- public void nadjiPut(int x, int y) {\r
- if (!rput(x, y)) {\r
- System.err.println("Ne postoji put");\r
- }\r
- }\r
+ // Poziva metodu rput da pronadje i ispise put, ako postoji\r
+ // Ukoliko put ne postoji, ispisuje poruku o gresci\r
+ public void nadjiPut(int x, int y) {\r
+ if (!rput(x, y)) {\r
+ System.err.println("Ne postoji put");\r
+ }\r
+ }\r
\r
- // Proverava da li postoji put korsiteci pretrazivanje sa vracanjem\r
- // Ukoliko se pronadje izlaz iz lavirinta, stampa se put u obrnutom\r
- // redosledu\r
- // Put se stampa pri povratku iz rekurzije\r
- private boolean rput(int x, int y) {\r
- if (x < 0 || x >= m.getSirina() || y < 0 || y >= m.getVisina()) {\r
- return false;\r
- }\r
- if (m.getPos(x, y)) {\r
- return false;\r
- }\r
- if (m.getMat(x, y) == Mapa.ZID) {\r
- return false;\r
- }\r
- if (m.getMat(x, y) == Mapa.IZLAZ) {\r
- System.out.println(x + " " + y);\r
- return true;\r
- }\r
- m.setPos(x, y, true);\r
- if (rput(x + 1, y) || rput(x, y + 1) || rput(x, y - 1)\r
- || rput(x - 1, y)) {\r
- System.out.println(x + " " + y);\r
- return true;\r
- }\r
- m.setPos(x, y, false);\r
- return false;\r
- }\r
+ // Proverava da li postoji put korsiteci pretrazivanje sa vracanjem\r
+ // Ukoliko se pronadje izlaz iz lavirinta, stampa se put u obrnutom\r
+ // redosledu\r
+ // Put se stampa pri povratku iz rekurzije\r
+ private boolean rput(int x, int y) {\r
+ if (x < 0 || x >= m.getSirina() || y < 0 || y >= m.getVisina()) {\r
+ return false;\r
+ }\r
+ if (m.getPos(x, y)) {\r
+ return false;\r
+ }\r
+ if (m.getMat(x, y) == Mapa.ZID) {\r
+ return false;\r
+ }\r
+ if (m.getMat(x, y) == Mapa.IZLAZ) {\r
+ System.out.println(x + " " + y);\r
+ return true;\r
+ }\r
+ m.setPos(x, y, true);\r
+ if (rput(x + 1, y) || rput(x, y + 1) || rput(x, y - 1)\r
+ || rput(x - 1, y)) {\r
+ System.out.println(x + " " + y);\r
+ return true;\r
+ }\r
+ m.setPos(x, y, false);\r
+ return false;\r
+ }\r
\r
- // Kreira optimalno resenje za put, pri cemu se za optimalnost resenja\r
- // koristi komparator po duzini resenja, tj. trazi se najkrace resenje\r
- // Samo resenje kreira se u metodi optPut\r
- public Put najkraciPut(int x, int y) {\r
- Put r = new Put();\r
- optPut(x, y, r, new KomparatorPoDuzini());\r
- return optResenje;\r
- }\r
+ // Kreira optimalno resenje za put, pri cemu se za optimalnost resenja\r
+ // koristi komparator po duzini resenja, tj. trazi se najkrace resenje\r
+ // Samo resenje kreira se u metodi optPut\r
+ public Put najkraciPut(int x, int y) {\r
+ Put r = new Put();\r
+ optPut(x, y, r, new KomparatorPoDuzini());\r
+ return optResenje;\r
+ }\r
\r
- // Kreira optimalno resenje za put, pri cemu se za optimalnost resenja\r
- // koristi komparator po duzini resenja, tj. trazi se najvrednije resenje\r
- // Samo resenje kreira se u metodi optPut\r
- public Put najvrednijiPut(int x, int y) {\r
- Put trenutni = new Put();\r
- optPut(x, y, trenutni, new KomparatorPoVredosti());\r
- return optResenje;\r
- }\r
+ // Kreira optimalno resenje za put, pri cemu se za optimalnost resenja\r
+ // koristi komparator po duzini resenja, tj. trazi se najvrednije resenje\r
+ // Samo resenje kreira se u metodi optPut\r
+ public Put najvrednijiPut(int x, int y) {\r
+ Put trenutni = new Put();\r
+ optPut(x, y, trenutni, new KomparatorPoVredosti());\r
+ return optResenje;\r
+ }\r
\r
- // Proverava da li postoji put korsiteci pretrazivanje sa vracanjem\r
- // Ukoliko se pronadje na prvi ili optimalniji put, taj put se pamti u\r
- // optResenje\r
- // Optimalnost puta se proverava komparatorom\r
- private void optPut(int x, int y, Put trenutni, Comparator<Put> c) {\r
- if (x < 0 || x >= m.getSirina() || y < 0 || y >= m.getVisina()) {\r
- return;\r
- }\r
- if (m.getPos(x, y)) {\r
- return;\r
- }\r
- if (m.getMat(x, y) == Mapa.ZID) {\r
- return;\r
- }\r
- if (m.getMat(x, y) == Mapa.IZLAZ) {\r
- trenutni.dodaj(x, y, 0);\r
- if (optResenje == null || c.compare(trenutni, optResenje) < 0) {\r
- optResenje = new Put(trenutni);\r
- }\r
- trenutni.izbaciKraj();\r
- return;\r
- }\r
+ // Proverava da li postoji put korsiteci pretrazivanje sa vracanjem\r
+ // Ukoliko se pronadje na prvi ili optimalniji put, taj put se pamti u\r
+ // optResenje\r
+ // Optimalnost puta se proverava komparatorom\r
+ private void optPut(int x, int y, Put trenutni, Comparator<Put> c) {\r
+ if (x < 0 || x >= m.getSirina() || y < 0 || y >= m.getVisina()) {\r
+ return;\r
+ }\r
+ if (m.getPos(x, y)) {\r
+ return;\r
+ }\r
+ if (m.getMat(x, y) == Mapa.ZID) {\r
+ return;\r
+ }\r
+ if (m.getMat(x, y) == Mapa.IZLAZ) {\r
+ trenutni.dodaj(x, y, 0);\r
+ if (optResenje == null || c.compare(trenutni, optResenje) < 0) {\r
+ optResenje = new Put(trenutni);\r
+ }\r
+ trenutni.izbaciKraj();\r
+ return;\r
+ }\r
\r
- // pokusavamo da trazimo dalje put\r
- m.setPos(x, y, true);\r
- trenutni.dodaj(x, y, m.getMat(x, y));\r
- optPut(x + 1, y, trenutni, c);\r
- optPut(x, y + 1, trenutni, c);\r
- optPut(x, y - 1, trenutni, c);\r
- optPut(x - 1, y, trenutni, c);\r
- m.setPos(x, y, false);\r
- trenutni.izbaciKraj();\r
- }\r
+ // pokusavamo da trazimo dalje put\r
+ m.setPos(x, y, true);\r
+ trenutni.dodaj(x, y, m.getMat(x, y));\r
+ optPut(x + 1, y, trenutni, c);\r
+ optPut(x, y + 1, trenutni, c);\r
+ optPut(x, y - 1, trenutni, c);\r
+ optPut(x - 1, y, trenutni, c);\r
+ m.setPos(x, y, false);\r
+ trenutni.izbaciKraj();\r
+ }\r
}\r
\r
// Komparator za puteve po duzini resenja\r
class KomparatorPoDuzini implements Comparator<Put> {\r
- public int compare(Put r1, Put r2) {\r
- return r1.getLength() - r2.getLength();\r
- }\r
+ public int compare(Put r1, Put r2) {\r
+ return r1.getLength() - r2.getLength();\r
+ }\r
}\r
\r
// Komparator za puteve po vrednosti resenja\r
class KomparatorPoVredosti implements Comparator<Put> {\r
- public int compare(Put r1, Put r2) {\r
- return r2.getVrednost() - r1.getVrednost();\r
- }\r
+ public int compare(Put r1, Put r2) {\r
+ return r2.getVrednost() - r1.getVrednost();\r
+ }\r
}\r
diff --git a/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/LavirintProgram.java b/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/LavirintProgram.java
index 328f62ca2247c8e0b096ad1eeaf3021dd574e9cd..0edaac842c7d3ed75413cccd732f3a1e3b1caa79 100644 (file)
/**\r
* Program za nalazenje puta u lavirintu.\r
- * \r
+ *\r
* Date su cetiri varijante problema, od jednostavnijih ka slozenijima, radi\r
* ilustracije osnovnih koncepata i postepenog uvodjenja novih.\r
- * \r
+ *\r
* Najjednostavnije je samo nalazenje da li put postoji.\r
- * \r
+ *\r
* Prosirenje tog resenja nam ispisuje taj nadjeni put.\r
- * \r
+ *\r
* Treca varijanta nalazi sve puteve i medju njima bira najkraci.\r
- * \r
+ *\r
* Cetvrta varijanta resava lavirint u kome su rasuti zlatnici na poljima i\r
* nalazi put na kome se kupi najvise zlatnika.\r
*/\r
-\r
public class LavirintProgram {\r
\r
- public static void main(String[] args) {\r
- Svetovid.out.println("Unesite ime fajla: ");\r
- String fajl = Svetovid.in.readLine();\r
- if (!Svetovid.testIn(fajl)) {\r
- System.out.println("Greska: nema fajla!");\r
- return;\r
- }\r
+ public static void main(String[] args) {\r
+ Svetovid.out.println("Unesite ime fajla: ");\r
+ String fajl = Svetovid.in.readLine();\r
+ if (!Svetovid.testIn(fajl)) {\r
+ System.out.println("Greska: nema fajla!");\r
+ return;\r
+ }\r
\r
- System.out.println("1 - da li postoji put");\r
- System.out.println("2 - ispis nekog puta (ako postoji)");\r
- System.out.println("3 - nalazenje najkraceg puta");\r
- System.out.println("4 - nalazenje najvrednijeg puta");\r
- System.out.println("Unesite izbor 1-4:");\r
- int op = Svetovid.in.readInt();\r
+ System.out.println("1 - da li postoji put");\r
+ System.out.println("2 - ispis nekog puta (ako postoji)");\r
+ System.out.println("3 - nalazenje najkraceg puta");\r
+ System.out.println("4 - nalazenje najvrednijeg puta");\r
+ System.out.println("Unesite izbor 1-4:");\r
+ int op = Svetovid.in.readInt();\r
\r
- Lavirint lavirint = new Lavirint(fajl);\r
- Put put;\r
+ Lavirint lavirint = new Lavirint(fajl);\r
+ Put put;\r
\r
- if (lavirint != null) {\r
+ if (lavirint != null) {\r
\r
- switch (op) {\r
- case 1:\r
- if (lavirint.postojiPut(0, 0)) {\r
- System.out.println("Postoji put");\r
- } else {\r
- System.out.println("Ne postoji put");\r
- }\r
- break;\r
- case 2:\r
- lavirint.nadjiPut(0, 0);\r
- break;\r
- case 3:\r
- put = lavirint.najkraciPut(0, 0);\r
- if (put != null) {\r
- put.stampaj();\r
- } else {\r
- System.out.println("Ne postoji put");\r
- }\r
- break;\r
- case 4:\r
- put = lavirint.najvrednijiPut(0, 0);\r
- if (put != null) {\r
- put.stampaj();\r
- } else {\r
- System.out.println("Ne postoji put");\r
- }\r
- break;\r
- default:\r
- System.err.println("Uneli ste pogresan izbor");\r
- }\r
- }\r
- }\r
-}
\ No newline at end of file
+ switch (op) {\r
+ case 1:\r
+ if (lavirint.postojiPut(0, 0)) {\r
+ System.out.println("Postoji put");\r
+ } else {\r
+ System.out.println("Ne postoji put");\r
+ }\r
+ break;\r
+ case 2:\r
+ lavirint.nadjiPut(0, 0);\r
+ break;\r
+ case 3:\r
+ put = lavirint.najkraciPut(0, 0);\r
+ if (put != null) {\r
+ put.stampaj();\r
+ } else {\r
+ System.out.println("Ne postoji put");\r
+ }\r
+ break;\r
+ case 4:\r
+ put = lavirint.najvrednijiPut(0, 0);\r
+ if (put != null) {\r
+ put.stampaj();\r
+ } else {\r
+ System.out.println("Ne postoji put");\r
+ }\r
+ break;\r
+ default:\r
+ System.err.println("Uneli ste pogresan izbor");\r
+ }\r
+ }\r
+ }\r
+}\r
diff --git a/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/Mapa.java b/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/Mapa.java
index 091f37d8f8144fd353e663b0170d9ecf75ebcf97..a156601b92ae2392b1ee89826cfcdf1612f0f0fd 100644 (file)
-\r
/**\r
* Klasa Mapa koristi se za reprezentaciju lavirint i njegovih polja.\r
*/\r
public class Mapa {\r
\r
- // Vrednosti polja i njihova znacenja\r
- public final static int IZLAZ = -5;\r
- public final static int ZID = -1;\r
- public final static int GRESKA = Integer.MIN_VALUE;\r
+ // Vrednosti polja i njihova znacenja\r
+ public final static int IZLAZ = -5;\r
+ public final static int ZID = -1;\r
+ public final static int GRESKA = Integer.MIN_VALUE;\r
+\r
+ // Dimenzije mape\r
+ private int visina, sirina;\r
+\r
+ // Polja mape\r
+ private int[][] mat;\r
\r
- // Dimenzije mape\r
- private int visina, sirina;\r
- \r
- // Polja mape\r
- private int[][] mat;\r
+ // Prilikom pretrazivanja ovde mozemo pamtiti koja polja smo posetili a koja nismo\r
+ private boolean[][] pos;\r
\r
- // Prilikom pretrazivanja ovde mozemo pamtiti koja polja smo posetili a koja nismo\r
- private boolean[][] pos;\r
+ public int getSirina() {\r
+ return sirina;\r
+ }\r
\r
- public int getSirina() {\r
- return sirina;\r
- }\r
+ public int getVisina() {\r
+ return visina;\r
+ }\r
\r
- public int getVisina() {\r
- return visina;\r
- }\r
+ public void setPos(int x, int y, boolean b) {\r
+ if (0 <= x && x < sirina && 0 <= y && y < visina) {\r
+ pos[x][y] = b;\r
+ }\r
+ }\r
\r
- public void setPos(int x, int y, boolean b) {\r
- if (0 <= x && x < sirina && 0 <= y && y < visina) {\r
- pos[x][y] = b;\r
- }\r
- }\r
+ public boolean getPos(int x, int y) {\r
+ if (0 <= x && x < sirina && 0 <= y && y < visina) {\r
+ return pos[x][y];\r
+ } else {\r
+ return true;\r
+ }\r
+ }\r
\r
- public boolean getPos(int x, int y) {\r
- if (0 <= x && x < sirina && 0 <= y && y < visina) {\r
- return pos[x][y];\r
- } else {\r
- return true;\r
- }\r
- }\r
+ public int getMat(int x, int y) {\r
+ if (0 <= x && x < sirina && 0 <= y && y < visina) {\r
+ return mat[x][y];\r
+ } else {\r
+ return GRESKA;\r
+ }\r
+ }\r
\r
- public int getMat(int x, int y) {\r
- if (0 <= x && x < sirina && 0 <= y && y < visina) {\r
- return mat[x][y];\r
- } else {\r
- return GRESKA;\r
- }\r
- }\r
+ public Mapa(int sirina, int visina) {\r
+ this.sirina = sirina;\r
+ this.visina = visina;\r
+ mat = new int[sirina][visina];\r
+ pos = new boolean[sirina][visina];\r
+ }\r
\r
- public Mapa(int sirina, int visina) {\r
- this.sirina = sirina;\r
- this.visina = visina;\r
- mat = new int[sirina][visina];\r
- pos = new boolean[sirina][visina];\r
- }\r
+ public Mapa(String imeFajla) {\r
+ if (!Svetovid.testIn(imeFajla)) {\r
+ throw new RuntimeException("Fajl za kreiranje mape (" + imeFajla + ") nije prisupacan");\r
+ }\r
+ sirina = Svetovid.in(imeFajla).readInt();\r
+ visina = Svetovid.in(imeFajla).readInt();\r
+ mat = new int[sirina][visina];\r
+ pos = new boolean[sirina][visina];\r
+ for (int j = 0; j < visina; j++) {\r
+ for (int i = 0; i < sirina; i++) {\r
+ mat[i][j] = Svetovid.in(imeFajla).readInt();\r
+ }\r
+ }\r
+ Svetovid.closeIn(imeFajla);\r
+ Prikaz.boja(ZID, Prikaz.CRNA, null);\r
+ Prikaz.boja(IZLAZ, Prikaz.CRVENA, Prikaz.BELA);\r
+ Prikaz.boja(1, 20, Prikaz.SVETLO_ZELENA, Prikaz.ZELENA, Prikaz.CRNA);\r
+ Prikaz.boja(99, Prikaz.ZUTA, Prikaz.CRNA);\r
+ Prikaz.mapa("Lavirint", getSirina(), getVisina(), this::getMat);\r
+ }\r
\r
- public Mapa(String imeFajla) {\r
- if (!Svetovid.testIn(imeFajla)) {\r
- throw new RuntimeException("Fajl za kreiranje mape (" + imeFajla + ") nije prisupacan");\r
- }\r
- sirina = Svetovid.in(imeFajla).readInt();\r
- visina = Svetovid.in(imeFajla).readInt();\r
- mat = new int[sirina][visina];\r
- pos = new boolean[sirina][visina];\r
- for (int j = 0; j < visina; j++) {\r
- for (int i = 0; i < sirina; i++) {\r
- mat[i][j] = Svetovid.in(imeFajla).readInt();\r
- }\r
- }\r
- Svetovid.closeIn(imeFajla);\r
- Prikaz.boja(ZID, Prikaz.CRNA, null);\r
- Prikaz.boja(IZLAZ, Prikaz.CRVENA, Prikaz.BELA);\r
- Prikaz.boja(1, 20, Prikaz.SVETLO_ZELENA, Prikaz.ZELENA, Prikaz.CRNA);\r
- Prikaz.boja(99, Prikaz.ZUTA, Prikaz.CRNA);\r
- Prikaz.mapa("Lavirint", getSirina(), getVisina(), this::getMat);\r
- }\r
+ public void stampaj() {\r
+ if (visina != 0 && sirina != 0) {\r
+ System.out.println();\r
+ System.out.println("Mapa sirine " + sirina + " i visine " + visina);\r
+ for (int j = 0; j < visina; j++) {\r
+ for (int i = 0; i < sirina; i++) {\r
+ System.out.printf("%5d", mat[i][j]);\r
+ }\r
+ System.out.println();\r
+ }\r
+ }\r
+ }\r
\r
- public void stampaj() {\r
- if (visina != 0 && sirina != 0) {\r
- System.out.println();\r
- System.out.println("Mapa sirine " + sirina + " i visine " + visina);\r
- for (int j = 0; j < visina; j++) {\r
- for (int i = 0; i < sirina; i++) {\r
- System.out.printf("%5d", mat[i][j]);\r
- }\r
- System.out.println();\r
- }\r
- }\r
- }\r
- \r
- public String toString() {\r
- return "Mapa velicine " + sirina + " x " + visina;\r
- }\r
+ public String toString() {\r
+ return "Mapa velicine " + sirina + " x " + visina;\r
+ }\r
}\r
diff --git a/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/Polje.java b/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/Polje.java
index 15676d1a300ae7afa640f15d8194e57cf234cea6..c0dbb15bb3441c70a698da9c5fd5445fc1859c24 100644 (file)
*/\r
public class Polje {\r
\r
- private final int x, y, v;\r
+ private final int x, y, v;\r
\r
- public Polje(int x, int y, int v) {\r
- this.x = x;\r
- this.y = y;\r
- this.v = v;\r
- }\r
+ public Polje(int x, int y, int v) {\r
+ this.x = x;\r
+ this.y = y;\r
+ this.v = v;\r
+ }\r
\r
- public int getX() {\r
- return x;\r
- }\r
+ public int getX() {\r
+ return x;\r
+ }\r
\r
- public int getY() {\r
- return y;\r
- }\r
+ public int getY() {\r
+ return y;\r
+ }\r
\r
- public int getV() {\r
- return v;\r
- }\r
+ public int getV() {\r
+ return v;\r
+ }\r
\r
- public String toString() {\r
- return "(" + x + ", " + y + ") " + v;\r
- }\r
+ public String toString() {\r
+ return "(" + x + ", " + y + ") " + v;\r
+ }\r
}\r
diff --git a/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/Put.java b/PretrazivanjeSaVracanjem/Lavirint/SuperKomplikovanoResenje/Put.java
index 9ecf9a1e655c7be5e1b30773e1ad8c344f1925f0..c6bdda89a9682f967b5b55265d39b0913711ae07 100644 (file)
*/\r
public class Put {\r
\r
- // Pamtimo sva polja na putu\r
- private ArrayList<Polje> polja;\r
-\r
- // Dodato da se omoguci pristup poljima puta "od spolja" (za proveru kvaliteta puta na primer),\r
- // ali tako da ne moze da se utice na sam sadrzaj te liste\r
- private List<Polje> nepromenljivaListaPolja;\r
-\r
- // Potrebno za graficki prikaz\r
- private String naziv;\r
-\r
- // Potrebno za graficki prikaz\r
- private Put(String naziv, Color boja) {\r
- polja = new ArrayList<Polje>();\r
- nepromenljivaListaPolja = Collections.unmodifiableList(polja);\r
- this.naziv = naziv;\r
- Prikaz.put(naziv, polja, Polje::getX, Polje::getY, this::toString, boja);\r
- }\r
-\r
- // Kreira novo prazno resenje\r
- public Put() {\r
- this("Trenutni", Prikaz.TIRKIZNA);\r
- }\r
-\r
- // Kreira novo resenje sa istim sadrzajem kao original\r
- public Put(Put original) {\r
- this("Optimalan", Prikaz.LJUBICASTA);\r
- polja.addAll(original.polja);\r
- }\r
-\r
- // Dodaje polje u resenje\r
- public void dodaj(int x, int y, int v) {\r
- polja.add(new Polje(x, y, v));\r
- Prikaz.osveziPut(naziv);\r
- }\r
-\r
- // Izbacuje poslednje polje iz puta\r
- public void izbaciKraj() {\r
- if (getLength() > 0) {\r
- polja.remove(getLength() - 1);\r
- Prikaz.osveziPut(naziv);\r
- } else {\r
- throw new IllegalStateException("Resenje je vec prazno");\r
- }\r
- }\r
-\r
- // Stampa put\r
- public void stampaj() {\r
- System.out.println();\r
- System.out.println("Put duzine " + getLength() + " i vrednosti " + getVrednost());\r
- for (int i = 0; i < getLength(); i++) {\r
- System.out.println(polja.get(i));\r
- }\r
- Prikaz.put("Trenutni", null, null, null);\r
- Prikaz.put("Optimalan", null, null, null);\r
- Prikaz.put("Najbolji", polja, Polje::getX, Polje::getY, this::toString, Prikaz.LJUBICASTA);\r
- }\r
-\r
- public String toString() {\r
- return getVrednost() + "\u20ac " + getLength() + "m";\r
- }\r
-\r
- // Vraca duzinu puta\r
- public int getLength() {\r
- return polja.size();\r
- }\r
-\r
- // Vraca i-to polje na putu\r
- // Ne koristi se u ovoj verziji zadatka. Moze se koristiti za proveru kvaliteta resenja\r
- public Polje getPolje(int i) {\r
- return polja.get(i);\r
- }\r
-\r
- // Vraca sva polja na putu\r
- // Ne koristi se u ovoj verziji zadatka. Moze se koristiti za proveru kvaliteta resenja\r
- public List<Polje> getPolja() {\r
- return nepromenljivaListaPolja;\r
- }\r
-\r
- // Vraca vrednost puta\r
- // Vrednost se definise kao zbir svih vrednosti polja na putu\r
- public int getVrednost() {\r
- int rez = 0;\r
- for (Polje p : polja) {\r
- rez = rez + p.getV();\r
- }\r
- return rez;\r
- }\r
+ // Pamtimo sva polja na putu\r
+ private ArrayList<Polje> polja;\r
+\r
+ // Dodato da se omoguci pristup poljima puta "od spolja" (za proveru kvaliteta puta na primer),\r
+ // ali tako da ne moze da se utice na sam sadrzaj te liste\r
+ private List<Polje> nepromenljivaListaPolja;\r
+\r
+ // Potrebno za graficki prikaz\r
+ private String naziv;\r
+\r
+ // Potrebno za graficki prikaz\r
+ private Put(String naziv, Color boja) {\r
+ polja = new ArrayList<Polje>();\r
+ nepromenljivaListaPolja = Collections.unmodifiableList(polja);\r
+ this.naziv = naziv;\r
+ Prikaz.put(naziv, polja, Polje::getX, Polje::getY, this::toString, boja);\r
+ }\r
+\r
+ // Kreira novo prazno resenje\r
+ public Put() {\r
+ this("Trenutni", Prikaz.TIRKIZNA);\r
+ }\r
+\r
+ // Kreira novo resenje sa istim sadrzajem kao original\r
+ public Put(Put original) {\r
+ this("Optimalan", Prikaz.LJUBICASTA);\r
+ polja.addAll(original.polja);\r
+ }\r
+\r
+ // Dodaje polje u resenje\r
+ public void dodaj(int x, int y, int v) {\r
+ polja.add(new Polje(x, y, v));\r
+ Prikaz.osveziPut(naziv);\r
+ }\r
+\r
+ // Izbacuje poslednje polje iz puta\r
+ public void izbaciKraj() {\r
+ if (getLength() > 0) {\r
+ polja.remove(getLength() - 1);\r
+ Prikaz.osveziPut(naziv);\r
+ } else {\r
+ throw new IllegalStateException("Resenje je vec prazno");\r
+ }\r
+ }\r
+\r
+ // Stampa put\r
+ public void stampaj() {\r
+ System.out.println();\r
+ System.out.println("Put duzine " + getLength() + " i vrednosti " + getVrednost());\r
+ for (int i = 0; i < getLength(); i++) {\r
+ System.out.println(polja.get(i));\r
+ }\r
+ Prikaz.put("Trenutni", null, null, null);\r
+ Prikaz.put("Optimalan", null, null, null);\r
+ Prikaz.put("Najbolji", polja, Polje::getX, Polje::getY, this::toString, Prikaz.LJUBICASTA);\r
+ }\r
+\r
+ public String toString() {\r
+ return getVrednost() + "\u20ac " + getLength() + "m";\r
+ }\r
+\r
+ // Vraca duzinu puta\r
+ public int getLength() {\r
+ return polja.size();\r
+ }\r
+\r
+ // Vraca i-to polje na putu\r
+ // Ne koristi se u ovoj verziji zadatka. Moze se koristiti za proveru kvaliteta resenja\r
+ public Polje getPolje(int i) {\r
+ return polja.get(i);\r
+ }\r
+\r
+ // Vraca sva polja na putu\r
+ // Ne koristi se u ovoj verziji zadatka. Moze se koristiti za proveru kvaliteta resenja\r
+ public List<Polje> getPolja() {\r
+ return nepromenljivaListaPolja;\r
+ }\r
+\r
+ // Vraca vrednost puta\r
+ // Vrednost se definise kao zbir svih vrednosti polja na putu\r
+ public int getVrednost() {\r
+ int rez = 0;\r
+ for (Polje p : polja) {\r
+ rez = rez + p.getV();\r
+ }\r
+ return rez;\r
+ }\r
}\r