c++ 数字华容道算法

为什么在第二次移动是第一个数消失了?如何改正

#include <iostream>
using namespace std;
class pt
{
public:
    int a[3][3];
    int i=0,j=0,x,y;
     int n=0,count1=0;
    char st;
    void seta()
    {
    for(i=0;i<3;i++)
    {
       for(j=0;j<3;j++)
       {
         cin>>a[i][j];
       }
    }
    }
    void geta()
    {
     for(i=0;i<3;i++)
    {
      for(j=0;j<3;j++)
       {
           if(a[i][j]==0)
           {
               cout<<"  ";
           }
       else  cout<< a[i][j] <<" ";
       }
       cout <<endl;
    }
    }

    void left()
    {
     for(i=0;i<3;i++)
    {
       for(j=0;j<3;j++)
       {
         if(a[i][j]==0)
         {
             x=i;y=j;
         }
       }
    }
    a[x][y]=a[x][y+1];
    a[x][y+1]=0;
  }
    void right()
    {
     for(i=0;i<3;i++)
    {
       for(j=0;j<3;j++)
       {
         if(a[i][j]==0)
         {
             x=i;y=j;
         }
       }
    }
    a[x][y]=a[x][y-1];
    a[x][y-1]=0;
  }
    void up()
    {
     for(i=0;i<3;i++)
    {
       for(j=0;j<3;j++)
       {
         if(a[i][j]==0)
         {
             x=i;y=j;
         }
       }
    }
    a[x][y]=a[x+1][y];
    a[x+1][y]=0;
}
    void down()
    {
     for(i=0;i<3;i++)
    {
       for(j=0;j<3;j++)
       {
         if(a[i][j]==0)
         {
             x=i;y=j;
         }
       }
    }
    a[x][y]=a[x-1][y];
    a[x-1][y]=0;
    }
    int co()
    {
         for(i=0;i<3;i++)
         {
              for(j=0;j<3;j++)
               {
                   if( a[i][j]=n++)
                      count1=1;
                     else
                       {
                        count1=0;
                        return 0;
                        }
               }

           }
           return 1;
   }
};

int main()
{  int flag=0;
    pt m;
    m.seta();
    m.geta();
    while(flag==0)
    {
      cin>>m.st;
      if(m.st=='a')
       {
          m.left();
       }
       else if(m.st=='d')
       {
           m.right();
       }
       else if(m.st=='w')
       {
           m.up();
       }
       else if(m.st=='s')
       {
           m.down();
       }
       m.geta();
       flag=m.co();
    }
    return 0;
}






```