Advertisement
jovanovski

ВИ Сложувалка

May 19th, 2013
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.89 KB | None | 0 0
  1. import java.util.Collections;
  2. import java.util.LinkedList;
  3.  
  4. class sostojba implements Comparable {
  5.     int[][] tabla;
  6.     int hevristika;
  7.     boolean neupotrebliv;
  8.  
  9.     sostojba(int[][] sos) {
  10.         tabla = new int[3][];
  11.         for (int i = 0; i < 3; i++) {
  12.             tabla[i] = sos[i].clone();
  13.         }
  14.         neupotrebliv = false;
  15.         presmetajHevristika();
  16.     }
  17.  
  18.     private void presmetajHevristika() {
  19.         int hev = 0;
  20.         if (tabla[0][0] == 1)
  21.             hev++;
  22.         if (tabla[0][1] == 2)
  23.             hev++;
  24.         if (tabla[0][2] == 3)
  25.             hev++;
  26.         if (tabla[1][0] == 8)
  27.             hev++;
  28.         if (tabla[1][1] == 0)
  29.             hev++;
  30.         if (tabla[1][2] == 4)
  31.             hev++;
  32.         if (tabla[2][0] == 7)
  33.             hev++;
  34.         if (tabla[2][1] == 6)
  35.             hev++;
  36.         if (tabla[2][2] == 5)
  37.             hev++;
  38.  
  39.         hevristika = hev;
  40.     }
  41.  
  42.     public int compareTo(sostojba arg0) {
  43.         if (this.hevristika > arg0.hevristika)
  44.             return -1;
  45.         else if (this.hevristika < arg0.hevristika)
  46.             return 1;
  47.         else
  48.             return 0;
  49.  
  50.     }
  51.  
  52.     @Override
  53.     public int compareTo(Object o) {
  54.         return this.compareTo((sostojba) o);
  55.     }
  56.  
  57.     public String toString() {
  58.         String sos1 = "";
  59.         for (int i = 0; i < 3; i++) {
  60.             for (int j = 0; j < 3; j++) {
  61.                 sos1 += tabla[i][j];
  62.             }
  63.             sos1 += "\n";
  64.         }
  65.         return sos1;
  66.     }
  67.  
  68.    
  69.     public boolean equals(Object ob){
  70.         if(this.equals((sostojba) ob))
  71.             return true;
  72.        
  73.         return false;
  74.     }
  75.    
  76.     public boolean equals(sostojba sos) {
  77.         String sos1 = "";
  78.         for (int i = 0; i < 3; i++) {
  79.             for (int j = 0; j < 3; j++) {
  80.                 sos1 += tabla[i][j];
  81.             }
  82.         }
  83.         String sos2 = "";
  84.         for (int i = 0; i < 3; i++) {
  85.             for (int j = 0; j < 3; j++) {
  86.                 sos2 += sos.tabla[i][j];
  87.             }
  88.         }
  89.         return sos1.equals(sos2);
  90.     }
  91.  
  92. }
  93.  
  94. class slagalica {
  95.     // 0 e praznoto mesto
  96.     int[][] tabla;
  97.  
  98.     slagalica() {
  99.         tabla = new int[3][3];
  100.         tabla[0][0] = 2;
  101.         tabla[0][1] = 8;
  102.         tabla[0][2] = 3;
  103.         tabla[1][0] = 1;
  104.         tabla[1][1] = 6;
  105.         tabla[1][2] = 4;
  106.         tabla[2][0] = 0;
  107.         tabla[2][1] = 7;
  108.         tabla[2][2] = 5;
  109.     }
  110.  
  111.     public LinkedList<sostojba> moznisostojbi() {
  112.         LinkedList<sostojba> sostojbi = new LinkedList<sostojba>();
  113.         int in = -1, jn = -1;
  114.  
  115.         for (int i = 0; i < 3; i++) {
  116.             for (int j = 0; j < 3; j++) {
  117.                 if (tabla[i][j] == 0) {
  118.                     in = i;
  119.                     jn = j;
  120.                 }
  121.             }
  122.         }
  123.  
  124.         int[][] temp = new int[3][3];
  125.  
  126.         // proveri gore
  127.         if (in > 0) {
  128.             int tmp = tabla[in][jn];
  129.             tabla[in][jn] = tabla[in - 1][jn];
  130.             tabla[in - 1][jn] = tmp;
  131.             sostojbi.add(new sostojba(tabla));
  132.             tmp = tabla[in][jn];
  133.             tabla[in][jn] = tabla[in - 1][jn];
  134.             tabla[in - 1][jn] = tmp;
  135.         }
  136.         // proveri dole
  137.         temp = new int[3][3];
  138.         if (in < 2) {
  139.             int tmp = tabla[in][jn];
  140.             tabla[in][jn] = tabla[in + 1][jn];
  141.             tabla[in + 1][jn] = tmp;
  142.             sostojbi.add(new sostojba(tabla));
  143.             tmp = tabla[in][jn];
  144.             tabla[in][jn] = tabla[in + 1][jn];
  145.             tabla[in + 1][jn] = tmp;
  146.         }
  147.         // proveri levo
  148.         temp = new int[3][3];
  149.         if (jn > 0) {
  150.             int tmp = tabla[in][jn];
  151.             tabla[in][jn] = tabla[in][jn - 1];
  152.             tabla[in][jn - 1] = tmp;
  153.             sostojbi.add(new sostojba(tabla));
  154.             tmp = tabla[in][jn];
  155.             tabla[in][jn] = tabla[in][jn - 1];
  156.             tabla[in][jn - 1] = tmp;
  157.         }
  158.         // proveri desno
  159.         temp = new int[3][3];
  160.         if (jn < 2) {
  161.             int tmp = tabla[in][jn];
  162.             tabla[in][jn] = tabla[in][jn + 1];
  163.             tabla[in][jn + 1] = tmp;
  164.             sostojbi.add(new sostojba(tabla));
  165.             tmp = tabla[in][jn];
  166.             tabla[in][jn] = tabla[in][jn + 1];
  167.             tabla[in][jn + 1] = tmp;
  168.         }
  169.  
  170.         // Debug
  171.         // for(int i=0;i<sostojbi.size();i++)
  172.         // System.out.println(sostojbi.get(i) + "" +
  173.         // sostojbi.get(i).hevristika);
  174.  
  175.         return sostojbi;
  176.     }
  177.  
  178. }
  179.  
  180. public class lab {
  181.  
  182.     @SuppressWarnings("unchecked")
  183.     public static void main(String[] args) {
  184.         LinkedList<sostojba> izminati = new LinkedList<sostojba>();
  185.         slagalica s1 = new slagalica();
  186.         sostojba pocetok = new sostojba(s1.tabla);
  187.         izminati.add(pocetok);
  188.  
  189.         int[][] kraj = new int[3][3];
  190.         kraj[0][0] = 1;
  191.         kraj[0][1] = 2;
  192.         kraj[0][2] = 3;
  193.         kraj[1][0] = 8;
  194.         kraj[1][1] = 0;
  195.         kraj[1][2] = 4;
  196.         kraj[2][0] = 7;
  197.         kraj[2][1] = 6;
  198.         kraj[2][2] = 5;
  199.  
  200.         sostojba krajna = new sostojba(kraj);
  201.        
  202.         System.out.println(pocetok);
  203.        
  204.         int brojac = 0;
  205.         while (!izminati.contains(krajna)) {
  206.             boolean promena = false;
  207.             brojac++;
  208.             LinkedList<sostojba> tmplist = s1.moznisostojbi();
  209.             for (int i = 0; i < tmplist.size(); i++) {
  210.                 if (!izminati.contains(tmplist.get(i))) {
  211.                     izminati.add(tmplist.get(i));
  212.                     promena = true;
  213.                     //ERR
  214.                 }
  215.             }
  216.  
  217.             if (!promena) {
  218.                 izminati.get(0).neupotrebliv = true;
  219.             } else {
  220.                 Collections.sort(izminati);
  221.             }
  222.  
  223.             sostojba najdobra = null;
  224.  
  225.             for (int i = 0; i < izminati.size(); i++) {
  226.                 if (!izminati.get(i).neupotrebliv) {
  227.                     najdobra = izminati.get(i);
  228.                     break;
  229.                 }
  230.             }
  231.  
  232.             if (najdobra == null) {
  233.                 System.out.println("ERROR");
  234.                 break;
  235.             } else {
  236.                 System.out.println(najdobra);
  237.                 s1.tabla = najdobra.tabla;
  238.             }
  239.  
  240.         }
  241.         System.out.println(brojac);
  242.  
  243.     }
  244. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement