Code:
import java.util.*;
class dmin
{    int
m=0,n=4;
            public
int cal(int temp[][],int t[][])
             {
        
m=0;
                        for(int
i=0;i<n;i++)
                           for(int j=0;j<n;j++)
                             {
                                    if(temp[i][j]!=t[i][j])
                                       m++;
                             }
                         return m;
             }
             public boolean check(int a[][],int t[][])
             {
                        boolean
f=true;
                                    for(int
i=0;i<n;i++)
                                 for(int j=0;j<n;j++)
                                    if(a[i][j]!=t[i][j])
                                            f=false;
                        return
f;
             }
}
class Puzzle
{
            public
static void main(String ag[])
              {
                        Scanner
s=new Scanner(System.in);
                        System.out.println("enter
the matrix to be solved,space with zero");
                        int
n=4;
                        int
a[][]=new int[n][n];
                        int
t[][]=new int[n][n];
                        for(int
i=0;i<n;i++)
                           for(int j=0;j<n;j++)
                               a[i][j]=s.nextInt();
                         System.out.println("enter the target
matrix,space with zero");
                                    for(int
i=0;i<n;i++)
                           for(int j=0;j<n;j++)
                               t[i][j]=s.nextInt();
                          int m=0,x=0,y=0,d=1000,dmin=0,l=0; 
                          dmin g=new dmin();
                          int temp[][]=new int[n][n];
                          int r[][]=new int[n][n];  
               while(!(g.check(a,t)))
                          { l++;d=1000;
                                     for(int i=0;i<n;i++)
                                        for(int j=0;j<n;j++)
                                           {
                                                 if(a[i][j]==0)
                                                    {x=i;y=j; }
                                           }
                                      //up
                                                for(int
i=0;i<n;i++)
                                     for(int j=0;j<n;j++)
                                          temp[i][j]=a[i][j]; 
                                       if(x!=0)
                                          {
                                                int
p=temp[x][y];
                                                temp[x][y]=temp[x-1][y];
                                                temp[x-1][y]=p;
                                          }    
                                         m=g.cal(temp,t);
                                         dmin=l+m; 
                                        if(dmin<d)
                                         { d=dmin;
                                                for(int
i=0;i<n;i++)
                                     for(int j=0;j<n;j++)
                                          r[i][j]=temp[i][j]; 
                                         } 
                                      //down
                                      for(int i=0;i<n;i++)
                                     for(int j=0;j<n;j++)
                                          temp[i][j]=a[i][j]; 
                                       if(x!=n-1)
                                        {
                                                int
p=temp[x][y];
                                                temp[x][y]=temp[x+1][y];
                                                temp[x+1][y]=p;
                                          }    
                                         m=g.cal(temp,t); 
                                         dmin=l+m; 
                                        if(dmin<d)
                                          { d=dmin;
                                                for(int
i=0;i<n;i++)
                                     for(int j=0;j<n;j++)
                                          r[i][j]=temp[i][j]; 
                                         } 
                                         //right
                                           for(int i=0;i<n;i++)
                                     for(int j=0;j<n;j++)
                                          temp[i][j]=a[i][j]; 
                                       if(y!=n-1)
                                        {
                                                int
p=temp[x][y];
                                                temp[x][y]=temp[x][y+1];
                                                temp[x][y+1]=p;
                                          }    
                                         m=g.cal(temp,t); 
                                         dmin=l+m; 
                                        if(dmin<d)
                                          { d=dmin;
                                                for(int
i=0;i<n;i++)
                                     for(int j=0;j<n;j++)
                                          r[i][j]=temp[i][j]; 
                                         }  
                                          //left
                                                for(int
i=0;i<n;i++)
                                     for(int j=0;j<n;j++)
                                          temp[i][j]=a[i][j]; 
                                       if(y!=0)
                                          {
                                                int
p=temp[x][y];
                                                temp[x][y]=temp[x][y-1];
                                                temp[x][y-1]=p;
                                          }    
                                         m=g.cal(temp,t);
                                         dmin=l+m;  
                                        if(dmin<d)
                                          { d=dmin;
                                                for(int
i=0;i<n;i++)
                                     for(int j=0;j<n;j++)
                                          r[i][j]=temp[i][j]; 
                                         }  
                                       for(int i=0;i<n;i++)
                                         {for(int j=0;j<n;j++)
                                               System.out.print(r[i][j]+"
");
                                            System.out.println();               
                                          }
                                                for(int
i=0;i<n;i++)
                                     for(int j=0;j<n;j++)
                                         { a[i][j]=r[i][j];
                                           temp[i][j]=0;
                                         } 
                                        System.out.println(d);     
                                     }
              }
}
OUTPUT:

No comments:
Post a Comment