gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Lavirint - resenje za najbolji put
[spa2-materijali.git] / PretrazivanjeSaVracanjem / Lavirint / NajboljiPut / Resenje.java
index e29f569..ffb2622 100644 (file)
@@ -11,62 +11,95 @@ import java.util.ArrayList;
 import java.util.List;\r
 import java.util.Collections;\r
 \r
-public class Resenje implements Cloneable {\r
- private ArrayList<Polje> polja;\r
+public class Resenje {\r
+       private ArrayList<Polje> polja;\r
+       private List<Polje> nepromenljivaListaPolja;\r
 \r
- Resenje() {\r
-  polja = new ArrayList<Polje>();\r
- }\r
+       public Resenje() {\r
+               polja = new ArrayList<Polje>();\r
+               nepromenljivaListaPolja = Collections.unmodifiableList(polja);\r
+       }\r
+       \r
+       /**\r
+               Pravi novo resenje sa istim sadrzajem kao original\r
+        */\r
+       public Resenje(Resenje original) {\r
+               // pozovemo "podrazumevani" konstruktor\r
+               this();\r
+               // iskopiramo sva polja iz originala\r
+               for (Polje p : original.getPolja()) {\r
+                       dodaj(p.getX(), p.getY(), p.getV());\r
+               }\r
+       }\r
 \r
- // Dodaje pulje u resenje\r
- public void dodaj(int x, int y, int v) {\r
-  polja.add(new Polje(x, y, v));\r
- }\r
      // Dodaje pulje u resenje\r
      public void dodaj(int x, int y, int v) {\r
+               polja.add(new Polje(x, y, v));\r
      }\r
 \r
- // Izbacuje polje iz resenja\r
- public void izbaciKraj() {\r
-  if (getLength() > 0) {\r
-   polja.remove(getLength() - 1);\r
-  } else {\r
-   System.err.println("greska: resenje je vec prazno");\r
-  }\r
- }\r
      // Izbacuje polje iz resenja\r
      public void izbaciKraj() {\r
+               if (getLength() > 0) {\r
+                       polja.remove(getLength() - 1);\r
+               } else {\r
+                       System.err.println("greska: resenje je vec prazno");\r
+               }\r
      }\r
 \r
- // Stampa resenje\r
- public void stampaj() {\r
-  System.out.println(getLength());\r
-  for (int i = 0; i < getLength(); i++)\r
-   System.out.println(polja.get(i));\r
- }\r
+       // Stampa resenje\r
+       public void stampaj() {\r
+               System.out.println(getLength());\r
+               for (int i = 0; i < getLength(); i++)\r
+                       System.out.println(polja.get(i));\r
+       }\r
+       \r
+       public String toString() {\r
+               StringBuilder sb = new StringBuilder();\r
+               sb.append("Resenje: [ ");\r
+               if (getLength()>0) {\r
+                       sb.append(polja.get(0));\r
+                       for (int i = 1; i < getLength(); i++) {\r
+                               sb.append(", " + polja.get(i));\r
+                       }\r
+               }\r
+               sb.append(" ]");\r
+               \r
+               return sb.toString();\r
+       }\r
 \r
- // Vraca duzinu resenja\r
- public int getLength() {\r
-  return polja.size();\r
- }\r
      // Vraca duzinu resenja\r
      public int getLength() {\r
+               return polja.size();\r
      }\r
 \r
- // Vraca i-to polje na putu. Ne koristi se u ovoj verziji zadatka.\r
- // Moze se koristiti za proveru kvaliteta resenja\r
- public Polje getPolje(int i) {\r
-  return polja.get(i);\r
- }\r
      // Vraca i-to polje na putu. Ne koristi se u ovoj verziji zadatka.\r
      // Moze se koristiti za proveru kvaliteta resenja\r
      public Polje getPolje(int i) {\r
+               return polja.get(i);\r
      }\r
 \r
- // Kreira klon od resenja\r
- @Override\r
- public Resenje clone() {\r
-  Resenje rez = new Resenje();\r
-  for (Polje p : polja) {\r
-   rez.dodaj(p.getX(), p.getY(), p.getV());\r
-  }\r
-  return rez;\r
- }\r
+       // Vraca sva polja na putu. Ne koristi se u ovoj verziji zadatka.\r
+       // 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
+       // Kreira nezavisnu kopiju ovog resenja\r
+       public Resenje kopija() {\r
+               Resenje rez = new Resenje();\r
+               for (Polje p : polja) {\r
+                       rez.dodaj(p.getX(), p.getY(), p.getV());\r
+               }\r
+               return rez;\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
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner