void printpuzzle(board *b)
{
  int i;
  for(i=0;i<4;i++)
  {
   switch((i+1))
   {
    case 1:
      if(b->c1!=NULL && b->c1->to_goal==1)
      {
    printboard(b->c1);
    getch();
    printpuzzle(b->c1);
      }
      break;
    case 2:
      if(b->c2!=NULL && b->c2->to_goal==1)
      {
    printboard(b->c2);
    getch();
    printpuzzle(b->c2);
      }
      break;
    case 3:
      if(b->c3!=NULL && b->c3->to_goal==1)
      {
    printboard(b->c3);
    getch();
    printpuzzle(b->c3);
      }
      break;
    case 4:
      if(b->c4!=NULL && b->c4->to_goal==1)
      {
    printboard(b->c4);
    getch();
    printpuzzle(b->c4);
      }
      break;
     default:
       return;
   }
  }
}
void main()
{
	int fg=0;
	int f=0;
	int p1[3][3];
	f++;
	clrscr();
	printf("Enter initial state:\n");
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
		{
			scanf("%d",&mat[i][j]);
			if(mat[i][j]==0)
			{
				a=i;
				b=j;
			}
			puzzle=(puzzle*10)+mat[i][j];
		}

	printf("Enter solution:\n");
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
		{
			scanf("%d",&p1[i][j]);
			solution=(solution*10)+p1[i][j];
		}

	printf("Step %d:\n",f);
	printpuzzle();
	printf("\n\n");
	fg=equalp(puzzle,solution);
	if(fg==1)
	{
		printf("\n\nSolution Found:\n");
		printpuzzle();
		getch();
		exit(0);
	}

	insertclose(puzzle);

	while(1)
	{
	insertopen();

	returnopen();

	fg=equalp(puzzle,solution);
	if(fg==1)
	{
		printf("\n\nSolution Found:\n");
		printpuzzle();
		getch();
		break;
	}

	insertclose(puzzle);
	f++;
	printf("Step %d:\n",f);
	printpuzzle();
	printf("\n\n");
	getch();
	}

	getch();
}