gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Lavirint, objedinjeno resenje, doterana klasa Lavirint
[spa2-materijali.git] / PretrazivanjeSaVracanjem / Lavirint / ObjedinjenoResenje / Lavirint.java
index 4fd8f79..77069ae 100644 (file)
@@ -1,22 +1,22 @@
+import java.util.Comparator;\r
+\r
 /**\r
  * Klasa Lavirint sadrzi 3 javne i tri privatne metode za trazenje puteva.\r
- * \r
+ *\r
  * Klase KomparatorPoDuzini i KomparatorPoVrednosti predstavljaju komparatore\r
  * koji se korste pri trazenju najkraceg i najvrednijeg puta.\r
  */\r
-\r
-import java.util.Comparator;\r
-\r
 public class Lavirint {\r
 \r
        // Polje m sadrzi kompletnu mapu\r
        private Mapa m;\r
+\r
        // Polje optResenje sluzi za pamcenje optimalnog resenja\r
        private Resenje optResenje;\r
 \r
        // Ucitava mapu iz datog fajla i stampa je na ekran\r
        Lavirint(String imeFajla) {\r
-               m = Mapa.ucitajIzFajla(imeFajla);\r
+               m = new Mapa(imeFajla);\r
                m.stampaj();\r
        }\r
 \r
@@ -34,23 +34,22 @@ public class Lavirint {
                }\r
                if (m.getMat(x, y) == Mapa.IZLAZ) {\r
                        return true;\r
-               } else {\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
+               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
@@ -78,16 +77,15 @@ public class Lavirint {
                if (m.getMat(x, y) == Mapa.IZLAZ) {\r
                        System.out.println(x + " " + y);\r
                        return true;\r
-               } else {\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
+               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
@@ -125,19 +123,21 @@ public class Lavirint {
                if (m.getMat(x, y) == Mapa.IZLAZ) {\r
                        r.dodaj(x, y, 0);\r
                        if (optResenje == null || c.compare(r, optResenje) < 0) {\r
-                               optResenje = r.clone();\r
+                               optResenje = new Resenje(r);\r
                        }\r
                        r.izbaciKraj();\r
-               } else {\r
-                       m.setPos(x, y, true);\r
-                       r.dodaj(x, y, m.getMat(x, y));\r
-                       optPut(x + 1, y, r, c);\r
-                       optPut(x, y + 1, r, c);\r
-                       optPut(x, y - 1, r, c);\r
-                       optPut(x - 1, y, r, c);\r
-                       m.setPos(x, y, false);\r
-                       r.izbaciKraj();\r
+                       return;\r
                }\r
+\r
+               // pokusavamo da trazimo dalje put\r
+               m.setPos(x, y, true);\r
+               r.dodaj(x, y, m.getMat(x, y));\r
+               optPut(x + 1, y, r, c);\r
+               optPut(x, y + 1, r, c);\r
+               optPut(x, y - 1, r, c);\r
+               optPut(x - 1, y, r, c);\r
+               m.setPos(x, y, false);\r
+               r.izbaciKraj();\r
        }\r
 }\r
 \r
@@ -153,4 +153,4 @@ class KomparatorPoVredosti implements Comparator<Resenje> {
        public int compare(Resenje r1, Resenje r2) {\r
                return r2.getVrednost() - r1.getVrednost();\r
        }\r
-}
\ No newline at end of file
+}\r
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner