#include<stdio.h>
#include<stdlib.h>
struct node{
int arr[10][10];
int i,j;
};
struct node* head = NULL;
struct node* q[200];
void insert(int n);
void check(int n);
int r=0,c=0;
void operations(int k,int m,int n);
void display(int n);
main()
{
int n=3;
insert(n);
display(n);
}
void insert(int n)
{
int i,j;
struct node *temp;
temp = (struct node*)malloc(sizeof(struct node));
printf("Enter 8 puzzle matrix");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&temp->arr[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(temp->arr[i][j]==0)
{
temp->i = i;
temp->j = j;
}
}
}
int k,m;
q[r] = temp;
while(1)
{
check(n);
if(r==100) break; // breaking at random point because it's just a representation of puzzle
k = q[r]->i;
m = q[r]->j;
if(++k<n && m<n && (k>=0 && m>=0))
{
operations(k,m,n);
}
k = q[r]->i;
m = q[r]->j;
if(--k<n && m<n&& (k>=0 && m>=0))
{
operations(k,m,n);
}
k = q[r]->i;
m = q[r]->j;
if(k<n && --m<n&& (k>=0 && m>=0))
{
operations(k,m,n);
}
k = q[r]->i;
m = q[r]->j;
if(k<n && ++m<n&& (k>=0 && m>=0))
{
operations(k,m,n);
}
r++;
}
}
//
void operations(int k,int m,int n)
{
int o,p;
struct node* t;
t = (struct node*)malloc(sizeof(struct node));
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
t->arr[i][j] = q[r]->arr[i][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(t->arr[i][j]==0)
{
o = i;
p=j;
}
}
}
int swap = t->arr[o][p];
t->arr[o][p] = t->arr[k][m];
t->arr[k][m] = swap;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(t->arr[i][j]==0)
{
t->i = i;
t->j = j;
}
}
}
c++;
q[c] = t;
}
// checking whether the matrix are repeating are not
void check(int n)
{
int i,j,k,i1,i3;
int count=0;
for(i=0;i<c;i++)
{
for(i3=i+1;i3<c;i3++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
if(q[i]->arr[j][k]==q[i3]->arr[j][k])
{
count++;
}
}
}
if(count==9)
{
for(i1=i3;i1<c;i1++)
{
q[i1] = q[i1+1];
}
c--;
count = 0;
}
count = 0;
}
}
}
void display(int n)
{
int i,j,k;
for(i=0;i<r;i++)
{
printf("\n");
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
printf("%d\t",q[i]->arr[j][k]);
}
printf("\n");
}
}
}
#include<stdlib.h>
struct node{
int arr[10][10];
int i,j;
};
struct node* head = NULL;
struct node* q[200];
void insert(int n);
void check(int n);
int r=0,c=0;
void operations(int k,int m,int n);
void display(int n);
main()
{
int n=3;
insert(n);
display(n);
}
void insert(int n)
{
int i,j;
struct node *temp;
temp = (struct node*)malloc(sizeof(struct node));
printf("Enter 8 puzzle matrix");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&temp->arr[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(temp->arr[i][j]==0)
{
temp->i = i;
temp->j = j;
}
}
}
int k,m;
q[r] = temp;
while(1)
{
check(n);
if(r==100) break; // breaking at random point because it's just a representation of puzzle
k = q[r]->i;
m = q[r]->j;
if(++k<n && m<n && (k>=0 && m>=0))
{
operations(k,m,n);
}
k = q[r]->i;
m = q[r]->j;
if(--k<n && m<n&& (k>=0 && m>=0))
{
operations(k,m,n);
}
k = q[r]->i;
m = q[r]->j;
if(k<n && --m<n&& (k>=0 && m>=0))
{
operations(k,m,n);
}
k = q[r]->i;
m = q[r]->j;
if(k<n && ++m<n&& (k>=0 && m>=0))
{
operations(k,m,n);
}
r++;
}
}
//
void operations(int k,int m,int n)
{
int o,p;
struct node* t;
t = (struct node*)malloc(sizeof(struct node));
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
t->arr[i][j] = q[r]->arr[i][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(t->arr[i][j]==0)
{
o = i;
p=j;
}
}
}
int swap = t->arr[o][p];
t->arr[o][p] = t->arr[k][m];
t->arr[k][m] = swap;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(t->arr[i][j]==0)
{
t->i = i;
t->j = j;
}
}
}
c++;
q[c] = t;
}
// checking whether the matrix are repeating are not
void check(int n)
{
int i,j,k,i1,i3;
int count=0;
for(i=0;i<c;i++)
{
for(i3=i+1;i3<c;i3++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
if(q[i]->arr[j][k]==q[i3]->arr[j][k])
{
count++;
}
}
}
if(count==9)
{
for(i1=i3;i1<c;i1++)
{
q[i1] = q[i1+1];
}
c--;
count = 0;
}
count = 0;
}
}
}
void display(int n)
{
int i,j,k;
for(i=0;i<r;i++)
{
printf("\n");
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
printf("%d\t",q[i]->arr[j][k]);
}
printf("\n");
}
}
}
No comments:
Post a Comment