gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Lavirint - trazenje najboljeg puta
[spa2-materijali.git] / PretrazivanjeSaVracanjem / Lavirint / NajboljiPut / LavirintV2.java
diff --git a/PretrazivanjeSaVracanjem/Lavirint/NajboljiPut/LavirintV2.java b/PretrazivanjeSaVracanjem/Lavirint/NajboljiPut/LavirintV2.java
new file mode 100644 (file)
index 0000000..57a536a
--- /dev/null
@@ -0,0 +1,86 @@
+/**\r
+ * Klasa Lavirint sadrzi 2 javne i jednu privatnu metodu za trazenje puteva.\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 LavirintV2 {\r
+\r
+ // Polje m sadrzi kompletnu mapu\r
+ private Mapa m;\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
+ LavirintV2(String imeFajla) {\r
+  m = Mapa.ucitajIzFajla(imeFajla);\r
+  m.stampaj();\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 Resenje najkraciPut(int x, int y) {\r
+  Resenje r = new Resenje();\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 Resenje najvrednijiPut(int x, int y) {\r
+  Resenje r = new Resenje();\r
+  optPut(x, y, r, 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 resenja se proverava komparatorom\r
+ private void optPut(int x, int y, Resenje r, Comparator<Resenje> 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
+   r.dodaj(x, y, 0);\r
+   if (optResenje == null || c.compare(r, optResenje) < 0) {\r
+    optResenje = r.clone();\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
+  }\r
+ }\r
+}\r
+\r
+// Komparator za resenja po duzini resenja\r
+class KomparatorPoDuzini implements Comparator<Resenje> {\r
+ public int compare(Resenje r1, Resenje r2) {\r
+  return r1.getLength() - r2.getLength();\r
+ }\r
+}\r
+\r
+// Komparator za resenja po vrednosti resenja\r
+class KomparatorPoVredosti implements Comparator<Resenje> {\r
+ public int compare(Resenje r1, Resenje r2) {\r
+  return r2.getVrednost() - r1.getVrednost();\r
+ }\r
+}
\ No newline at end of file
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner